hash 字典
类似于java中的hashmap,数组加链表,碰撞进链表
区别:
rehash过程不同,redis是渐进式rehash策略.
- 构建新的rehash结构,保留新旧两个hash结构,然后后续的定时任务及hash操作将旧的内容移动到新的hash结构中,最终新的hash取代老的结构.
- 当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收。
原理
长度小于64使用ziplist,字符串占用空间小
长度大于64使用dict,dict占用空间比字符串大
例子:
> hset books java "think in java" # 命令行的字符串如果包含空格,要用引号括起来
(integer) 1
> hset books golang "concurrency in go"
(integer) 1
> hset books python "python cookbook"
(integer) 1
> hgetall books # entries(),key 和 value 间隔出现
1) "java"
2) "think in java"
3) "golang"
4) "concurrency in go"
5) "python"
6) "python cookbook"
> hlen books
(integer) 3
> hget books java
"think in java"
> hset books golang "learning go programming" # 因为是更新操作,所以返回 0
(integer) 0
> hget books golang
"learning go programming"
> hmset books java "effective java" python "learning python" golang "modern golang programming" # 批量 set
> hincrby user-laoqian age 1
(integer) 30
网友评论