ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis基本类型对象编码

2021-05-15 22:01:18  阅读:229  来源: 互联网

标签:编码 元素 encoding 对象 ziplist object redis hashtable local


字符串对象

对象编码方式有三种:
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"

标签:编码,元素,encoding,对象,ziplist,object,redis,hashtable,local
来源: https://blog.csdn.net/Codeoh/article/details/116862580

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有