Redis的基本操作二
string 是 redis 中最基礎的資料型別, redis 字串是二進位制安全的,這意味著他們有一個已知的長度沒有任何特殊字元終止,所以你可以儲存任何東西,512兆為上限。
SET
SET指令是將字串值 value 關聯到 key 。語法格式:
SET key value
示例:新增鍵 name,值為 'zfpx'
# 對不存在的鍵進行設定 redis 127.0.0.1:6379> SET key "value" OK redis 127.0.0.1:6379> GET key "value" # 對已存在的鍵進行設定 redis 127.0.0.1:6379> SET key "new-value" OK redis 127.0.0.1:6379> GET key "new-value"
如果 key 已經持有其他值,SET就覆寫舊值,無視型別。
SETEX
SETEX指令的作用是將值 value 關聯到 key ,並將 key 的生存時間設為 seconds (以秒為單位)。如果 key 已經存在, SETEX命令將覆寫舊值,語法格式:
SETEX key seconds value
示例 - 設定name的值為'zfpx',生存時間為10秒。
redis> SETEX name 10 "zfpx" OK
SETEX指令的作用類似如下兩個命令:
SET name "zfpx" EXPIRE key 10 # 設定生存時間
不同之處是,SETEX是一個原子性(atomic)操作, 關聯值 和 設定生存時間 兩個動作會在同一時間內完成,該命令在 Redis 用作快取時,非常實用。
GET
GET指令是返回 key 所關聯的字串值。如果 key 不存在那麼返回特殊值 nil 。假如 key 儲存的值不是字串型別,返回一個錯誤,因為GET只能用於處理字串值,語法格式:
GET key
示例 - 獲取name的值。
redis> GET name "zfpx" redis> GET test (nil)
返回值
當key不存在時,返回nil,否則返回key的值。 如果key的值不是字串型別,那麼將會返回一個錯誤。
APPEND
如果 key 已經存在並且是一個字串,APPEND命令將 value 追加到 key 原來的值的末尾,語法格式:
APPEND key value
示例 - 向name追加字元 '.cn'。
redis> APPEND name ".cn" # 對已存在的字串進行 APPEND (integer) 6 redis> GET name "zfpx.cn"
如果 key 不存在,APPEND就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。
MSET
MSET指令可以同時設定一個或多個 key-value 對,如果某個給定 key 已經存在,那麼MSET會用新值覆蓋原來的舊值,語法格式:
MSET key value [key value ...]
示例 - 設定 hour、minutes和second的值。
redis> MSET hour "23" minutes "23" second "23" OK
MSET是一個原子性(atomic)操作,所有給定 key 都會在同一時間內被設定,某些給定 key 被更新而另一些給定 key 沒有改變的情況,不可能發生。
MGET
執行MGET指令,將返回所有(一個或多個)給定 key 的值,語法格式:
MGET key [key ...]
示例 - 獲取hour、minutes和second的值
redis> MGET hour minutes second day 1) "230" 2) "23" 3) "23" 4)(nil)
如果給定的 key 裡面,有某個 key 不存在,那麼這個 key 返回特殊值 nil 。因此,該命令永不失敗。
STRLEN
STRLEN指令將會返回 key 所儲存的字串值的長度,語法格式:
STRLEN key
示例 - 獲取say值的長度。
redis> STRLEN name (integer) 4
當 key 儲存的不是字串值時,返回一個錯誤。
其他指令
除了前面我們提到的那些常用指令以外,還有很多其他的指令,這些指令只作瞭解即可,當我們真正用到的時候再來詳細瞭解如何使用它。
指令 | 用途 |
GETSET | 設定鍵的字串值,並返回舊值。 |
GETRANGE | 得到字串的子字串存放在一個鍵。 |
GETBIT | 對 key 所儲存的字串值,獲取指定偏移量上的位(bit)。 |
SETBIT | 對 key 所儲存的字串值,設定或清除指定偏移量上的位(bit)。 |
SETNX | 將 key 的值設為 value ,當且僅當 key 不存在。 |
MSETNX | 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。 |
PSETEX | 和 SETEX 命令相似,但它以毫秒為單位設定 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。 |
INCR | 將 key 中儲存的數字值增一。 |
INCRBY | 將 key 所儲存的值加上指定增量。 |
INCRBYFLOAT | 為 key 中所儲存的值加上指定浮點數增量。 |
DECR | 將 key 中儲存的數字值減一。 |
DECRBY | 將 key 所儲存的值加上指定增量。 |
什麼是hash? Redis的雜湊值是字串欄位和字串值之間的對映。
相比string等資料型別,它提供很多方便的域操作,因此在表示物件時,它是非常適合的資料型別。
在Redis中的雜湊值儲存容量也是非常大的,可儲存超過400十億鍵值對。
HSET(新增鍵值)
在 redis 中,使用HSET命令來將雜湊表 key 中的欄位 field 的值設為 value ,語法如下:
HSET key field value
示例 - 新增鍵name,值為'zfpx'。
redis> HSET person name "zfpx" # 設定一個欄位 (integer) 1
如果 key 不存在,一個新的雜湊表被建立並進行HSET操作。
如果欄位 field 已經存在於雜湊表中,舊值將被覆蓋。
HGET(獲取值)
redis 中如何獲取key的值呢?HGET是用來獲取指定 key 值的命令,語法如下:
HGET key field
示例 - 獲取欄位name的值。
redis> HGET person name "zfpx"
執行HGET命令,如果 key 存在,將返回雜湊表 key 中給定域 field 的值,如果 key 不存在,則返回 (nil) 。
HMSET(新增多個值)
除了HSET命令,HMSET命令的用途也是用來設定值,不同的是,HMSET一次可以設定多個 field-value (欄位-值)對設定到雜湊表 key 中,語法如下:
HMSET key field value [field value ...]
示例 - 新增鍵name、age。
redis> HMSET person name "zfpx" age 6 OK
如果 key 不存在,將會建立一個空的雜湊表並執行HMSET操作。
如果新增的欄位已存在雜湊表中,那麼它將被覆蓋。
HMGET(獲取多個值)
作為HMSET命令對應的獲取命令,HMGET可以一次性獲取雜湊表 key 中,一個或多個給定域的值,基本語法:
HMGET key field [field ...]
示例 - 獲取域name、age、gender的值的值。
redis> HMGET peson name age gender # 返回值的順序和傳入引數的順序一樣 1) "zfpx" 2) "6" 3) (nil) # 不存在的域返回nil值
(HGETALL)獲取全部值
如果我們想要一次性獲取全部域的值,很顯然 HGET 和 HMGET 都是不合適的,所幸的是我們還有HGETALL指令,通過它,我們可以輕鬆的獲取到全部域值,基本語法如下:
HGETALL key
示例 - 獲取person全部域的值。
redis> HSET person name "zfpx" (integer) 1 redis> GET person redis> HSET person age "6" (integer) 1 redis> HGETALL person 1) "name" # 域 2) "zfpx" # 值 3) "age" 4) "6"
HEXISTS(驗證key是否存在)
在應用環境中,我們經常會需要知道一個 key 中是否存在某個 field ,HEXISTS命令可以幫助我們達到這個目的,基本語法:
HEXISTS key field
示例 - 驗證鍵name是否存在。
redis> HEXISTS person name (integer) 0
檢視雜湊表`key 中,給定域 field 是否存在。
如果雜湊表含有給定欄位,返回 1 。
如果雜湊表不含有給定欄位,或 key 不存在,返回 0 。
HKEYS(獲取所有的key)
我們經常會遇見這樣的應用場景,比如線上使用者列表、課堂列表等等,這時候我們可以使用HKEYS來獲取雜湊表 key 中的所有域,基本語法:
HKEYS key
示例 - 檢視鍵person中所有的欄位。
redis> HMSET person name "zfpx" age "6" OK
redis> HKEYS person 1) "name" 2) "age"
HLEN(獲取欄位數量)
HLEN命令將返回雜湊表 key 中域的數量,什麼時候會用到它呢?比如:線上聊天室,顯示線上使用者數,基本語法:
HLEN key
示例 - 檢視db鍵中域的個數。
redis> HSET person name zfpx (integer) 1 redis> HSET person age 6 (integer) 1 redis> HLEN person (integer) 2 redis> HSET person home beijing (integer) 1 redis> HLEN person (integer) 3
當 key 存在時,將返回雜湊表中域的數量。 當 key 不存在時,返回 0 。
HDEL(刪除某個鍵)
有新增就必定有刪除的需求,當我們想要刪除雜湊表 key 中的一個或多個指定域時,可以使用HDEL命令,基本語法:
HDEL key field [field ...]
示例 - 刪除鍵person中的home域。
redis> HDEL person home (integer) 1
如果是不存在的域,那麼它將被忽略掉。
Redis 列表是簡單的字串列表,按照插入順序排序。
你可以新增一個元素導列表的頭部(左邊)或者尾部(右邊) LPUSH 命令插入一個新的元素導頭部, 而RPUSH插入一個新元素導尾部.
當一個這兩個操作在一個空的Key上被執行的時候一個新的列表被建立。
從時間複雜度的角度來看 Redis 列表的主要特徵是在頭和尾的元素插入和刪除是固定時間,即便是數以百萬計的插入。. 在列表的兩端訪問元素是非常快的但是如果你試著訪問一個非常大的列表的中間的元素是很慢的,因為那是一個O(N)操作。 你可以用 Redis 列表做很多有趣的事情,比如你可以:
- 在一個微博中建立一個時間線模型,使用 LPUSH 去新增新的元素到使用者的時間訊息列表, 使用 LRANGE 去查詢最近插入的元素。
LPUSH(向左新增元素)
LPUSH的作用是將一個或多個值 value 插入到列表 key 的左邊,基本語法:
LPUSH key value [value ...]
示例:將zpfx新增到朋友列表。
redis> LPUSH fruits apple
如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭,比如說,對空列表 msg 執行命令 LPUSH msg a b c ,列表的值將是 c b a 。
如果 key 不存在,一個空列表會被建立並執行LPUSH操作。
執行成功時,返回列表長度,當 key 存在但不是列表型別時,返回一個錯誤。
LSET(更新特定位置)
LSET可以將列表 key 下標為index的元素的值設定為 value ,基本語法:
LSET key index value
示例
redis>LSET fruits 0 Banana ok
需要注意的是,列表 key 必須是已存在的,而且index不能超出列表長度範圍。
LPOP(移除列表第一個元素)
LPOP命令執行時會移除列表第一個元素,並將其返回,基本語法:
LPOP key
示例 - 取出friends中的第一個元素。
redis>LPOP fruits Banana
請注意,LPOP命令會移除列表中的元素,如果僅僅是想要獲取該元素,那麼就不應該使用LPOP操作,因為redis中有專門獲取元素的命令。
LINDEX(獲取列表元素)
如果要獲取列表元素,LINDEX命令是比較常用的,使用LINDEX,我們可以獲取到指定位置的 value ,基本語法:
LINDEX key index
示例 - 獲取friends的第一個元素。
redis>LINDEX fruits 0 Banana
下標 (index)為正數時,0表示第一個元素,1表示第二個元素,以此類推。
下標 可以是負數,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。
LINSERT(插入元素)
插入元素是一個必要功能,LINSERT可以將值 value 插入到列表 key 當中,位於值 apple 之前或之後,基本語法:
LINSERT key BEFORE|AFTER fruits value
示例 - 將Andy插入到Lucy之前。
redis> LINSERT fruits BEFORE "Apple" "Banana" (integer) 3
當 Apple 不存在於列表 key 時,不執行任何操作。
當 key 不存在時, key 被視為空列表,不執行任何操作。
如果 key 不是列表型別,返回一個錯誤。
LREM(移除列表元素)
在redis中,移除列表元素使用LREM命令,根據引數 count 的值,移除列表中與引數 value 相等的元素,基本語法:
LREM key count value
示例 - 移除fruits中,所有的名叫'Apple'的元素。
redis> LREM fruits 0 Apple (integer) 1
count 的值可以是以下幾種: count > 0 : 從表頭開始向表尾搜尋,移除與 value 相等的元素,數量為 count 。 count < 0 : 從表尾開始向表頭搜尋,移除與 value 相等的元素,數量為 count 的絕對值。 count = 0 : 移除表中所有與 value 相等的值。
LEN(獲取到列表的長度)
現在fruits列表中記載著我所有水果的名稱,可是要怎樣才能知道我現在擁有多少種水果呢?
在redis中,LLEN命令可以獲取到列表的長度,基本語法:
LLEN key
示例 - 檢視fruits列表長度。
redis> LLEN fruits (integer) 0
返回列表 key 的長度。
如果 key 不存在,則 key 被解釋為一個空列表,返回 0 。
如果 key 不是列表型別,返回一個錯誤。
LTRIM(修剪元素)
LTRIM可以對一個列表進行修剪,就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除,基本語法:
LTRIM key start stop
示例 - 只保留列表 list 的前三個元素,其餘元素全部刪除。
LTRIM list 0 2
下標(index)引數start和stop都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。
你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。
Redis 集合(Set)是一個無序的字串集合. 你可以快速的完成新增、刪除、以及測試元素是否存在。
Redis 集合多次新增相同的元素,最終在集合裡只會有一個元素。 實際上說這些就是意味著在新增元素的時候無須檢測元素是否存在。 一個Redis集合的非常有趣的事情是他支援一些服務端的命令從現有的集合出發去進行集合運算, 可以求交集,並集或差集。
應用場景
- 使用集合追蹤一件(獨一無二的)事情,比如想要知道所有訪問一個部落格文章的獨立IP? 每次當你處理一個頁面訪問時非常簡單,因為可以肯定重複的IP是不會被插入的。
- Redis 集合是很擅長表現關係的。你可以使用Redis集合建立一個標籤系統去表現每一個標籤。 接下來你能夠使用SADD命令將有一個給定tag的所有物件的所有ID新增到一個用來展現這個特定tag的集合裡。 你想要同時有三個不同tag的所有物件的ID嗎?使用SINTER就好了。
- 使用 SPOP 或者 SRANDMEMBER 命令你可以使用集合去隨意的抽取元素。
SADD(新增)
集合操作中,SADD命令可以將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略,基本語法:
SADD key member [member ...]
示例 - 新增‘good’到tags集合中。
redis> SADD tags "good" (integer) 1
假如 key 不存在,則建立一個只包含 member 元素作成員的集合。
當 key 不是集合型別時,返回一個錯誤。
SPOP(隨機取出)
如果我們需要隨機取出集合中的某個元素,可以使用SPOP命令,基本語法:
SPOP key
示例:隨機取出website集合中的元素。
redis> SPOP tags "good"
需要注意的是,執行SPOP命令返回的元素將被移除該集合。
SMEMBERS(獲取集合中全部的元素)
如果要獲取集合中全部的元素,則需要使用SMEMBERS命令,基本語法如下:
SMEMBERS key
示例 - 獲取tags集合中全部的元素。
redis> SMEMBERS tags 1) "good" 2) "terrific"
SMEMBERS命令只會返回集合中的全部成員,並不會移除它們,如果集合不存在,則視為空集合。
SCARD(檢視集合中元素的數量)
如果想要檢視集合中元素的數量,可以使用SCARD命令,基本語法:
SCARD key
示例 - 檢視tags集合中元素的數量。
redis>SCARD tags (integer) 2
執行SCARD命令,當集合存在時,返回集合中元素的數量,若集合不存在,則返回0。
SDIFF(差集)
假如現在有兩個集合,我們想要獲取到它們之間不同的元素,通常情況下,我們需要通過迴圈集合來比較,然後取得不同的元素。
在redis裡面取得集合的差集非常簡單,通過SDIFF命令即可輕鬆實現,基本語法:
SDIFF key [key ...] 示例 - 取得tag1和tag2的差集。
redis> SMEMBERS tag1 1) "a" 2) "b" 3) "c"
redis> SMEMBERS tag2 1) "b" 2) "c" 3) "d"
redis> SDIFF tag1 tag2 1) "a"
如果 key 都存在,則返回一個集合的全部成員,該集合是所有給定集合之間的差集。
不存在的 key 被視為空集。
SINTER(交集)
在 redis 中獲取集合的交集也是非常簡單的,執行SINTER命令將返回集合的交集,基本語法:
SINTER key [key ...]
示例 - 獲取集合tag1和tag2的交集。
redis> SMEMBERS tag1 1) "a" 2) "b" 3) "c"
redis> SMEMBERS tag2 1) "b" 2) "c" 3) "d"
redis> SINTER tag1 tag2 1) "b" 2) "c"
當集合都存在時,將返回一個集合的全部成員,該集合是所有給定集合的交集。
不存在的集合被視為空集。因此,當給定集合當中有一個空集時,結果也為空集(根據集合運算定律)。
SUNION(並集)
既然有差集和交集運算,當然少不了並集,在 redis 中,執行SUNION命令將返回給定集合的並集,基本語法:
SUNION key [key ...]
示例:獲取集合tag1和tag2的並集。
redis> SMEMBERS tag1 1) "a" 2) "b" 3) "c" redis> SMEMBERS tag2 1) "b" 2) "c" 3) "d" redis> SUNION tag1 tag2 1) "a" 2) "b" 3) "c" 4) "d"
如果給定的集合都存在,則返回一個集合的全部成員,該集合是所有給定集合的並集。
同樣,不存在的集合被視為空集。
SISMEMBER(判斷集合是否包含某個元素)
如果要判斷集合是否包含某個元素也不需要迴圈對比了,因為 redis 提供SISMEMBER命令可以實現這個功能,基本語法:
SISMEMBER key member
示例 - 判斷 member 元素是否集合 key 的成員。
redis> SMEMBERS tags 1) "a" 2) "b" 3) "c"
redis> SISMEMBER tags "a" (integer) 1 如果集合包含給定的元素,則返回1,反之則返回0。
SMOVE(移動元素)
執行SMOVE可以移動元素,基本語法:
SMOVE source destination member
將 member 元素從 source 集合移動到 destination 集合。SMOVE是原子性操作,因此可以保證資料的一致性。
示例 - 將tag1集合中的歌曲‘a’移動到‘tag2’集合。
redis> SMEMBERS tag1 1) "a" 2) "b"
redis> SMEMBERS tag2 (empty list or set)
redis> SMOVE tag1 tag2 "a" (integer) 1
redis> SMEMBERS tag1 1) "b"
redis> SMEMBERS tag2 1) "a"
如果 source 集合不存在或不包含指定的 member 元素,則SMOVE命令不執行任何操作,僅返回 0 。否則, member 元素從 source 集合中被移除,並新增到 destination 集合中去。
當 destination 集合已經包含 member 元素時,SMOVE命令只是簡單地將 source 集合中的 member 元素刪除。
當 source 或 destination 不是集合型別時,返回一個錯誤。
SREM(從集合中移除)
執行命令SREM可以將元素從集合中移除,基本語法:
SREM key member [member ...]
示例 - 從tags集合中移除a。
redis> SMEMBERS tags 1) "a" 2) "b" 3) "c" 4) "d" redis> SREM tags a # 移除單個元素 (integer) 1 redis> SMEMBERS tags 2) "b" 3) "c" 4) "d"
移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。
當 key 不是集合型別,返回一個錯誤。
Redis 有序集合與普通集合非常相似,是一個沒有重複元素的字串集合。不同之處是有序集合的每個成員都關聯了一個評分,這個評分被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但評分可以重複。
使用有序集合你可以以非常快的速度 新增 、 刪除 和 更新 元素。因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來獲取一個範圍的元素。
訪問有序集合的中間元素也是非常快的,因此你能夠使用有序集合作為一個沒有重複成員的智慧列表。在有序集合中,你可以很快捷的訪問一切你需要的東西:有序的元素,快速的存在性測試,快速訪問集合的中間元素! 簡而言之使用有序集合你可以做完成許多對效能有極端要求的任務,而那些任務使用其他型別的資料庫真的是很難完成的。 使用有序集合你可以:
- 在一個大型的線上遊戲中展示一個排行榜,在那裡一旦一個新的分數被提交,你可以使用ZADD命令去更新它.你也可用使用ZRANGE命令來得到頂級的使用者,你還可以使用ZRANK命令根據使用者名稱返回該使用者在排行榜中的位次。
- 有序集合常常被用來索引儲存在 Redis 中的資料。舉個例子,如果你有許多的 雜湊 (Hashes)來代表使用者,你可以使用一個有序集合,這個集合中的元素的年齡欄位被用來當做評分,而ID作為值。因此,使用ZRANGEBYSCORE命令,那是微不足道的並且能夠很快的接收到給定年齡段的所有使用者。
ZADD(新增)
在redis中,使用ZADD命令將一個或多個 member 元素及其 score 值加入到有序集 key 當中,基本語法:
ZADD key score member [[score member] [score member] ...]
示例 - 新增zhangsan到student集合,評分10。
redis> ZADD student 10 zhangsan (integer) 1
如果某個 member 已經是有序集的成員,那麼更新這個 member 的 score 值,並通過重新插入這個 member 元素,來保證該 member 在正確的位置上。
score 值可以是整數值或雙精度浮點數。
如果 key 不存在,則建立一個空的有序集並執行ZADD操作。
當 key 存在但不是有序集型別時,返回一個錯誤。
ZREM(移除指定成員)
ZREM命令可以移除指定成員,基本語法如下:
ZREM key member [member ...]
示例 - 移除student集合中zhangsan元素。
redis> ZREM student zhangsan
執行成功,zhangsan元素將從student集合中移除,如果zhangsan不存在,將被忽略。
如果 rank 集合存在但不是有序集型別時,返回一個錯誤。
ZSCORE(獲取成員評分)
redis中使用ZSCORE命令來獲取成員評分,基本語法:
ZSCORE key member
示例 - 獲取集合student中元素zhangsan的評分。
redis> ZSCORE student zhangsan # 注意返回值是字串
如果 zhangsan 是集合 student 的成員,則返回成員 zhangsan 的評分值。
如果 zhangsan 元素不是有序集 student 的成員,或 zhangsan 不存在,則返回 nil 。
ZRANGE(獲取集合成員)
如果想要獲取集合成員,可以使用ZRANGE命令,基本語法:
ZRANGE key start stop [WITHSCORES]
示例 - 獲取student集合的全部成員。
redis > ZRANGE salary 0 -1 WITHSCORES # 顯示整個有序整合員 1) "zhangsan" 2) "80" 3) "lisi" 4) "90" 5) "wangwu" 6) "100"
返回的成員的位置按 score 值遞增(從小到大)來排序。
ZCARD(檢視集合成員的數量)
如果需要檢視集合成員的數量,那麼我們需要使用到ZCARD命令,基本語法如下:
ZCARD key
示例 - 檢視student集合的成員數量。
redis > ZCARD student (integer) 2
執行成功,將返回有序集 student 的成員總數。
ZCOUNT(可以檢視成員的數量)
除了ZCARD命令以外,ZCOUNT命令也可以檢視成員的數量,和前者不同的是,ZCOUNT命令可以設定評分的最小和最大值:
ZCOUNT key min max
示例 - 檢視分數在80-90之間的人數。
redis> ZRANGE student 0 -1 WITHSCORES # 測試資料 1) "zhangsan" 2) "80" 3) "lisi" 4) "90" 5) "wangwu" 6) "100"
redis> ZCOUNT student 80 90
(integer) 2
執行成功,將返回有序集 key 中, score 值在 min 和 max 之間(預設包括 score 值等於 min 或 max )的成員的數量。
ZRANK()
ZRANK命令可以獲取到給定元素在集合中的排名,排名依據 評分(score) 值遞增(從小到大)順序排列,語法格式:
ZRANK key member 示例 - 顯示 lisi 的分數排名。
redis> ZRANGE student 0 -1 WITHSCORES # 顯示所有成員及其 score 值 1) "zhangsan" 2) "80" 3) "lisi" 4) "90" 5) "wangwu" 6) "100" redis> ZRANK salary lisi (integer) 1
排名以 0 為底,也就是說, score 值最小的成員排名為 0 。
使用 ZREVRANK 命令可以獲得成員按 score 值遞減(從大到小)排列的排名。
ZINCRBY(評分值加上增量)
ZINCRBY命令可以為給定的成員評分值加上增量,語法格式:
ZINCRBY key increment member
示例 - 為student集合中的lisi加10分。
redis> ZSCORE student lisi "90" redis> ZINCRBY student 500 lisi "100"
可以通過傳遞一個負數值 increment ,讓 score 減去相應的值,比如 ZINCRBY key -5 member ,就是讓 member 的 score 值減去 5 。
當 key 不存在,或 member 不是 key 的成員時, ZINCRBY key increment member 等同於 ZADD key increment member 。
當 key 不是有序集型別時,返回一個錯誤。
score 值可以是整數值或雙精度浮點數。
KEYS
Redis 的keys命令用於管理鍵。使用 Redis 的keys命令,語法格式:
KEYS pattern
查詢所有符合給定模式 pattern 的 key 。
示例 - 查詢包含o的鍵。
redis> MSET first 1 second 2 third 3 fourth 4 # 一次設定 4 個 key OK redis> KEYS *i* 1) "first" 2) "third"
KEYS * 匹配資料庫中所有 key 。
KEYS w?rld 匹配 world , wllrld 和 wkrld 等。 ?匹配任意一個字元
KEYS w*rld 匹配 world 和 woorld 等。 * 匹配任意長度字元
KEYS w[cd]rld 匹配 wcrld 和 wdrld ,但不匹配 wkrld 。 [] 匹配中間的任意一個字元
特殊符號用 \ 隔開。
EXISTS
EXISTS命令的作用是判斷指定key是否存在,語法格式如下:
EXISTS key
示例 - 判斷student是否存在。
redis> SET student "zhangsan" OK
redis> EXISTS student (integer) 1
redis> DEL student (integer) 1
redis> EXISTS student (integer) 0 若 key 存在,返回 1 ,否則返回 0 。
SORT(排序)
排序是很常見的需求,在 redis 中可以使用SORT命令來實現排序,語法格式如下:
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination] 示例
標籤列表
redis> LPUSH tag 4 3 1 2 (integer) 4
排序
redis> SORT tag