redis的基本类型

redis是一种基于BSD开源的项目,是一个把结构化的数据放入内存的一个存储结构。你可以把它看做数据库,缓存,消息中间件,同时支持strings,sets,sortedsets,lists,hashes,bitmaps,hyperloglogs,geospatial indexes等数据类型。它还内建了复制,lua脚本,LRU,事务等功能。通过redis sentinel实现高可用,通过redis cluster实现自动分片。以及事务,发布/订阅,自动故障转移等。

数据类型

redis的数据类型从简单的string到复杂的数据类型都有支持

1.string 最基本的数据类型 二进制的安全字符串 最大512M

2.list 有顺序的字符串列表

3.set 无顺序的字符串集合 不会有重复的元素

4.sorted set 有顺序的字符串集合

5.hash 以key-value 为键值对的集合

6.bitmap 以bit为单位 可以极大的节约空间

7.hyperloglog 基于概率的数据结构

### Redis基本数据类型的底层实现原理 Redis 是一种高性能的键值存储系统,其底层实现依赖于多种数据结构和编码方式,这些设计使得 Redis 在内存使用效率和数据操作性能之间取得了良好的平衡。以下是 Redis 基本数据类型的底层实现详解: #### 1. **String 类型** String 是 Redis 最基础的数据类型,其实现基于两种编码方式:`int` 和 `embstr`/`raw`。 - 当字符串值可以表示为整数时,Redis 使用 `int` 编码来存储该值[^3]。 - 对于较小的字符串(通常小于 44 字节),Redis 使用 `embstr` 编码,这是一种优化后的编码方式,将字符串对象和值合并为一个连续的内存块,减少了内存分配次数[^2]。 - 对于较大的字符串或动态变化的字符串,Redis 使用 `raw` 编码,允许字符串值动态扩展。 ```c // 示例:Redis 中 String 的实现 struct redisObject { unsigned type:4; // 数据类型标识 unsigned encoding:4; // 编码方式 void *ptr; // 指向实际数据的指针 }; ``` #### 2. **List 类型** List 类型Redis 中通过双端链表(`linked list`)或压缩列表(`ziplist`)实现。 - 当列表元素较少且每个元素较小时,Redis 使用 `ziplist` 编码以节省内存。 - 当列表元素较多或元素较大时,Redis 转而使用 `linkedlist` 编码,其中每个节点包含一个指向下一个节点的指针[^3]。 ```python # 示例:操作 Redis List 类型 db.ListLeftPush("mylist", "world") # 插入到列表左侧 db.ListRightPush("mylist", "!") # 插入到列表右侧 ``` #### 3. **Hash 类型** Hash 类型用于存储键值对集合,其底层实现基于哈希表(`hashtable`)或压缩列表(`ziplist`)。 - 当 Hash 中的字段和值较少时,Redis 使用 `ziplist` 编码以减少内存开销[^2]。 - 当字段和值增多时,Redis 切换到 `hashtable` 编码,提供更高效的查找和插入性能[^3]。 #### 4. **Set 类型** Set 类型用于存储无序且唯一的元素集合,其底层实现基于整数集合(`intset`)或哈希表(`hashtable`)。 - 如果 Set 中的所有元素都是整数且数量较少,Redis 使用 `intset` 编码,这是一种紧凑的整数集合实现[^2]。 - 如果 Set 包含非整数元素或元素数量较多,Redis 使用 `hashtable` 编码[^3]。 #### 5. **Sorted Set 类型** Sorted Set 是一种有序集合,其底层实现基于跳跃表(`skiplist`)和字典(`dict`)。 - 跳跃表用于按分值排序的快速范围查询。 - 字典用于快速查找特定成员的分值[^2]。 ```c // 示例:Redis 中 Sorted Set 的实现 typedef struct zset { dict *dict; // 用于快速查找成员 zskiplist *zsl; // 用于按分值排序的跳跃表 } zset; ``` ### 总结 Redis基本数据类型通过灵活选择不同的编码方式,在内存占用和性能之间实现了良好的权衡。理解这些底层实现有助于开发者更好地优化 Redis 的使用场景[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值