如何清空Redis數據?
注意數據清空功能為高危操作,請謹慎執行。
- Redis3.0實例
Redis3.0實(shi)(shi)例(li)(li)不支持在DCS控制臺上執行(xing)“數據清空”功能。需要(yao)使用(yong)Redis-cli客戶端連(lian)接實(shi)(shi)例(li)(li),執行(xing)flushdb或(huo)者flushall命令進行(xing)清空。
flushall:清空整(zheng)個實例的數(shu)據。
flushdb:清空當前DB中的數據。
如何在Redis中查找匹配的Key和遍歷所有Key?
查找匹配Key
在大Key和熱Key分析中,不支持按照指定格(ge)式(shi)分析,如(ru)果需要查(cha)找(zhao)指定前綴(zhui)或者后綴(zhui)格(ge)式(shi)的(de)Key,您可以使用scan命令,根據指定格(ge)式(shi)進行匹配查(cha)找(zhao)。
例如,需(xu)要查(cha)找Redis實(shi)例中包含a關(guan)鍵(jian)字的Key,可以使(shi)用(yong)Redis-cli工具,執行以下命令:
./redis-cli -h ** {redis_address} ** -p ** {port} [-a ** password ] --scan --pattern ' a '
遍歷所有Key
由于(yu)keys命(ming)(ming)令復雜度(du)高,容(rong)易導致Redis無響應,所以(yi)禁止使(shi)用keys命(ming)(ming)令遍(bian)歷實例所有的Key。如果需要在Redis實例中遍(bian)歷所有的Key,可以(yi)使(shi)用Redis-cli工(gong)具,執行以(yi)下(xia)命(ming)(ming)令可以(yi)遍(bian)歷Redis實例的所有key。
./redis-cli -h ** {redis_address} ** -p ** {port} [-a ** password ] --scan --pattern '*'
scan命令(ling)的使用方法(fa),可以參考。
在WebCli執行keys命令報錯“permission denied”
WebCli已禁用keys命令,請使用Redis-cli執行。
高危命令如何禁用?
Redis4.0及(ji)以上版本(ben)的(de)實例創(chuang)建之后,支(zhi)(zhi)持重命名(ming)(ming)高(gao)危命令(ling)。當(dang)前支(zhi)(zhi)持重命名(ming)(ming)的(de)高(gao)危命令(ling)有command、keys、flushdb、flushall、hgetall、scan、hscan、sscan、和zscan,Proxy集群實例還支(zhi)(zhi)持dbsize和dbstats命令(ling)重命名(ming)(ming),其他命令(ling)暫時不支(zhi)(zhi)持。
您可(ke)以在(zai)創建實(shi)例(li)時(shi)進行(xing)重命名(ming)以上高(gao)(gao)危(wei)(wei)命令,或(huo)在(zai)創建完(wan)成(cheng)后,在(zai)緩存管理頁(ye)面,選(xuan)中實(shi)例(li),單擊操作列的(de)“更多 > 命令重命名(ming)”進行(xing)重命名(ming)以上高(gao)(gao)危(wei)(wei)命令。
說明
?目前Redis不支持直接禁用命令,涉及到以上高危命令,可以使用命令重命名。關于DCS實例支持和禁用的命令請參考開源命令兼容性章節。
命令(ling)重命名提交后,系(xi)統會自(zi)動重啟實(shi)例,實(shi)例完成重啟后重命名生效。
因為涉及(ji)安全性,頁面不會顯示(shi)這些(xie)命(ming)令(ling),請記住重命(ming)名后的命(ming)令(ling)。
是否支持pipeline命令?
支持。
注意(yi):Redis Cluster版本集(ji)群實例使用pipeline時,要(yao)確(que)保管道中的命令都能在同(tong)一(yi)分片執行。
Redis是否支持INCR/EXPIRE等命令?
支持。命令兼容性相關說明請參考“命令兼容性說明”章節。
Redis命令執行失敗的可能原因
Redis命令執行失敗,一般有以下可能原因:
- 命令拼寫錯誤
如下圖所示,命令拼寫有誤,Redis實例返回“ERR unknown command”,刪除key的正確命令為 del 。


- 在低版本Redis實例運行高版本命令
如下圖所示,在Redis 3.0版(ban)本(ben)運行Redis 5.0新增的Stream相關命(ming)令,Redis實(shi)例返回命(ming)令出錯信(xin)息。


