#### ziplist
> ziplist 编码的哈希对象使用压缩列表作为底层实现,每当有新的键值要加入到哈希对象时,程序会先将保存了键的压缩列表节点推入压缩列表表尾,然后再将保存了值得压缩列表节点推入到压缩列表表尾
**因此:**
* 保存了同一键值对得两个节点总是紧挨在一起,保存键得节点在前,保存值得节点在后
* 先添加到hash对象中的键值对会被放在压缩列表的表头方向,后来的键值对会添加到压缩列表的表尾方向。
*****
假设 key 为 user
需要加入的值为 "name": "zhangsan" / "age": 15 / "career": "Program"
| | | | | | |
| --- | --- | --- | --- | --- | --- |
| "name" |"zhangsan" | "age" |15| "career" |"Program" |
#### hashtable
> `hashtable`编码的哈希对象使用字典作为底层实现, 哈希对象中的每个键值对都使用一个字典键值对来保存:
* 字典的每个键都是一个字符串对象, 对象中保存了键值对的键;
* 字典的每个值都是一个字符串对象, 对象中保存了键值对的值。
*****
当哈希对象可以同时满足以下两个条件时, 哈希对象使用`ziplist`编码:
1. 哈希对象保存的所有键值对的键和值的字符串长度都小于`64`字节;
2. 哈希对象保存的键值对数量小于`512`个;
不能满足这两个条件的哈希对象需要使用`hashtable`编码。
- 虚拟机
- JVM内存结构
- JVM调优手段
- java对象生命周期
- 垃圾回收判断对象死亡
- 垃圾回收算法
- 垃圾收集器
- JAVA基础知识
- java事件机制
- java反射机制
- jvm创建对象
- java异常
- finally语句一定会执行吗?
- 集合类介绍
- ArrayList
- LinkedList
- HashMap
- ConcurrentHashMap
- 多线程
- 为什么要使用线程池
- 线程死锁
- 死锁检测和解除
- jstack
- jconsole
- 死锁预防
- 常见线程池
- 线程池参数
- 工作队列介绍
- 拒绝策略
- ThreadLocal
- CAS
- ReentrantLock
- AQS
- CountDownLatch
- Spring
- spring中bean的作用域
- REDIS
- redis数据结构
- redis hash实现
- redis rehash与hashmap扩容的区别
- Redis使用场景
- Redis为何这么快
- redis连接数不足导致错误
- 分布式
- 分布式事务
- ACID
- CAP
- BASE
- 事务隔离性
- 一致性哈希算法
- 负载均衡算法
- Hystrix 信号量和线程池隔离的差异
- Spring Cloud
- eureka
- MYSQL
- mysql优化经验
- undo redo binlog
- web
- http协议
- http和https区别
- Cookie和session
- TCP三次握手、4次挥手
- TCP的time_wait和close_wait
- 算法问题
- 编辑距离算法
- MQ
- RabbitMq
- Kafka
- 安装教程
- Win ELK安装