keys pattern
查詢所有符合給定模式pattern
的key
。
keys *
匹配資料庫中所有key
。
keys h?llo
匹配hello
,hallo
和hxllo
等。
keys h*llo
匹配hllo
和heeeeello
等。
keys h[ae]llo
匹配hello
和hallo
,但不匹配hillo
。
特殊符號用\
隔開
keys模糊匹配,請大家在實際運用的時候忽略掉。因為keys會引發redis鎖,並且增加redis的cpu占用,情況是很惡劣的notice:keys 的速度非常快,但在乙個大的資料庫中使用它仍然可能造成效能問題,如果你需要從乙個資料集中查詢特定的 key ,你最好還是用 redis 的集合結構(set)來代替。
實際應用中有時候會出現需要遍歷redis中的所有鍵值的需求,比如清理沒用的鍵等等。但是keys這個命令效能真的很差,redis官方文件是這麼說的:
由於執行keys命令,redis會鎖定,如果資料龐大的話可能需要幾秒或更長,對於生產伺服器上鎖定幾秒這絕對是災難了
如果有這種需求的話可以自己對鍵值做索引,比如把各種鍵值存到不同的set裡面,分類建立索引,這樣就可以很快的得到資料,但是這樣也存在乙個明顯的缺點,就是浪費寶貴的空間,要知道這可是記憶體空間啊,所以還是要合理考慮,當然也可以想辦法,比如對於有規律的鍵值,可以儲存他們的始末值等等。
使用redis的時候要注意很多細節,當時的leader說過一句話很受啟發,雖然redis只提供了五種型別,但是用起來不一定就只有五種,比如string型別,你可以儲存任何你自己定義的型別,所以思想不能侷限,靈活的設定資料結構。還有就是雖然redis訪問很快,但是正常生產環境,redis伺服器肯定和web伺服器不是在一起,有時候甚至是在不同的地區,所以網路通訊延遲就很重要了,所以要減少訪問次數,一次訪問完成更多的工作,否則你會發現做同樣的事redis還沒有關係型資料庫快,所以redis存的時候一定要有技巧,盡可能減少訪問次數。
從redis的官方文件上看,2.8版本之後scan命令已經可用,允許使用游標從keyspace中檢索鍵。對比keys命令,雖然scan無法一次性返回所有匹配結果,但是卻規避了阻塞系統這個高風險,從而也讓一些操作可以放在主節點上執行。
需要注意的是,scan 命令是乙個基於游標的迭代器。scan 命令每次被呼叫之後, 都會向使用者返回乙個新的游標,使用者在下次迭代時需要使用這個新游標作為 scan 命令的游標引數, 以此來延續之前的迭代過程。同時,使用scan,使用者還可以使用keyname模式和count選項對命令進行調整。scan相關命令還包括sscan 命令、hscan 命令和 zscan 命令,分別用於集合、雜湊鍵及有續集等。
另一方面,使用redis的時候一定要注意控制key,對於key的命令要制定乙個完善的方案,這樣才能對redis裡面的資料可控,避免出現沒用資料長時間佔據資料庫這種情況,也可以避免上面說的這種查詢鍵值的操作。
關於redis的keys命令的效能問題
查詢所有符合給定模式pattern的key。keys 匹配資料庫中所有key。keys h?llo匹配hello,hallo和hxllo等。keys h llo匹配hllo和heeeeello等。keys h ae llo匹配hello和hallo,但不匹配hillo 實際應用中有時候會出現需要遍歷...
關於redis的keys命令的效能問題
keys pattern 查詢所有符合給定模式pattern的key。keys 匹配資料庫中所有key。keys h?llo 匹配hello,hallo和hxllo等。keys h llo 匹配hllo和heeeeello等。keys h ae llo 匹配hello和hallo,但不匹配hillo...
關於redis的keys命令的效能問題
keys pattern 查詢所有符合給定模式pattern的key。keys 匹配資料庫中所有key。keys h?llo 匹配hello,hallo和hxllo等。keys h llo 匹配hllo和heeeeello等。keys h ae llo 匹配hello和hallo,但不匹配hillo...