- DCS Redis不支持的部分命令
出于安全原因,DCS禁用了部分命令,具體參考Redis命令的兼容性,查看禁(jin)用(yong)命(ming)令(ling)與受限使用(yong)命(ming)令(ling)。
- 執行lua腳本失敗
例如報錯:ERR unknown command 'EVAL' ,說明您的Redis實例屬早期創建的低版本Redis實例,不(bu)支(zhi)持lua腳(jiao)本,這種情(qing)況請聯系技術支(zhi)持,升級您的Redis實例。
- 執行setname和getname失敗
說明您的Redis實例屬早期(qi)創建的低(di)版本Redis實例,不支(zhi)持這兩個命令,這種(zhong)情況請聯系(xi)技術支(zhi)持,升級您的Redis實例。
Redis命令執行不生效
如果客戶端代碼業務異(yi)常,懷(huai)疑是Redis命(ming)令(ling)不生效,則可以(yi)通(tong)過(guo)Redis-cli命(ming)令(ling)進行(xing)命(ming)令(ling)執行(xing)和數據查(cha)看(kan),判斷Redis命(ming)令(ling)執行(xing)是否異(yi)常。
以下列舉兩個場景:
- 場景一:通過設置key值和查看key值,即可判斷該命令是否生效。
Redis通(tong)過set命令寫String類型數據,但是數據未變化,則可(ke)以使用Redis-cli命令訪問Redis實例,執行如下(xia)命令:


- 場景二:通過expire命令設置過期事件,但是懷疑過期時間不對,則可以執行如下操作:
設置10秒(miao)過(guo)期時(shi)間(jian),然后執(zhi)行(xing)(xing)ttl命令查看過(guo)期時(shi)間(jian),如下(xia)圖表示,執(zhi)行(xing)(xing)ttl命令時(shi),過(guo)期時(shi)間(jian)剩(sheng)下(xia)7秒(miao)。



說明
Redis客戶端和服務端通過二進(jin)制(zhi)協議(yi)進(jin)行通信,使用(yong)Redis-cli、Jedis、Python客戶端并(bing)沒有差異(yi)。
因此如果懷疑Redis有問(wen)(wen)題,但是使用Redis-cli排查沒(mei)問(wen)(wen)題,那(nei)就很(hen)可能是業務代碼存在問(wen)(wen)題,如果日志沒(mei)有明顯(xian)錯誤信息,則建議在代碼添加日志支(zhi)撐進一步分(fen)析。
Redis命令執行是否有超時時間?超時了會出現什么結果?
Redis命令(ling)超時(shi)分為客戶端超時(shi)和服務端超時(shi)。
- 客戶端超時時間一般由客戶端代碼自行控制,業務側需要根據自己的業務特點選擇合適的超時時間(例如Java的Lettuce客戶端,該參數名為timeout)。
- Redis服務端Timeout默認配置為0,不會主動斷開連接,如果需要修改配置,可以參考修改實例配置參數。
Redis的Key是否能設置為大小寫不敏感?
DCS Redis和(he)開源Redis保持一(yi)致,key對大(da)(da)小寫敏感,且不(bu)支(zhi)持設置大(da)(da)小寫不(bu)敏感功能。
Redis是否支持查看使用次數最多的命令?
Redis不支(zhi)持對歷史命令(ling)的(de)記錄,也(ye)不支(zhi)持查(cha)看使用次數(shu)最多的(de)命令(ling)。
WebCli的常見報錯
- ERR Wrong number of arguments for 'xxx' command
該報錯(cuo)代表執行的Redis命令(ling)存在參數錯(cuo)誤(wu)(語法(fa)錯(cuo)誤(wu)),可以參考開源Redis命令(ling)協議介紹進行命令(ling)構造(zao)。
- ERR unknown command 'xxx'
該(gai)報錯代表此命(ming)令為未(wei)知(zhi)命(ming)令或者非(fei)redis協(xie)議(yi)定義的合(he)法命(ming)令,可以參(can)考開源Redis命(ming)令協(xie)議(yi)介(jie)紹進行命(ming)令構造。
- ERR Unsupported command: 'xxx'
該報錯代表命令在DCS的Redis實例場景下禁用,可以參考支持和禁用的Web CLI命令。