Redis常见数据结构
Redis的简介
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理,它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
简言之,Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求。
Redis中的数据类型
- String(字符串)
- Hash(哈希)
- List(列表)
- Set(集合)
- ZSet(Sorted Set)有序的集合

数据类型之String(字符串)
Redis中的字符串被称为简单动态字符串「SDS」,这种结构很像Java中的ArrayList,其长度是动态可变的.
String是Redis中最基本的数据类型,一个key对应一个value
String类型的value是基于二进制存储的,所以完全可以存储图片和影音等二进制数据
key的大小最大512mb
struct SDS<T> {
T capacity; // 数组容量
T len; // 数组长度
byte[] content; // 数组内容
}content[] 存储的是字符串的内容,capacity表示数组分配的长度,len表示字符串的实际长度。

数据据类型之Hash(哈希)
Hash 是一个键值对集合。Hash是一个string类型的field和value的映射表,Hash特别适合用于存储对象object
Redis的Hash与普通的有所不同,它可以使你像在数据库中Update一个属性一样只修改某一项属性值。
例如:
它可以 已key: 1和 name 为key取value:张三。
数据类型之List(列表)
- List说白了就是链表(Redis使用双端链表实现的List。使用List结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的TimeLine)。
- List的另一个应用就是消息队列,可以利用List的*PUSH操作。将任务存在List,然后工作线程再用POP 操作将任务取出进行执行。
- Redis还提供了操作List中某一段元素的api,你可以直接查询,删除List中某一段的元素
- Redis的List中的元素是可以重复的,也就是说在Redis列表类型中,可以保存同名元素,如下图所示:

数据类型之Set(集合)
- Set 就是一个集合,集合的概念就是一堆不重复值的组合
- Set数据类型的底层可以是intset(整数集)或者是hashtable(散列表也叫哈希表)。
- 当数据都是整数并且数量不多时,使用intset作为底层数据结构;
- 当有除整数以外的数据或者数据量增多时,使用hashtable作为底层数据结构。
数据类型之ZSet(有序集合)
- Redis中的Zset,也叫做有序集合。它的底层是ziplist压缩列表)或 skiplist跳跃表)。
- 和Set相比,ZSet(Sorted Set)是将Set中的元素增加了一个权重参数score,使得集合中的元素能够按score进行有序排列
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!