一.Redis數據類型
參考資料:http://www.redis.cn/topics/data-types.html
相關命令參考: http://redisdoc.com/
Redis 是一種基于內存的開源數據結構存儲系統,支持多種數據類型,每種數據類型都有自己特定的操作命令。
-
String(字符串):
特點:最基本的數據類型,可以存儲字符串、整數或者浮點數。
用途:常用于緩存、計數器、計分等場景。 -
Hash(哈希):
特點:存儲了鍵值對集合,適合存儲對象。
用途:存儲和獲取對象的多個字段值,比如存儲用戶信息、商品信息等。 -
List(列表):
特點:鏈表結構,可以包含多個字符串元素,支持棧和隊列操作。
用途:適合用于消息隊列、最近聯系人列表、新聞流等場景。 -
Set(集合):
特點:存儲字符串的無序集合,元素唯一。
用途:適合做唯一值的存儲,比如用戶的標簽、點贊用戶列表等。 -
Sorted Set(有序集合):
特點:和集合類似,但每個元素都關聯一個分數(score),可以根據分數進行排序。
用途:適合做排行榜、范圍查詢等,比如積分排行榜、最熱門文章等。
1.字符串string
字符串是所有編程語言中最常見的和最常用的數據類型,而且也是redis最基本的數據類型之一,而且redis 中所有的 key 的類型都是字符串。常用于保存 Session 信息場景,此數據類型比較常用
格式·:SETkeyvalue [EX seconds] [PX milliseconds] [NX|XX]時間復雜度: O(1)將字符串值 value 關聯到 key?如果 key 已經持有其他值, SET 就覆寫舊值,無視類型。
當 SET 命令對一個帶有生存時間(TTL)的鍵進行設置之后,該鍵原有的 TTL 將被清除。從 Redis 2.6.12 版本開始, SET 命令的行為可以通過一系列參數來修改:
EX seconds :將鍵的過期時間設置為 seconds 秒。執行 SET key value EX seconds 的效果等同于執行 SETEX key seconds value 。PX milliseconds :將鍵的過期時間設置為 milliseconds 毫秒。執行 SET key value PX?milliseconds 的效果等同于執行 PSETEX key milliseconds value 。NX :只在鍵不存在時,才對鍵進行設置操作。執行 SET key value NX 的效果等同于執行 SETNX key value 。
XX :只在鍵已經存在時,才對鍵進行設置操作。
示例:
1.判斷類型 type
type
TYPE key1 ?#判斷類型
2.設置自動過期 ex
ex
SET title ceo ex 3#設置自動過期時間3s OK
3.key不存在時設置,相當于添加? setnx
4.修改(key需要存在)? xx? ? 相當于update
5.刪除key? ? del
6.批量設置多個key? ?mset
? ?批量獲取多個key? ?mget
7.追加數據? ?append
8.返回字符串key對應值的字節數? ?strlen
9.判斷key是否存在
10.查看超時時間
ttl key #查看key的剩余生存時間,如果key過期后,會自動刪除
-
-1#返回值表示永不過期,默認創建的key是永不過期,重新對key賦值,也會從有剩余生命周期變成永不過期
-
-2#返回值表示沒有此key
-
num #key的剩余有效期
11.重新設置key的過期時間
EXPIRE? ?重新設置過期時間
PERSIST? ? 永遠不過期
127.0.0.1:6379> set name cxk ex 20 #建立一個key,過期時間為20秒
OK
127.0.0.1:6379> ttl name
(integer) 19
127.0.0.1:6379> expire name 1000 #重新設置過期時間為1000秒
(integer) 1
127.0.0.1:6379> ttl name
(integer) 998
127.0.0.1:6379> persist name #永遠不過期
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379>
2.列表list
列表是一個雙向可讀寫的管道,其頭部是左側,尾部是右側,一個列表最多可以包含2^32-1(4294967295)個元素,下標 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素,元素值可以重復,常用于存入日志等場景,此數據類型比較常用
-
有序
-
可重復
-
左右都可以操作
生成列表并插入數據
命令 | 解釋 例子 |
---|---|
lpush | 從左邊添加數據 例子:lpush name zhou wu zheng wang |
rpush | 從右邊添加數據 例子: rpush car benz bmw |
llen | 獲取列表長度 例子: llen 列表名稱 |
lindex | 獲取單個元數 例子: lindex name 0 ; lindex name -1 |
lrange | 獲取多個元素 例子: lrange name 0 3 第1個到第三個元素 |
lset | 修改列表元素 例子: lset name 2 feng 將name的第二個元素改為feng |
lpop | 刪除列表元素 例子: lpop name 刪除左邊第一個 |
rpop | 刪除列表元素 例子: rpop name 刪除右邊第一個 |
ltrim | 對列表修剪, 例子: ltrim name 1 2 只留下編號為 1 2 的文件 |
del | 刪除列表 例子:del name |
LPUSH和RPUSH都可以插入列表
LPUSHkeyvalue [value …]
時間復雜度: O(1)
將一個或多個值 value 插入到列表 key 的表頭如果有多個 value 值,那么各個 value 值按從左到右的順序依次插入到表頭:比如說,對空列表
mylist 執行命令 LPUSH mylist a b c ,列表的值將是 c b a ,這等同于原子性地執行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三個命令。如果 key 不存在,一個空列表會被創建并執行 LPUSH 操作。當 key 存在但不是列表類型時,返回一個錯誤。
RPUSH key value [value …]
時間復雜度: O(1)
將一個或多個值 value 插入到列表 key 的表尾(最右邊)如果有多個 value 值,那么各個 value 值按從左到右的順序依次插入到表尾:比如對一個空列表 mylist 執行 RPUSH mylist a b c ,得出的結果列表為 a b c ,等同于執行命令 RPUSH mylist a 、
RPUSH mylist b 、 RPUSH mylist c 。如果 key 不存在,一個空列表會被創建并執行 RPUSH 操作。當 key 存在但不是列表類型時,返回一個錯誤。
示例:
新建列表
127.0.0.1:6379> lpush name zhou wang qiu sun
(integer) 4
127.0.0.1:6379> type name
list
127.0.0.1:6379> llen name
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "sun"
2) "qiu"
3) "wang"
4) "zhou"
#數據是從右往左添加的,所以看到的是sun開始
#從左往右邊加 數據
127.0.0.1:6379> rpush name xu wu zheng han
(integer) 8
127.0.0.1:6379> lrange name 0 -1
1) "sun"
2) "qiu"
3) "wang"
4) "zhou"
5) "xu"
6) "wu"
7) "zheng"
8) "han"