Redis
Redis 整体结构概述
5种基本数据类型 string
5种基本数据类型 list
Redis数据结构 skiplist
Redis数据结构 ziplist
Redis持久化机制
Redis哨兵机制
Redis事务机制
Redis分布式锁
Python 案例
Redis主从复制
本文档使用 MrDoc 发布
-
+
首页
5种基本数据类型 string
## 概述 redis的5种基本数据类型为:**string, hash, list, set, zset** ## string redis 使用C语言编写,但它并没有直接使用char[]作为字符串,而是对char[]进行了封装,封装后的数据结构称之为 **简单动态字符串(Simple Dynamic String)** ,简称sds. sds 有以下特点: - 包含字符串长度属性,获取长度时不需要再遍历字符串; - 不依赖\'\0'作为字符串结束符,二进制安全,可以存储二进制数据,比如图片和视频; - 继承了内存分配策略,防止内存溢出,更加安全; ### sds 结构 ``` struct sdshdr { int len; // 记录buf中已使用的长度,不包含末尾的'\0' int free; // 记录buf数组中未使用的长度 char buf[]; // 字节数组,用来保存字符串内容 } ``` 我们可以看到,sds属性中记录了字符串的长度,所以它不依赖\'\0'作为结束符,因此它是一个二进制安装的字符串。 ### sds 如何被存储 从上一篇文章我们可以知道,真正存储数据的是dictEntry 对象。 每次新增一个key-value 键值对时,redis都会创建两个对象:key对象和value 对象。而且value不会直接存储,而是被封装为redisObject对象。 当我们在redis客户端执行命令`set name olivetree`时,就会得到下图所示的结构(省略了部分属性):  ### 参考 > [一个简单的字符串,为什么 Redis 要设计的如此特别](https://www.cnblogs.com/lonely-wolf/p/14261486.html "一个简单的字符串,为什么 Redis 要设计的如此特别") ### 番外篇 很多语言的字符串都是不可变的,比如python/java/go,但是redis 的字符串是可变字符串,也就是说,我们可以修改、追加、删除字符串的内容。 那么,可变字符串和不可变字符串都有什么优点呢? ### 不可变字符串 1. 字符串缓存池 很多语言(比如python和java)都有字符串缓存池,当需要一个字符串时,会先查找缓存池中是否有这个字符串,如果有则直接返回,这样可以提高程序的运行效率,也能减少内存的使用。在这种情况下,如果字符串能够被修改,那么可能会导致灾难性的后果。 > python 默认缓存小整数(-5-256)和字符串 2. 缓存字符串哈希码 字符串的哈希码可以缓存起来,或者作为字符串对象的一个属性,不必每次获取哈希码都计算一次。如果字符串支持修改,那么哈希码就不能缓存。 ### 可变字符串
gaojian
2021年8月20日 11:01
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码