前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 动态字符串数据结构

Redis 动态字符串数据结构

原创
作者头像
用户9347382
发布2022-03-04 15:06:09
3210
发布2022-03-04 15:06:09
举报
文章被收录于专栏:程序员阿杰

redis字符串类型的数据结构如下

代码语言:javascript
复制
struct sds{
    //空余字节数
    int free=0
    //保存的字符串的长度
    int len=5
    //保存的字符串的字节数组
    byte[] buf
}

redis作为缓存数据库要求数据的读写速度快,当redis的字符串增加或者修改时,会对对应的字符串进行内存重分配,与c语言不同的是redis采用了 空间预分配 和 惰性空间释放的两种策略

当sds中的字符串的长度增加时,字符串增加了字符

代码语言:javascript
复制
redis\0 //原来buf存入的字符串, 要变成redisTemplate
//需要给buf分配7个字节保存,此时结构体变化为
struct sds{
    //空余字节数
    int free=13
    //保存的字符串的长度
    int len=13
    //保存的字符串的字节数组
    byte[] buf
}

可以看到此时空余的字节数为13byte,所以此时当redisTemplate -> redisTemplateImpl, 变化之后结构体为

代码语言:javascript
复制
struct sds{
    //空余字节数
    int free=9
    //保存的字符串的长度
    int len=17
    //保存的字符串的字节数组
    byte[] buf
}

这种方式很好的解决了每次更新都需要空间重分配的操作,提高了数据处理速度

当空间减少时,字符串执行减少字符的操作

此时字符串为redisTemplate

代码语言:javascript
复制
struct sds{
    //空余字节数
    int free=0
    //保存的字符串的长度
    int len=13
    //保存的字符串的字节数组
    byte[] buf
}

当redisTemplate -> redisTemp

代码语言:javascript
复制
struct sds{
    //空余字节数
    int free=4
    //保存的字符串的长度
    int len=9
    //保存的字符串的字节数组
    byte[] buf
}

当redisTemp -> redisT

代码语言:javascript
复制
struct sds{
    //空余字节数
    int free=7
    //保存的字符串的长度
    int len=6
    //保存的字符串的字节数组
    byte[] buf
}

当下次操作再进行添加时,可以使用free的字节数,进行操作

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 当sds中的字符串的长度增加时,字符串增加了字符
  • 当空间减少时,字符串执行减少字符的操作
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档