- keys命令在線上是禁止使用的。
- 原因:
- Redis是單線程的,其所有操作都是原子的,
- 當數據量過大的時候,keys命令是非常耗時的,極大的會造成線程阻塞。導致所有請求都被拖慢。甚至嚴重會redis服務宕機。集群環境下,阻塞時間過長會導致集群分析故障而進行集群切換。
- 解決方案:
- 使用scan命令,它是分批次查詢,不會影響redis卡頓。
- 考慮改良鍵值索引,使用set數據結構存儲。
- 其他會類似於keys命令的命令:hgetall、lrange、smembers、zrange、sinter
- scan命令的使用:scan 迭代起始游標
- 第一次迭代遍歷 起始游標值為0,結果默認是10個,並返回下一次迭代起始游標
- 當返回迭代游標值為0時,說明已經完成了一次完整的遍歷。
- 可以使用 count選項 設置每次遍歷的長度
- match選項 設置匹配規則。
參考鏈接:https://www.cnblogs.com/tonyY/p/12175032.html
命令參考鏈接:http://doc.redisfans.com/key/scan.html