1、主要區別
keys和hkeys最根本的區別就是操作的對象不同
- keys:針對的是redis中的所有key值,用於檢索redis中符合條件的key值
- hkeys:針對的是單個hash,目的是獲得該hash對象的字段值
2、keys
2.1、官方解釋
KEYS pattern
查找符合給定模式的key。
- 可以使用正則表達式
KEYS 命中數據庫中所有key。
KEYS h?llo命中hello, hallo and hxllo等。
KEYS hllo命中hllo和heeeeello等。
KEYS h[ae]llo命中hello和hallo,但不命中hillo。
KEYS h[a-z]llo
KEYS hello[0-9]
特殊符號用”\”隔開
2.2、時間複雜度
O(N),N爲數據庫中key的總數量
2.3、返回值
符合給定模式的key列表。
2.4、帶來的性能問題
keys的時間複雜度是O(N),在執行此命令的時候redis會鎖定,花費的時間較長。
由於redis的單線程性質,會導致後續提交給redis命令都阻塞在隊列中,redis服務器CPU增高。
許多客戶端發出的redis命令長時間得不到響應,進一步影響業務甚至引起系統的雪崩效應。
在業內有一條鐵律:禁止在生產環境使用Keys正則匹配操作(實際即便是開發、測試環境也要慎重使用)
3、HKeys
3.1、官方解釋
HKEYS key
返回單個哈希表key中的所有域。
3.2、時間複雜度
O(N),N爲哈希表的大小。
3.3、返回值
一個包含哈希表中所有域的表。
當key不存在時,返回一個空表。
當key存在,但是類型不是hash類型的時候,則拋出異常