1. 程式人生 > >redis的常用函式(命令)

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"