整数是次要的redis数据类型吗?

unguejic  于 2022-12-22  发布在  Redis
关注(0)|答案(1)|浏览(419)

我正在学习redis,刚刚在redis实验室看到了这个演讲。有一件事让我很困惑,在8'34''他把redis数据类型分为主要和次要,这里是direct link,整数是次要数据类型。嗯,为什么整数是次要的?这是否意味着我需要使用Redis Stack来存储整数值到数据库?这看起来不对。

cvxl0en2

cvxl0en21#

出于性能原因,Redis内部存储数据的方式不同,包括64位整数。
Redis对象可以用不同的方式编码:

字符串可编码为:

  • 原始的普通字符串编码。
  • int,表示64位有符号间隔中的整数的字符串,以这种方式进行编码以保存空间。
  • embstr,一个嵌入字符串,它是一个对象,其中内部简单动态字符串sds是在与对象本身相同的chuck中分配的不可修改的字符串。embstr可以是长度不超过OBJ_ENCODING_EMBSTR_SIZE_LIMIT硬编码限制或44字节的字符串。
    列表可以编码为ziplist或linkedlist。ziplist是用于为小列表保存空间的特殊表示。
    集合可以被编码为intset或hashtable。intset是一种特殊的编码,用于仅由整数组成的小型集合。
    杂凑可以编码为ziplist或杂凑数据表。ziplist是用于小型杂凑的特殊编码。
    排序集可以编码为ziplist或skiplist格式。对于列表类型,小的排序集可以使用ziplist专门编码,而skiplist编码是一种适用于任何大小的排序集的编码。

一旦您执行了一个操作,使得Redis无法保留节省空间的编码,所有特殊编码类型都会自动转换为通用类型。
要检查Redis对给定密钥使用的编码,可以使用OBJECT ENCODING command

相关问题