鍵重命名mysql
rename oldKey newkey //格式redis
rename oldKey newKey //若oldKey以前存在則被覆蓋sql
set name james ;set name1 mike //數據初始化數據庫
renamenx name name1 //重命名失敗,只有當name1不存在才能更名服務器
返回隨機鍵 運維
dbsize //redis有16個庫,查看當前庫的鍵值對總數dom
randomkey //返回隨機鍵spa
鍵過時:線程
expire name:03 20 //鍵name:03 在10秒後過時unix
ttl name:03 //查看過時按秒到計時,當返回-2說明已刪除
pttl name:03 //查看過時按毫秒到時計
set name:05 james //初始化數據
pexpire name:05 20000 //20000毫秒(20S)後過時
expire name:06 -2 //直接過時,和del同樣
expireat name:04 1516971599 //設置在2018/01/26 20:59:59過時
時間轉時間戳:網址http://tool.chinaz.com/Tools/unixtime.aspx
hset user:01 name james //初始化數據
expire user:01 60 //設置60S右過時
ttl user:01 //查看過時剩餘時間
persist user:01 //去掉過時
ttl user:1 //返回-1 能夠永久查詢不失效
注意:對於字符串重設值後,expire無效,
set name james
expire name 50
ttl name
set name james1 //此時expire取消
ttl name //返回-1, 長期有效
鍵的遷移:
把部分數據遷移到另外一臺redis服務器
1, move key db //reids有16個庫, 編號爲0-15
set name james1; move name 5 //遷移到第6個庫
select 5 ;//數據庫切換到第6個庫, get name 能夠取到james1
這種模式不建議在生產環境使用,在同一個reids裏能夠玩
2, dump key;
restore key ttl value //實現不一樣redis實例的鍵遷移,ttl=0表明沒有過時時間
例子:在A服務器上 192.168.1.111
set name james;
dump name; // 獲得"\x00\x05james\b\x001\x82;f\"DhJ"
在B服務器上:192.168.1.118
restore name 0 "\x00\x05james\b\x001\x82;f\"DhJ"
get name //返回james
3,migrate指令遷移到其它實例redis,在1.111服務器上將test移到118
migrate |
192.168.1.118 |
6379 |
test |
0 |
1000 |
copy |
replace |
keys |
指令 |
要遷移的目標IP |
端口 |
遷移鍵值 |
目標庫 |
超時時間 |
遷移後不刪除原鍵 |
無論目標庫是不存在test鍵都遷移成功 |
遷移多個鍵 |
鍵的遍歷
redis提供了兩個命令來遍歷全部的鍵
1,鍵全量遍歷:
mset country china city bj name james //設置3個字符串鍵值對
keys * //返回全部的鍵, *匹配任意字符多個字符
keys *y //以結尾的鍵,
keys n*e //以n開頭以e結尾,返回name
keys n?me // ?問號表明只匹配一個字符 返回name,全局匹配
keys n?m* //返回name
keys [j,l]* //返回以j l開頭的全部鍵 keys [j]ames 全量匹配james
考慮到是單線程, 在生產環境不建議使用,若是鍵多可能會阻塞,若是鍵少,能夠
2,漸進式遍歷
mset a a b b c c d d e e f f g g h h i i j j k k l l m m n n o o p p q q r r s s t t u u v v w w x x y y z z //初始化26個字母鍵值對
字符串類型:
scan 0 match n* count 20 //匹配以n開頭的鍵,取20條,第一次scan 0開始
第二次從遊標4096開始取20個以n開頭的鍵,至關於一頁一頁的取
當最後返回0時,鍵被取完
好比將old:user開頭的元素全刪掉
注:可有效地解決keys命令可能產生的阻塞問題
用法和scan同樣
select 0 //共16個庫, 0 --15, select切換數據庫
set name james
select 1
get name //隔離了,取不到,和mysql不一樣庫同樣
flushdb: 只清空當前數據庫的鍵值對 dbsiz 0
flushall: 清空全部庫的鍵值對 (這兩個指令慎用!!!!)
其中redis3.0之後的版本慢慢弱化了這個功能,如在redis cluster中只容許0數據庫緣由:
1,redis單線程,若是用多個庫,這些庫使用同一個CPU,彼此會有影響
2,多數據庫,調試與運維麻煩,如有一個慢查詢,會影響其它庫查詢速度
3,來回切換,容易混亂