1. 程式人生 > 資料庫 >Redis 不使用 keys 命令獲取鍵值資訊的方法

Redis 不使用 keys 命令獲取鍵值資訊的方法

1. 問題來源

這個問題可能看起來很奇怪,但很多 redis 叢集會有一個統一的入口,入口會作相容 redis 命令的代理,一般出於新能考慮是禁止使用 keys 命令來獲取鍵值資訊的,但是可以通過 scan 命令來代替 keys

2. 使用 keys 的方法

127.0.0.1:6379> KEYS *
1) "_kombu.binding.test_queue"
2) "a8e620b9-e52e-3498-8a1c-448f35783058"
3) "_kombu.binding.celery"

3. 使用 scan 的方法

127.0.0.1:6379> DBSIZE
(integer) 3
127.0.0.1:6379> SCAN 0 MATCH * COUNT 3
1) "5"
2) 1) "a8e620b9-e52e-3498-8a1c-448f35783058"
 2) "_kombu.binding.test_queue"
 3) "_kombu.binding.celery"

簡單說明

SCAN 命令 (以及相關的 SSCAN/HSCAN/ZSCAN,分別用於 SET/HASH/ZSET) 用於增量式的遍歷一個集合中的元素。因為其增量特性 (每次使用只返回一小部分元素),所以在生產環境中可以用來替代 KEYS 或 SMEMBERS 命令 (KEYS 或 SMEMBERS 命令可能會因為返回的元素過多而阻塞 redis)

所以在生產環境中即便 redis 服務支援 keys 命令,也應該用 scan 來代替

參考:

1. https://groups.google.com/forum/#!topic/redis-db/zZeI_PjHF_M
2. https://redis.io/commands/scan

總結

以上所述是小編給大家介紹的Redis 不使用 keys 命令獲取鍵值資訊的相關知識,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會就及時回覆大家的!