#### 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安裝