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类型
有序集合,不能有重复元素,但元素可以排序,通过给每一个元素设置一个分数作为排序的依据。提供了获取指定分数和元素范围查询、计算成员排名等功能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。