Redis數據類型之Redis keys


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 匹配 hellohallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello 和 hallo, 但是不匹配 hillo
  • h[^e]llo 匹配 hallohbllo, … 但是不匹配 hello
  • h[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的數據結構類型,它可以返回stringlistsetzset 和 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> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM