400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

【Redis】数据结构---String-创新互联

文章目录

成都创新互联-专业网站定制、快速模板网站建设、高性价比商洛网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式商洛网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖商洛地区。费用合理售后完善,10余年实体公司更值得信赖。String(字符串) 1.Redis 键(key)

image-20221130014337304

执行上面的操作

image-20221130015234931

2.String(字符串)

String是Redis最基本的类型,一个key对应一个value。

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

2.1常用命令

set 添加键值对

image-20221130021209021

关于set的其他参数

get 查询对应键值

append 将给定的 追加到原值的末尾

strlen 获得值的长度

setnx 只有在 key 不存在时 设置 key 的值

image-20221130022154240

数字类型的命令:

incr

decr

incrby / decrby<步长>将 key 中储存的数字值增减。自定义步长。

image-20221130022352456

mset …

mget …

image-20221130022635543

msetnx …

image-20221130022855031

getrange<起始位置><结束位置>

setrange<起始位置>

image-20221130023035175

setex<过期时间>

getset

2.2.String底层结构

Redis是用C语言写的,但是对应Redis的Sting,并不是C 语言中的字符串(即以空字符’\0’结尾的字符数组);Redis自定义了数据结构SDS(simple dynamic string)【简单动态字符串】,并将 SDS 作为 Redis的默认字符串表示。

struct sdshdr{//记录 buf 数组中未使用字节的数量
     int free;
    
    //记录buf数组已使用字节的数量
    //等于 SDS 保存字符串的长度
     int len;
        
     //字节数组,用于保存字符串
     char buf[];	//柔性数组
}

image-20221130024613783

优点:

减少修改字符串的内存重新分配次数

C语言字符串由于不记录字符串长度,所以如果要修改字符串,必须重新分配内存(先释放再申请)。因为如果没有重新分配,字符串长度增大时会造成内存缓冲区溢出,字符串长度减小时会造成内存泄露。

对于SDS,由于len属性和free属性的存在,对于修改字符串SDS实现了空间预分配和惰性空间释放两种策略:

二进制安全

3.空间分配策略 3.1空间预分配

C++中数组在进行扩容时,往往会申请一个更大的数组,然后把数组拷贝过去。Redis同样基于这种策略提高了空间预分配机制。

当执行字符串增长操作并且需要扩展内存时,程序不仅仅会给SDS分配必需的空间还会分配额外的未使用空间,其长度存到free属性中。具体如下:

image-20221130031707362

3.2惰性空间释放

惰性空间释放用于字符串缩短的操作。当字符串缩短是,程序并不是立即使用内存重分配来回收缩短出来的字节,而是使用free属性记录起来,并等待将来使用。

image-20221130031932892

3.3为什么SDS的大长度是512M?

Redis字符串使用int类型表示长度,一共有32个比特位。2^32字节=512M

4.SDS面试题

1.SDS如何兼容C语言字符串?如何保证二进制安全?

C99中提到,结构体的最后一个成员如果是一个数组,大小不确定,那么就是一个柔性数组。

SDS对象中的buf是一个柔性数组,上层调用时,SDS直接返回了buf。由于buf是直接指向内容的指针,所以兼容C语言函数。而当真正读取内容时,SDS会通过len来限制读取长度,而非“\0”,所以保证了二进制安全。

2.SDS是如何扩容的?

空间预分配。先判断扩容长度与free的大小关系,如果够就直接拼接字符串,如果不够使用空间预分配的方式扩容。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:【Redis】数据结构---String-创新互联
网站地址:http://mbwzsj.com/article/piocg.html

其他资讯

让你的专属顾问为你服务