-
keys pattern 查看該表下匹配到的 keys 命令 keys * 查看表下所有key
-
type key 查看key對應的類型
-
exists key 檢測key是否是表中存在
-
expire key time 為某個key設置超時時間
-
move key db 將key 移動到另一個db下
-
del key 刪除指定key 還可以一次性刪除多個: del key1 key2 key3
127.0.0.1:6379> keys *
1) "loveyue"
2) "name"
3) "num"
127.0.0.1:6379> type name
string
127.0.0.1:6379> exists info
(integer) 0
127.0.0.1:6379> expire name 1
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> keys *
1) "loveyue"
2) "num"
127.0.0.1:6379> set name2 'lina'
OK
127.0.0.1:6379> set name3 'david'
OK
127.0.0.1:6379> keys name*
1) "name2"
2) "name3"
127.0.0.1:6379> del name2 name3
(integer) 2
127.0.0.1:6379> keys name*
(empty list or set)
- set key value 設置key對應value 后面還有可選參數, ex:超時時間(秒) px: 毫秒 nx: 只有當key 不存在時,才會創建, xx: 只有當key存在時才能修改
127.0.0.1:6379> set key value [EX seconds] [PX milliseconds] [NX|XX] 如:set name lina ex 3 nx
127.0.0.1:6379> keys *
1) "loveyue"
2) "num"
127.0.0.1:6379> set name lina ex 10 nx
OK
127.0.0.1:6379> get name
"lina"
-
setnx key value 只有不存在是才創建,和上面的帶可選參數nx 一樣
-
setxx key value 同理
-
setex key seconds value 直接設置超時時間 setex name 5 lina 這個5秒后就不在了
-
get key 獲取key 對應的value 如:get name
- mset key1 value1 key2 value2 可以一次性設置多個key-value
- mget key1 key2 一次性獲得多個value
127.0.0.1:6379> mset name1 lina name2 david name3 wang
OK
127.0.0.1:6379> mget name1 name2 name3
1) "lina"
2) "david"
3) "wang"
-
strlen key 返回字符串長度,注意utf-8下一個中文三個字節
-
getset key value 獲取到key原來的值返回,並給它賦新值value
-
getrange key start end 獲取key 對應的字符,並切片 從 start 到 end 返回
-
setrange key offset value 將key對應 值,從offset 位置開始用value覆蓋
127.0.0.1:6379> getset name1 xxxx
"lina"
127.0.0.1:6379> getrange name1 1 -1
"xxx"
127.0.0.1:6379> setrange name1 1 99999
(integer) 6
127.0.0.1:6379> get name1
"x99999"
-
incr key 自增,調用一次自增一
-
decr key 自減
-
append key value 在后面追加
- setbit key offset value 這個命令會把key下面的值的二進制數據格式,長度的offset位置的值改為value(只能為 0 或 1)
如 name -anny 如果執行命令: setbit name 6 1 那么anny--->cnny ,原理 a 的ASCII 值為:97 在內存中二進制數據為:0b1100001 改動第六位變成: 0b1100011 ASCII值變為99變成了c
127.0.0.1:6379> set name anny
OK
127.0.0.1:6379> setbit name 6 1
(integer) 0
127.0.0.1:6379> get name
"cnny"
當然你還可以不用管key 對應的值是什么隨便設置
- setbit name 1997 1 如我將1997位設置為1 ,當然字符串的長度4x8=32 位肯定不夠1千多位,中間缺少的自動用0補齊了
127.0.0.1:6379> setbit name 1997 1
(integer) 0
127.0.0.1:6379> get name
"cnny\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
......................................................
0\x00\x00\x00\x00\x00\x00\x04"
- bitcount key start end 統計該值中二進制數據一共有多少個1,后面兩個為可選參數,默認0到最后(-1)
- gitbit key offset 拿到key 對應的offset 位置的二進制數據是為0 還是1
127.0.0.1:6379> bitcount name 0 -1
(integer) 20
127.0.0.1:6379> bitcount name
(integer) 20
127.0.0.1:6379> getbit name 6
(integer) 1
應用場景:假設你要維護數億條登錄狀態數據,如騰訊QQ,微信什么的,如果是在mysql中,我們就需要增加一個字段login_status,存登錄狀態,但是數以億計的就會導致耗費巨量存儲空間,及查詢速度
但是我們使用redis 的這個功能, setbit gitbit bitcount
我們只需要0表示未登錄,1表示登錄
那么一億人的數據會占據多大空間呢?8x1024x1024x12 = 100663296 一億多十萬。 也就12M的空間
當第1717個人登錄時:我們只需
setbit login_status 1717 1
當他注銷時:
setbit login_status 1717 0
查看第437 個人是否是登錄狀態
getbit login_status 437
統計當前有多少人在線
bitcount login_status 0 -1
127.0.0.1:6379> setbit login_status 1717 1
(integer) 0
127.0.0.1:6379> setbit login_status 437 1
(integer) 0
127.0.0.1:6379> getbit login_status 437
(integer) 1
127.0.0.1:6379> bitcount login_status
(integer) 4