概述:
- redis是key-value的數據結構,每條數據都是⼀個鍵值對
- 鍵的類型是字符串
-
注意:鍵不能重複
-
值得類型有五種:string(字符串),list(列表),hash(字典),set(集合),zset(有序的集合)
數據操作
- 保存
- 修改
- 獲取
- 刪除
命令文章鏈接:http://redis.cn/commands.html
string(字符串)
字符串類型是Redis中最爲基礎的數據存儲類型,內部表示是一個字符數組
它在Redis中是二進制安全的,這便意味着該類型可以接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。
在Redis中字符串類型的Value最多可以容納的數據長度是512M
保存/獲取
如果設置的鍵不存在則爲添加,如果設置的鍵已經存在則修改
set key value 設置
get key 獲取
127.0.0.1:6379> set hometown leshan
OK
127.0.0.1:6379> get hometown
"leshan"
127.0.0.1:6379> set hometown chengdu
OK
127.0.0.1:6379> get hometown
"chengdu"
127.0.0.1:6379>
批量鍵值對
mset key1 value1 key2 value2 .... 設置
mget key1 key2 ..... 獲取
127.0.0.1:6379> set name1 onion
OK
127.0.0.1:6379> set name2 tom
OK
127.0.0.1:6379> mget name1
1) "onion"
127.0.0.1:6379> mget name1 name2
1) "onion"
2) "tom"
127.0.0.1:6379> mget name1 name2 name3
1) "onion"
2) "tom"
3) (nil)
127.0.0.1:6379>
127.0.0.1:6379> mset name1 qqq name2 wwww name3 eeee
OK
127.0.0.1:6379> mget name1 name2 name3
1) "qqq"
2) "wwww"
3) "eeee"
127.0.0.1:6379>
設置過期時間
setex key seconds value
127.0.0.1:6379> setex name 5 tina
OK
127.0.0.1:6379> get name
"tina"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>
鍵命令
查找鍵、判斷鍵是否存在
鍵查找 keys <pattern>
判斷鍵是否存在 exist <key>
判斷鍵的類型 type <key>
刪除鍵 del [key...]
查看生存時間 ttl <key>
#匹配所有的鍵
127.0.0.1:6379> KEYS *
1) "name2"
2) "hometown"
3) "name1"
4) "name3"
#匹配n開頭的鍵
127.0.0.1:6379> keys n*
1) "name2"
2) "name1"
3) "name3"
#判斷鍵是否存在
127.0.0.1:6379> EXISTS hometown
(integer) 1
127.0.0.1:6379> EXISTS home
(integer) 0
127.0.0.1:6379>
判斷鍵的類型
127.0.0.1:6379> type name
none
127.0.0.1:6379> type name1
string
127.0.0.1:6379>
#ttl 生存時間
127.0.0.1:6379> setex name 20 tina
OK
127.0.0.1:6379>
127.0.0.1:6379> ttl name
(integer) 16
127.0.0.1:6379> ttl name
(integer) 15
127.0.0.1:6379> ttl name
(integer) 14
127.0.0.1:6379> ttl name
hash類型
- hash⽤於存儲對象,對象的結構爲屬性、值
- 值的類型爲string
設置單個屬性 hset key field value
設置多個屬性 hmset key field1 value1 field2 value2 ...
獲取所有的key hkeys key
獲取⼀個屬性的值 hget key field
獲取多個屬性的值 hmget key field1 field2 ...
獲取所有屬性的值 hvals key
刪除
- 刪除整個hash鍵及值,使⽤del命令
刪除屬性,屬性對應的值會被⼀起刪除
hdel key field1 field2 ...
#設置單個
127.0.0.1:6379> hset books java "think in java"
(integer) 1
#設置多個
127.0.0.1:6379> HMSET user name onion age 20 hometown "leshan"
OK
#獲取所有的key
127.0.0.1:6379> HKEYS user
1) "name"
2) "age"
3) "hometown"
#獲取屬性的值
127.0.0.1:6379> hget user age
"20"
127.0.0.1:6379> hmget user age hometown
1) "20"
2) "leshan"
127.0.0.1:6379>
#獲取所有的屬性的值
127.0.0.1:6379> HVALS user
1) "onion"
2) "20"
3) "leshan"
#刪除
127.0.0.1:6379> hdel user name age
(integer) 2
127.0.0.1:6379> HVALS user
1) "leshan"
127.0.0.1:6379>
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> HVALS user
(empty list or set)
list類型
- 列表的元素類型爲string
- 按照插⼊順序排序
- 注意它是鏈表不是數組,意味着插入和刪除非常快,時間複雜度O(1),但是查詢慢O(n)
- redis 列表結構常用於做異步隊列使用,將需要延後處理的任務結構體序列化成字符串,塞進列表,另一個線程從這個列表中輪詢數據進行處理
在左側插⼊數據 lpush key value1 value2 ...
在右側插⼊數據 rpush key value1 value2 ...
在指定元素的前或後插⼊新元素 linsert key before或after 現有元素 新元素
獲取
返回列表⾥指定範圍內的元素
- start、stop爲元素的下標索引
- 索引從左側開始,第⼀個元素爲0
- 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素
lrange key start stop
設置指定索引位置的元素值
- 索引從左側開始,第⼀個元素爲0
索引可以是負數,表示尾部開始計數,如-1表示最後⼀個元素
lset key index value
刪除
刪除指定元素
- 將列表中前count次出現的值爲value的元素移除
- count > 0: 從頭往尾移除
- count < 0: 從尾往頭移除
- count = 0: 移除所有
lrem key count value
#右進左出:隊列
127.0.0.1:6379> RPUSH num 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LLEN num
(integer) 5
127.0.0.1:6379> LPOP num
"1"
127.0.0.1:6379> LPOP num
"2"
127.0.0.1:6379> LPOP num
"3"
127.0.0.1:6379> LPOP num
"4"
127.0.0.1:6379> LPOP num
"5"
127.0.0.1:6379>
#左進左出,棧
127.0.0.1:6379> LPUSH num2 1 2 3 4
(integer) 4
127.0.0.1:6379> lpop num2
"4"
127.0.0.1:6379> lpop num2
"3"
127.0.0.1:6379> lpop num2
"2"
127.0.0.1:6379> lpop num2
"1"
127.0.0.1:6379> lpop num2
(nil)
127.0.0.1:6379>
127.0.0.1:6379> LPUSH a 1 2 3 4 5 6 7 8 9 0
(integer) 10
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> LRANGE a 0 -1 #獲取所有的元素 O(n)
1) "0"
2) "9"
3) "8"
4) "7"
5) "6"
6) "5"
7) "4"
8) "3"
9) "2"
10) "1"
127.0.0.1:6379> ltrim a 4 8 #保留區間裏的值 兩邊都是閉區間[]
OK
127.0.0.1:6379> LRANGE a 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
127.0.0.1:6379>
#刪除
127.0.0.1:6379> lpush a2 a b a b a b
(integer) 6
127.0.0.1:6379> lrange a2 0 -1
1) "b"
2) "a"
3) "b"
4) "a"
5) "b"
6) "a"
127.0.0.1:6379> lrem a2 -2 b #從右側第2個開始刪除兩個b
(integer) 2
127.0.0.1:6379> lrange a2 0 -1
1) "b"
2) "a"
3) "a"
4) "a"
127.0.0.1:6379>
set類型
- ⽆序集合
- 元素爲string類型
- 元素具有唯⼀性,不重複 (去重)
- 說明:對於集合沒有修改操作
添加元素 sadd key member1 member2 ...
返回所有的元素 smembers key
刪除指定元素 srem key
#添加
127.0.0.1:6379> SADD books python java c go
(integer) 4
127.0.0.1:6379>
127.0.0.1:6379> SADD books python java c go
(integer) 0
#查看
127.0.0.1:6379> SMEMBERS books
1) "python"
2) "go"
3) "c"
4) "java"
#刪除
127.0.0.1:6379> SREM books python
(integer) 1
127.0.0.1:6379> SMEMBERS books
1) "go"
2) "c"
3) "java"
zset類型(有序集合)
- sorted set,有序集合
- 元素爲string類型
- 元素具有唯⼀性,不重複
- 每個元素都會關聯⼀個double類型的score,表示權重,通過權重將元素從⼩到⼤排序
- 說明:沒有修改操作
它是一個set,保證內部value的唯一性,可以爲每個value賦予一個score,表示這個value 的排序權重。
內部實現“跳躍表”的數據結構
添加
zadd key score1 member1 score2 member2 ...
127.0.0.1:6379> zadd name 4 tim 5 tom 6 tina 7 onion
(integer) 4
獲取
- 返回指定範圍內的元素
- start、stop爲元素的下標索引
- 索引從左側開始,第⼀個元素爲0
- 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素
zrange key start stop
- 返回score值在min和max之間的成員
zrangebyscore key min max
- 返回成員member的score值
zscore key member
#獲取name 中所有的value
127.0.0.1:6379> ZRANGE name 0 -1
1) "tim"
2) "tom"
3) "tina"
4) "onion"
#獲取權重 5-7 的元素值
127.0.0.1:6379> ZRANGEBYSCORE name 5 7
1) "tom"
2) "tina"
3) "onion"
#獲取onion 的權重
127.0.0.1:6379> ZSCORE name onion
"7"
刪除
-
刪除指定元素
zrem key member1 member2 ...
- 刪除權重在指定範圍的元素
zremrangebyscore key min max
#刪除 成員 tom
127.0.0.1:6379> ZRANGE name 0 4
1) "tim"
2) "tom"
3) "tina"
4) "onion"
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> ZREM name tom
(integer) 1
127.0.0.1:6379> ZRANGE name 0 -1
1) "tim"
2) "tina"
3) "onion"
#刪除去權重在6-7 之間的成員
127.0.0.1:6379> zremrangebyscore name 6 7
(integer) 2
127.0.0.1:6379> ZRANGE name 0 -1
1) "tim"
127.0.0.1:6379>