1. Redis Hash是什么?
一种底层编码 由 ZIPLIST 和 HASHTABLE 构成的具有哈希表功能的Redis 对象.
与SET 集合相比,哈希不支持 集合的对应运算操作,比如集合减,集合并,集合交.
2. 适用场景
适合典型的KV类数据查询.比如配置信息,用户名与密码MD5
3. 常用操作
看图!
特别说说明:
HSETNX key[hash_name] f1 v1 f2 v2 ...: 凡是带NX 后缀的,只要key有对应值这次设置的值不会被更新进去.
4.原理
4.1 编码
HASHTABLE 有两种编码:
ZIPLIST
ZIPLSIT 使用条件:
所有strlen(KEY), strlen(VALUE) 都 小于64 字长 且存储对数 小于512 对.
两个条件任何一条不满足,编码结构就用HASHTABLE。
HASHTABLE
4.2哈希冲突解决
INTERVIEW
1. 如何查看Hash所有成员?如何查找某个成员?
HGETALL table_name
HGET table_name key
2. 如何查看Hash中成员个数?
HLEN
3. Hash的编码方式是什么?
存入表中hash 对象中的 key-val 长度都小于 64字节且 出入总对数 小于 512 对用 ZIPLIST
上任意不满足HASHTABLE
4. Hash查找某个key的平均时间复杂度是多少?
使用ZIPLIST O(512) = O(1)
使用HASHTABLE O(1) - 映射计算查表访问 一般都在十步之内.
5. Hash为什么要用两种编码方式?
在最大kv对数不超过512时以当前CPU的工作频率其实和查HASHTABLE 访问的速度并没有差太多.
ZIPLIST 编码格式内存布局紧凑,节省内存,局部性更好,速度更快.