redis的数据结构
redis的数据结构
  Type 外部
    string
      REDIS_STRING
    hash
      REDIS_HASH
    list
      REDIS_LIST
    set
      REDIS_SET
    zset
      REDIS_ZSET
  Encoding 内部
    string
      REDIS_ENCODING_INT
        当字符串可以表示为整数时，Redis会将其转换为整数，并采用int编码方式存储。int编码方式的优点是存储空间小，操作效率高。缺点是只能存储整数，不支持字符串操作。
      OBJ_ENCODING_EMBSTR
        保存长度小于44字节的字符串，当一个字符串比较短，采用此编码方式存储，可以减少内存占用。
      OBJ_ENCODING_RAW
        保存长度大于44字节的字符串，当一个字符串比较长时，采用此编码方式存储。
    list
      OBJ_ENCODING_ZIPLIST
        在Redis3.2版本之前，当List列表中每个字符串的长度都「小于64字节」并且List列表中「元素数量小于512个」时，List对象使用ziplist编码，其他情况使用linkedlist编码。ziplist是一种紧凑的、压缩的列表结构，可以节省内存，适用于小型列表。
      OBJ_ENCODING_LINKEDLIST
        linkedlist是一种链表结构，支持任意大小的列表。但其内存占用会随着列表长度的增加而增加。
      OBJ_ENCODING_QUICKLIST
        Redis 3.2版本引入，quicklist是一种由多个ziplist组成的列表结构，既能保证性能，又能节省内存，适用于大型列表。
    set
      REDIS_ENCODING_HT
        当集合中的元素都是整数时，Redis会采用intset编码方式存储。intset编码方式的优点是存储空间小，操作效率高。
      OBJ_ENCODING_INTSET
        当集合中的元素包含字符串时，Redis会采用hashtable编码方式存储。hashtable编码方式的优点是可以存储任意类型的元素，支持字符串操作。缺点是存储空间相对较大，操作效率相对较低。
    zset
      OBJ_ENCODING_ZIPLIST
        当集合中元素个数少于128个，并且每个元素的大小小于64字节时，使用此编码方式。这是因为ziplist在处理较小数据时，内存效率更高，性能更优。
      OBJ_ENCODING_SKIPLIST
        skiplist是一种跳跃表结构，支持快速查询和排序。适用于大型有序集合。
    hash
      OBJ_ENCODING_ZIPLIST
        保存的所有键值的字符串长度小于64字节，并且键值对数量小于512个，Redis会采用ziplist编码方式存储。ziplist编码方式的优点是存储空间小，操作效率高。缺点是不支持快速的键查找操作。
      REDIS_ENCODING_HT
        除上述条件之外，Redis会采用hashtable编码方式存储。hashtable编码方式的优点是支持快速的键查找操作，缺点是存储空间相对较大，操作效率相对较低。