Redis的基本操作二
string 是 redis 中最基礎的數據類型, redis 字符串是二進制安全的,這意味著他們有一個已知的長度沒有任何特殊字符終止,所以你可以存儲任何東西,512兆為上限。
SET
SET指令是將字符串值 value 關聯到 key 。語法格式:
SET key value示例:添加鍵 name,值為 'zfpx'
# 對不存在的鍵進行設置redis 127.0.0.1:6379> SET key "value" OKredis 127.0.0.1:6379> GET key "value"# 對已存在的鍵進行設置redis 127.0.0.1:6379> SET key "new-value" OKredis 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" OKSETEX指令的作用類似如下兩個命令:
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) 6redis> 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) 1redis> GET person redis> HSET person age "6" (integer) 1redis> 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) 1redis> HSET person age 6(integer) 1redis> HLEN person(integer) 2redis> HSET person home beijing(integer) 1redis> 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) 1count 的值可以是以下幾種: 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) 1redis> 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 OKredis> 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 1) "1" 2) "2" 3) "3" 4) "4"
使用SORT命令,可以返回或保存給定列表、集合、有序集合 key 中經過排序的元素。
排序默認以數字作為對象,值被解釋為雙精度浮點數,然后進行比較。
EXPIRE
為key設置生存時間需要使用EXPIRE命令,語法格式:
EXPIRE key seconds示例 - 設置rank的過期時間為30秒。
redis> EXPIRE rank 30 # 設置過期時間為 30 秒 (integer) 1為給定 key 設置生存時間,當 key 過期時(生存時間為 0 ),它會被自動刪除。
在 Redis 中,帶有生存時間的 key 被稱為『易失的』(volatile)。
生存時間可以通過使用 DEL 命令來刪除整個 key 來移除,或者被 SET 和 GETSET 命令覆寫(overwrite),這意味著,如果一個命令只是修改(alter)一個帶生存時間的 key 的值而不是用一個新的 key 值來代替(replace)它的話,那么生存時間不會被改變。
TTL
TTL命令的作用是獲取給定 key 剩余生存時間(TTL, time to live),語法格式如下:
TTL key示例 - 查看key剩余生存時間。
redis> EXPIRE key 10086 (integer) 1redis> TTL key (integer) 10084當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩余生存時間時,返回 -1 。 否則,以秒為單位,返回 key 的剩余生存時間。
總結
以上是生活随笔為你收集整理的Redis的基本操作二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis应用案例 查找某个值的范围
- 下一篇: 给大家推荐对Redis分析讲解比较详细的