redis数据结构及内部编码

redis有5种常用的数据结构:string、hash、list、set、zset,通过type [key]命令可以查看当前键的数据结构类型;每种数据结构都有不止一种相应的内部编码实现,redis会在合适的场景选择合适的内部编码,通过object encoding [key] 可以查看内部编码。

这样设计的好处:

1.改进内部编码,对外的数据结构和命令没有影响,外部用户无感知。
2.多种内部编码可在不同场景下发挥各自优势。如:ziplist比较节约内存,但在元素比较多的时候,性能会下降,此时转换为linkedlist。

每种数据结构以及内部编码如下表所示:

图片描述

string类型
是redis最基础的数据结构,可以是简单的字符串,复杂的字符串(JSON、XML),数字,二进制(图片、音频、视频),但最大值不能超过512M。

hash类型
在数据量较小时使用ziplist,更加紧凑的存储元素,节省内存;当不满足其使用条件时,会使用hashtable作为hash的内部实现,此时ziplist的读写效率会下降,而hashtable的读写时间复杂度为O(1)。

list类型
用来存储多个有序的可重复的字符串,一个列表最多可有2^32-1个元素;可以对列表两端插入和弹出,还可以取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,可以充当栈和队列的角色。

set类型
集合中不允许有重复元素,并且集合中的元素是无序的。一个set集合最多可有2^32-1个元素,支持多个集合的交集、并集、差集。

zset类型
有序集合,不能有重复元素,但元素可以排序,通过给每一个元素设置一个分数作为排序的依据。提供了获取指定分数和元素范围查询、计算成员排名等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值