redis之二字符串
来源:互联网 发布:sqlserver时间比较 编辑:程序博客网 时间:2024/06/07 19:41
1 Redis的SDS
Redis没有直接使用C语言传统字符串的表示,而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS作为Redis的默认字符串表示。
2 Redis的SDS使用例子
命令:SET msg “hello world”
Redis的处理方式,创建一个新的键值对,其中:
1) 键值对的键是一个字符串对象,对象的底层实现是一个保存着字符串”msg”的SDS。
2) 键值对的值也是一个字符串对象,对象的底层实现是一个报错这字符串”helloworld”的SDS。
备注:一个键值对中的值也可能是一个数组或者列表对象,其中每个数组元素或者列表元素都是以SDS形式存在的。
3 Redis的SDS的其他用途
1) AOF模块的AOF缓冲区
2) 客户端状态中的输入缓冲区
4 Redis的SDS的结构
struct sdshdr{int len;int free;char buf[];}
1) free标识这个SDS分配的未使用空间。
2) len标识这个保存了一个len长度的字符串
3) buf 是一个char类型数组,保存着这个字符串的内容。
5 Redis的SDS的优点
1) 常数复杂多获取字符串的长度,因为有len的存在
2) 杜绝缓冲区溢出,当SDS的API打算对SDS进行修改的时候,API会检查SDS的空间是否满足修改所需的要求,如果不满足的话,API会自动将SDS的空间扩展至执行修改所需的大小,然后执行实际的修改操作。
3) 减少修改字符串时带来的内存重分配次数。SDS通过未使用的空间free字段的值解除了字符串长度和底层数组长度之间的关联。通过未使用空间,SDS实现了空间预分配和惰性空间释放(当SDS需要缩短SDS保存的字符串时,程序并不会立即使用内存重分配来缩短多出来的字节,而是使用free属性将这些字节记录起来,等待将来使用)两种策略。
4) 二进制安全。SDS使用len属性的值而不是空字符串来判断字符串是否结束,所以Redis可以保存任意格式的二进制数据。
- redis之二字符串
- Redis数据类型之字符串类型--Redis系列二
- redis之字符串命令源码解析(二)
- Redis学习笔记(二)类型之字符串
- Redis 学习笔记(二)之字符串类型命令
- Redis 学习笔记(二)之字符串类型命令
- redis源码分析(二)、redis源码分析之sds字符串
- redis数据结构之字符串
- Redis数据类型之字符串
- Redis之4-字符串
- redis之字符串操作
- redis之字符串类型
- redis学习心得之二
- redis学习之Redis 字符串(String)
- redis学习心得之二【redis主从配置】
- redis学习心得之二【redis主从配置】
- redis学习心得之二【redis主从配置】
- Redis系列之Redis主从复制(二)
- String详解(二):StringBuilder和StringBuffer的区别
- 黑马程序员:福利来袭!网络安全斗鱼直播“录像+资源”大放送
- scikit-learn多分类probility输出
- 不使用用库函数将整数转换为字符串
- zabbix企业应用之监控docker容器资源情况
- redis之二字符串
- poj1177 线段树 + 扫描线
- Java小学期第二次作业 完成心得留存(字符串匹配、char型等)
- iOS网络编程
- 计算机网络探究(三) TCP和HTTP的keepAlive
- C/C++之回调函数
- ubuntu下安装配置部署zabbix——基于docker
- Git学习笔记
- bzoj1096(斜率优化)