Redis keys
Redis key值是二進制安全的,這意味着可以用任何二進制序列作為key值,從形如”foo”的簡單字符串到一個JPEG文件的內容都可以。空字符串也是有效key值。
關於key的幾條規則:
- 不要太長(不僅消耗內存,而且數據查找成本大)
- 不要太短(語意不明 比如”u:1000:pwd”來代替”user:1000:password” 可讀性變得不好了)
- 固定模式比較好 如:”object-type:id:field”(”object-type:id:field”)多單詞的字段名中加上一個點,就像這樣:”comment:1234:reply.to”。
常用操作

案例:
KEYS pattern
查找所有符合給定模式pattern(正則表達式)的 key 。
時間復雜度為O(N),N為數據庫里面key的數量。
例如,Redis在一個有1百萬個key的數據庫里面執行一次查詢需要的時間是40毫秒 。
警告: KEYS 的速度非常快,但在一個大的數據庫中使用它仍然可能造成性能問題,如果你需要從一個數據集中查找特定的 KEYS, 你最好還是用 Redis 的集合結構 SETS 來代替
支持的正則表達模式:
h?llo匹配hello,hallo和hxlloh*llo匹配hllo和heeeelloh[ae]llo匹配hello和hallo,但是不匹配hilloh[^e]llo匹配hallo,hbllo, … 但是不匹配helloh[a-b]llo匹配hallo和hbllo
如果你想取消字符的特殊匹配(正則表達式,可以在它的前面加\。
例子:
redis> MSET one 1 two 2 three 3 four 4 OK redis> KEYS *o* 1) "four" 2) "one" 3) "two" redis> KEYS t?? 1) "two" redis> KEYS * 1) "four" 2) "three" 3) "one" 4) "two" redis>
EXISTS key [key ...]
時間復雜度:O(1)
返回key是否存在。
返回值:
- 1 如果key存在
- 0 如果key不存在
例子
redis> SET key1 "Hello" OK redis> EXISTS key1 (integer) 1 redis> EXISTS key2 (integer) 0 redis>
MOVE key db
時間復雜度:O(1)
將當前數據庫的 key 移動到給定的數據庫 db 當中。
將當前數據庫的 key 移動到給定的數據庫 db 當中。
如果當前數據庫(源數據庫)和給定數據庫(目標數據庫)有相同名字的給定 key ,或者 key 不存在於當前數據庫,那么 MOVE 沒有任何效果。
因此,也可以利用這一特性,將 MOVE 當作鎖(locking)原語(primitive)。
返回值
- 移動成功返回 1
- 失敗則返回 0
EXPIRE key seconds
時間復雜度:O(1)
設置key的過期時間,超過時間后,將會自動刪除該key。在Redis的術語中一個key的相關超時是不確定的。
刷新過期時間
對已經有過期時間的key執行EXPIRE操作,將會更新它的過期時間。有很多應用有這種業務場景,例如記錄會話的session。
返回值
1如果成功設置過期時間。0如果key不存在或者不能設置過期時間。
例子
redis> SET mykey "Hello" OK redis> EXPIRE mykey 10 (integer) 1 redis> TTL mykey (integer) 10 redis> SET mykey "Hello World" OK redis> TTL mykey (integer) -1 redis>
TTL key
時間復雜度:O(1)
返回key剩余的過期時間。 這種反射能力允許Redis客戶端檢查指定key在數據集里面剩余的有效期。
從Redis2.8開始,錯誤返回值的結果有如下改變:
- 如果key不存在或者已過期,返回
-2 - 如果key存在並且沒有設置過期時間(永久有效),返回
-1
返回值
key有效的秒數(TTL in seconds),或者一個負值的錯誤 (參考上文)。
例子
redis> SET mykey "Hello" OK redis> EXPIRE mykey 10 # 設置mykey 10秒后過期 (integer) 1 redis> TTL mykey # 查看mykey剩余的過期時間 (integer) 10 redis>
TYPE key
時間復雜度:O(1)
返回key所存儲的value的數據結構類型,它可以返回string, list, set, zset 和 hash等不同的類型。
返回值
返回當前key的數據類型,如果key不存在時返回none。
例子
redis> SET key1 "value" OK redis> LPUSH key2 "value" (integer) 1 redis> SADD key3 "value" (integer) 1 redis> TYPE key1 string redis> TYPE key2 list redis> TYPE key3 set redis>
