redis-数据编码

Author Avatar
丁起男 11月 18,2020
  • 在其它设备中阅读本文章

redis-数据编码

可以使用 object encoding xxx命令查看使用编码

string

  • int:8个字节的长整型
  • embstr:小于等于39个字节的字符串
  • raw:大于39个字节的字符串

hash

  • ziplist:压缩列表,当哈希类型元素个数小于hash-max-ziplist-entries(默认512)时,同时所有值都小于hash-max-ziplist-value(默认64)时,redis会使用ziplist作为哈希的内部实现。
  • hashtable:哈希表,当哈希类型无法满足ziplist的条件时,redis会使用hashtable作为哈希的内部实现。因为此时ziplist的读写效率会下降,而hashtable的读写时间复杂度为O(1)

ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀

注:当一个哈希的编码是hashtable后,即使更换它的值,也还是hashtable

list

  • ziplist:压缩列表,当哈希类型元素个数小于list-max-ziplist-entries(默认512)时,同时所有值都小于list-max-ziplist-value(默认64)时,redis会使用ziplist作为哈希的内部实现。
  • linkedlist:链表,当列表类型无法满足ziplist的条件时,redis会使用linkedlist作为列表的内部实现

和哈希类型相同,只能升级,不能自动变回ziplist类型

set

  • intset:整数集合,当集合中的元素都是整数,且元素个数小于set-max-intset-entries(默认512)时,redis会选用intset来作为集合内部实现,从而减少内存的使用
  • hashtable:哈希表,当集合类型无法满足intset的条件时,redis会使用hashtable作为集合的内部实现

zset

  • ziplist:压缩列表,当有序集合的元素个数小于zset-max-ziplist-entries(默认128),同时每个元素的值小于zset-max-ziplist-value(默认64)时,redis会用ziplist类作为有序集合的内部实现
  • skiplist:跳跃表,当ziplist条件不满足时,有序集合会使用skiplist作为内部实现