redis基本类型对象编码

字符串对象

对象编码方式有三种:
int: 当值为小的整数值,使用long类型存储
embstr:值为简短的字节数组(同样也是SDS,仅调用一次内存分配函数,分配的连续空间,空间中包含redisObject和sdshdr)
raw:底层采用SDS字符串存储(调用两次内存分配函数,分配给redisObject和sdshdr)

编码变更:
在这里插入图片描述
在这里插入图片描述

列表对象

对象编码方式有三种:
ziplist:列表中所有字符串元素的长度小于64;元素的数量小于512个,使用ziplist
linkedlist:当ziplist中两个条件有一个不满足时,就会转换为linkedlist。

local:0>rpush blah "hello" "word" "again"
"3"

local:0>object encoding blah
"ziplist"

local:0>rpush blah "wwwwwwwwwwwwwwwwwwwwwmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmlocal:0>"
"5"

local:0>object encoding blah
"linkedlist"

哈希对象

编码方式有两种:
ziplist:压缩列表,当哈希对象保存的所有键值对的字符串的长度都小于64字节;键值对的数量小于512个。
hashtable:哈希表编码,当不满足上述条件之一,就会转换为hashtable存储。

local:0>hset studeng name "wang"
"1"

local:0>object encoding studeng
"ziplist"
# 键值对的值的长度大于了64字节,转换为hashtable
local:0>hset studeng desc "dfijfdoiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilocal:0>fsooooooooooooooooooooooooooooooooooooooooo"
"1"

local:0>object encoding studeng
"hashtable"

集合对象

集合对象的编码有两种:
intset:整数集合,所有 元素都是整数值;元素数量不超过512个;满足两个条件的话,集合对象将采用整数集合编码存储(两个条件的上限值都可以修改)。
hashtable:哈希表,不满足上述条件,将使用hashtable存储。

local:0>sadd number 1 3 5 76
"4"

local:0>object encoding number
"intset"

local:0>sadd number 'aaa'
"1"

local:0>object encoding number
"hashtable"

有序集合对象

有序集合编码:
ziplist:压缩列表,每个集合元素使用两个紧挨在一起的压缩节点保存,第一个节点为元素的成员,第二个元素为元素的分值。需要满足:元素数量小于128个,元素成员的长度小于64字节
skiplist:跳跃表,按照分值从小到大保存集合元素,zset通常使用字典和跳跃表一起使用,字典负责在O(1)时间内,查看到元素和分数的映射,跳跃表可以进行范围查询。

local:0>eval "for i=1, 128 do redis.call('zadd',KEYS[1], i,i) end" 1 numbers
"null"
local:0>object encoding numbers
"ziplist"
local:0>zadd numbers 3.14 pi
"1"
local:0>object encoding numbers
"skiplist"
local:0>zcard numbers
"129"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值