redis的常用函式(命令)
1、SETEX
將值 value 關聯到 key ,並將 key 的生存時間設為 seconds (以秒為單位)。
如果 key 已經存在, SETEX 命令將覆寫舊值。
這個命令類似於以下兩個命令:
SET key value 15520810759 111111
EXPIRE key seconds # 設定生存時間
不同之處是, SETEX 是一個原子性(atomic)操作,關聯值和設定生存時間兩個動作會在同一時間內完成,該命令在 Redis 用作快取時,非常實用。
可用版本:
>= 2.0.0
時間複雜度:
O(1)
返回值:
設定成功時返回 OK 。
當 seconds 引數不合法時,返回一個錯誤。
# 在 key 不存在時進行 SETEX redis> SETEX cache_user_id 60 10086 OK redis> GET cache_user_id # 值 "10086" redis> TTL cache_user_id # 剩餘生存時間 (integer) 49 # key 已經存在時,SETEX 覆蓋舊值 redis> SET cd "timeless" OK redis> SETEX cd 3000 "goodbye my love" OK redis> GET cd "goodbye my love" redis> TTL cd (integer) 2997
2、HDEL
刪除雜湊表 key 中的一個或多個指定域,不存在的域將被忽略。
在Redis2.4以下的版本里, HDEL 每次只能刪除單個域,如果你需要在一個原子時間內刪除多個域,請將命令包含在 MULTI / EXEC塊內。
可用版本:
>= 2.0.0
時間複雜度:
O(N), N 為要刪除的域的數量。
返回值:
被成功移除的域的數量,不包括被忽略的域
# 測試資料 redis> HGETALL abbr 1) "a" 2) "apple" 3) "b" 4) "banana" 5) "c" 6) "cat" 7) "d" 8) "dog" # 刪除單個域 redis> HDEL abbr a (integer) 1 # 刪除不存在的域 redis> HDEL abbr not-exists-field (integer) 0 # 刪除多個域 redis> HDEL abbr b c (integer) 2 redis> HGETALL abbr 1) "d" 2) "dog"
3、DECR
將 key 中儲存的數字值減一。
如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 DECR 操作。
如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
關於遞增(increment) / 遞減(decrement)操作的更多資訊,請參見 INCR 命令。
可用版本:
>= 1.0.0
時間複雜度:
O(1)
返回值:
執行 DECR 命令之後 key 的值。
# 對存在的數字值 key 進行 DECR
redis> SET failure_times 10
OK
redis> DECR failure_times
(integer) 9
# 對不存在的 key 值進行 DECR
redis> EXISTS count
(integer) 0
redis> DECR count
(integer) -1
# 對存在但不是數值的 key 進行 DECR
redis> SET company YOUR_CODE_SUCKS.LLC
OK
redis> DECR company
(error) ERR value is not an integer or out of range
4、SREM
移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。
當 key 不是集合型別,返回一個錯誤。
在 Redis 2.4 版本以前, SREM 只接受單個 member 值。
可用版本:
>= 1.0.0
時間複雜度:
O(N), N 為給定 member 元素的數量。
返回值:
被成功移除的元素的數量,不包括被忽略的元素。
# 測試資料
redis> SMEMBERS languages
1) "c"
2) "lisp"
3) "python"
4) "ruby"
# 移除單個元素
redis> SREM languages ruby
(integer) 1
# 移除不存在元素
redis> SREM languages non-exists-language
(integer) 0
# 移除多個元素
redis> SREM languages lisp python c
(integer) 3
redis> SMEMBERS languages
(empty list or set)
5、Setnx
SETNX key value
將 key 的值設為 value ,當且僅當 key 不存在。
若給定的 key 已經存在,則 SETNX 不做任何動作。
SETNX 是『SET if Not eXists』(如果不存在,則 SET)的簡寫。
可用版本:
>= 1.0.0
時間複雜度:
O(1)
返回值:
設定成功,返回 1 。
設定失敗,返回 0 。
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 設定成功
(integer) 1
redis> SETNX job "code-farmer" # 嘗試覆蓋 job ,失敗
(integer) 0
redis> GET job # 沒有被覆蓋
"programmer"
6、HINCRBY
為雜湊表 key 中的域 field 的值加上增量 increment 。
增量也可以為負數,相當於對給定域進行減法操作。
如果 key 不存在,一個新的雜湊表被建立並執行 HINCRBY 命令。
如果域 field 不存在,那麼在執行命令前,域的值被初始化為 0 。
對一個儲存字串值的域 field 執行 HINCRBY 命令將造成一個錯誤。
本操作的值被限制在 64 位(bit)有符號數字表示之內。
可用版本:
>= 2.0.0
時間複雜度:
O(1)
返回值:
執行 HINCRBY 命令之後,雜湊表 key 中域 field 的值。
# increment 為正數
redis> HEXISTS counter page_view # 對空域進行設定
(integer) 0
redis> HINCRBY counter page_view 200
(integer) 200
redis> HGET counter page_view
"200"
# increment 為負數
redis> HGET counter page_view
"200"
redis> HINCRBY counter page_view -50
(integer) 150
redis> HGET counter page_view
"150"
# 嘗試對字串值的域執行HINCRBY命令
redis> HSET myhash string hello,world # 設定一個字串值
(integer) 1
redis> HGET myhash string
"hello,world"
redis> HINCRBY myhash string 1 # 命令執行失敗,錯誤。
(error) ERR hash value is not an integer
redis> HGET myhash string # 原值不變
"hello,world
7、SADD
將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。
假如 key 不存在,則建立一個只包含 member 元素作成員的集合。
當 key 不是集合型別時,返回一個錯誤。
在Redis2.4版本以前, SADD 只接受單個 member 值。
可用版本:
>= 1.0.0
時間複雜度:
O(N), N 是被新增的元素的數量。
返回值:
被新增到集合中的新元素的數量,不包括被忽略的元素
# 新增單個元素
redis> SADD bbs "discuz.net"
(integer) 1
# 新增重複元素
redis> SADD bbs "discuz.net"
(integer) 0
# 新增多個元素
redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2
redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn"
8、ZSCORE
返回有序集 key 中,成員 member 的 score 值。
如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。
可用版本:
>= 1.2.0
時間複雜度:
O(1)
返回值:
member 成員的 score 值,以字串形式表示。
redis> ZRANGE salary 0 -1 WITHSCORES # 測試資料
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
redis> ZSCORE salary peter # 注意返回值是字串
"3500"
9、LLEN
返回列表 key 的長度。
如果 key 不存在,則 key 被解釋為一個空列表,返回 0 .
如果 key 不是列表型別,返回一個錯誤。
可用版本:
>= 1.0.0
時間複雜度:
O(1)
返回值:
列表 key 的長度。
# 空列表
redis> LLEN job
(integer) 0
10、RPOP
移除並返回列表 key 的尾元素。
可用版本:
>= 1.0.0
時間複雜度:
O(1)
返回值:
列表的尾元素。
當 key 不存在時,返回 nil 。
redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> RPOP mylist # 返回被彈出的元素
"three"
redis> LRANGE mylist 0 -1 # 列表剩下的元素
1) "one"
2) "two"