0

0

Redis深入(—)

php中文网

php中文网

发布时间:2016-06-07 16:12:31

|

1204人浏览过

|

来源于php中文网

原创

一、Redis键对 Redis数据库里面的每个键对(key-value)都是由对象组成的,键是一个字符串对象,是字符串对象,列表对象,哈希对象,集合对象,有序集合对象中的五种之一。 Redis没有直接使用C语言传统的字符串表示,而是自己构建了一个名为简单动态字符串SD

一、redis键值对

Redis数据库里面的每个键值对(key-value)都是由对象组成的,键是一个字符串对象,值是字符串对象,列表对象,哈希对象,集合对象,有序集合对象中的五种之一。

Redis没有直接使用C语言传统的字符串表示,而是自己构建了一个名为简单动态字符串SDS的抽象类型,并将SDS用作Redis的默认字符串表示。

SET msg “helloworld”

键是一个字符串对象,对象的底层实现是一个保存着字符串”msg”的SDS

值是一个字符串对象,对象的底层实现是一个保存着字符串”hello world”的SDS

二、SDS的定义

每个sds.h/sdshdr结构表示一个SDS值

struct sdshdr

{

//记录buf数组中已使用字节的数量,等于SDS所保存字符串的长度

int len;

//记录buf数组中未使用字节的数量

int free;

//字节数组,用于保存字符串

char buf [];

Insou AI
Insou AI

Insou AI 是一款强大的人工智能助手,旨在帮助你轻松创建引人入胜的内容和令人印象深刻的演示。

下载

}

free属性的值为0,表示这个SDS没有分配任何未使用空间。

Len属性的值为5,表示这个SDS保存了一个五字节长的字符串

三、与C字符串的区别

1、 C语言使用长度为N+1的字符数组来表示长度为N的字符串,并且字符数组最后一个元素总是空字符‘\0’

C字符串并不记录自身的长度信息,所以为了获取一个C字符串的长度,必须遍历整个字符串,O(N),SDS因为记录了SDS本身的长度,故复杂度仅为O(1)。

2、杜绝缓冲区溢出

C可能在字符串拼接时造成缓冲区溢出,SDS的空间分配策略完全杜绝了发生缓冲区溢出的可能性:当SDS API需要对SDS进行修改时,API会先检查SDS的空间是否满足修改所需的要求,如果不满足的话,API会自动将SDS的空间扩展至执行修改所需的大小,然后才执行实际的修改操作。

3、减少修改字符串时带来的内存重分配次数

对于C字符串来说,如果程序执行的是增长字符串的操作或缩短字符串的操作,程序需要通过内存重分配来分配或释放字符串不再使用的那部分空间。SDS中,buf数组的长度不一定就是字符数量加一,数组里面可以包含未使用的字节,而这些字节的数量就由SDS的free属性记录。

4、二进制安全

SDS的buf属性称为字节数组,Redis不是用这个数组来保存字符,而是用它来保存一系列二进制数据。

相关专题

更多
ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

33

2025.12.26

压缩文件加密教程汇总
压缩文件加密教程汇总

本专题整合了压缩文件加密教程,阅读专题下面的文章了解更多详细教程。

18

2025.12.26

wifi无ip分配
wifi无ip分配

本专题整合了wifi无ip分配相关教程,阅读专题下面的文章了解更多详细教程。

46

2025.12.26

漫蛙漫画入口网址
漫蛙漫画入口网址

本专题整合了漫蛙入口网址大全,阅读下面的文章领取更多入口。

91

2025.12.26

b站看视频入口合集
b站看视频入口合集

本专题整合了b站哔哩哔哩相关入口合集,阅读下面的文章查看更多入口。

283

2025.12.26

俄罗斯搜索引擎yandex入口汇总
俄罗斯搜索引擎yandex入口汇总

本专题整合了俄罗斯搜索引擎yandex相关入口合集,阅读下面的文章查看更多入口。

370

2025.12.26

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

35

2025.12.25

错误代码dns_probe_possible
错误代码dns_probe_possible

本专题整合了电脑无法打开网页显示错误代码dns_probe_possible解决方法,阅读专题下面的文章了解更多处理方案。

25

2025.12.25

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

72

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号