Redis 中的事務
使用MULTI與EXEC之間之間執行多個操作來處理一個事務:
1 127.0.0.1:6379> MULTI 2 OK 3 127.0.0.1:6379> SADD key element 4 QUEUED 5 127.0.0.1:6379> LPUSH helper_key x 6 QUEUED 7 127.0.0.1:6379> EXEC 8 1) (integer) 1 9 2) (integer) 1
MULTI開啟事務(開啟成功返回OK),MULTI與EXEC之間的多個操作僅僅是暫時緩存起來(我們可以看到返回為QUEUED),直到執行EXEC時,提交事務。
Redis 超時(TTL):數據在限定時間內存活
Redis可以expire對鍵設置生命周期TTL:
1 /*先存入數據到list中*/ 2 127.0.0.1:6379> lpush ttlTestList ttl 3 (integer) 1 4 /*再設置超時時間(為5秒失效)*/ 5 127.0.0.1:6379> expire ttlTestList 5 6 (integer) 1
5秒后獲取元素為空:
1 127.0.0.1:6379> lpop ttlTestList 2 (nil)
我們看到超時時間一過,ttlTestList鍵被刪除了
1 127.0.0.1:6379> keys * 2 1) "zset" 3 2) "set" 4 3) "helper_key" 5 4) "mylist" 6 5) "user" 7 6) "mykey" 8 7) "relList"
上面的例子使用了EXPIRE來設置超時時間(也可以再次調用這個命令來改變超時時間,使用PERSIST命令去除超時時間 )。
使用ttl:
1 127.0.0.1:6379> lpush ttlTestList ttl 2 (integer) 1 3 /*設置超時時間為10秒*/ 4 127.0.0.1:6379> expire ttlTestList 10 5 (integer) 1 6 /*使用ttl查看剩余存活時間*/ 7 127.0.0.1:6379> ttl ttlTestList 8 (integer) 5
KEYS 命令
keys pattern 可以查看所在數據庫中符合pattern匹配模式的鍵,pattern通配符:
符號 | 含義 |
---|---|
? | 匹配一個字符 |
* | 匹配任意字符(包括0個字符) |
[] | 匹配括號里的任意字符,也可以使用“-”表示范圍,如a[b-d]可以匹配ab、ac、ad |
\x | 可以匹配轉義字符。如匹配?,就使用\? |
1 127.0.0.1:6379[1]> keys list? 2 1) "list1"
注意: keys會便利數據庫的所有鍵,如果鍵數量較大,不建議在生產使用.
EXISTS 命令
exists 用於判斷某個鍵是否存在,存在返回1,否則返回0.
1 127.0.0.1:6379[15]> keys * 2 1) "testKey" 3 127.0.0.1:6379[15]> exists testKey 4 (integer) 1 5 127.0.0.1:6379[15]> exists testKey2 6 (integer) 0
DEL 命令
del 用於刪除一個或多個鍵,del key [key2…],返回值是刪除的鍵的個數:
1 127.0.0.1:6379[15]> del testKey 2 (integer) 1 3 /*因為之前已經刪除testKey鍵了,再使用del操作時,實際上並沒有刪除任何鍵,於是返回0*/ 4 127.0.0.1:6379[15]> del testKey 5 (integer) 0
SELECT 命令
Redis 的數據庫默認存在編號為0-15的共計16個數據庫實例,可以通過設置databases參數修改這個默認設置。我們可以使用SELECT命令選擇使用指定的數據庫:
1 /*選擇使用數據庫1*/ 2 127.0.0.1:6379[1]> select 1 3 OK 4 /*在數據庫1中設置一個鍵*/ 5 127.0.0.1:6379[1]> lpush list1 ele1 6 (integer) 1 7 127.0.0.1:6379[1]> keys * 8 1) "list1"
切換數據庫0,在數據庫0中是看不到數據庫1中的鍵的:
1 /*切換到數據庫0*/ 2 127.0.0.1:6379[1]> select 0 3 OK 4 /*數據庫0中無鍵*/ 5 127.0.0.1:6379> keys * 6 (empty list or set)
FLUSHALL 命令
flushall 命令會清除所有數據庫實例的鍵值數據(默認配置的話數據庫0-15會全刪除)。恨他,就用flushall來對付他吧。
TYPE 命令
type 命令用來獲取鍵的類型,返回值可能是 string(字符串類型),list(列表類型),set(集合類型),hash(散列類型),zset(有序集合類型)
RANDOMKEY
randomkey 可以隨機獲取當前數據庫中的一個鍵。
1 127.0.0.1:6379> select 0 2 OK 3 127.0.0.1:6379> keys * 4 1) "strkey4" 5 2) "setKey" 6 3) "code_list1" 7 4) "foo" 8 5) "strkey3" 9 6) "strkey27" 10 7) "strkey6" 11 8) "strkey5" 12 127.0.0.1:6379> randomkey 13 "strkey4" 14 127.0.0.1:6379> randomkey 15 "setKey" 16 127.0.0.1:6379> randomkey 17 "strkey3" 18 127.0.0.1:6379> randomkey 19 "strkey4" 20 127.0.0.1:6379> randomkey 21 "strkey6"
RENAME 重命名鍵名
rename oldKeyName newKeyName 將oldKeyName 鍵改名為newKeyName。
1 127.0.0.1:6379> keys * 2 1) "strkey4" 3 2) "setKey" 4 3) "code_list1" 5 4) "foo" 6 5) "strkey3" 7 6) "strkey27" 8 7) "strkey6" 9 8) "strkey5" 10 127.0.0.1:6379> rename setKey setKey88 11 OK 12 127.0.0.1:6379> keys * 13 1) "strkey3" 14 2) "foo" 15 3) "code_list1" 16 4) "strkey5" 17 5) "strkey6" 18 6) "strkey4" 19 7) "setKey88" 20 8) "strkey27"
MOVE
move 命令可以將一個數據庫中的鍵移動到另一個數據庫中:
1 /*數據庫0中的key*/ 2 127.0.0.1:6379> keys * 3 1) "counter:__rand_int__" 4 2) "key:__rand_int__" 5 3) "strkey3" 6 4) "code_list1" 7 5) "strkey5" 8 6) "strkey6" 9 7) "strkey4" 10 8) "setKey88" 11 9) "mylist" 12 10) "strkey27"
1 /*數據庫1中無key*/ 2 127.0.0.1:6379> select 1 3 OK 4 127.0.0.1:6379[1]> keys * 5 (empty list or set)
1 /*移動0中的key到1中*/ 2 11) "strkey27" 3 127.0.0.1:6379> move foo 1 4 (integer) 1 5 127.0.0.1:6379> keys * 6 1) "counter:__rand_int__" 7 2) "key:__rand_int__" 8 3) "strkey3" 9 4) "code_list1" 10 5) "strkey5" 11 6) "strkey6" 12 7) "strkey4" 13 8) "setKey88" 14 9) "mylist" 15 10) "strkey27"
1 /*查看1中,可以看到剛剛移動過來的key:foo*/ 2 127.0.0.1:6379[1]> keys * 3 1) "foo"