redis数据结构及内部编码

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

这样设计的好处:数据结构

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

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

图片描述

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

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

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

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

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

相关文章
相关标签/搜索