redis字符串类型的数据结构如下
struct sds{
//空余字节数
int free=0
//保存的字符串的长度
int len=5
//保存的字符串的字节数组
byte[] buf
}
redis作为缓存数据库要求数据的读写速度快,当redis的字符串增加或者修改时,会对对应的字符串进行内存重分配,与c语言不同的是redis采用了 空间预分配 和 惰性空间释放的两种策略
redis\0 //原来buf存入的字符串, 要变成redisTemplate
//需要给buf分配7个字节保存,此时结构体变化为
struct sds{
//空余字节数
int free=13
//保存的字符串的长度
int len=13
//保存的字符串的字节数组
byte[] buf
}
可以看到此时空余的字节数为13byte,所以此时当redisTemplate -> redisTemplateImpl, 变化之后结构体为
struct sds{
//空余字节数
int free=9
//保存的字符串的长度
int len=17
//保存的字符串的字节数组
byte[] buf
}
这种方式很好的解决了每次更新都需要空间重分配的操作,提高了数据处理速度
此时字符串为redisTemplate
struct sds{
//空余字节数
int free=0
//保存的字符串的长度
int len=13
//保存的字符串的字节数组
byte[] buf
}
当redisTemplate -> redisTemp
struct sds{
//空余字节数
int free=4
//保存的字符串的长度
int len=9
//保存的字符串的字节数组
byte[] buf
}
当redisTemp -> redisT
struct sds{
//空余字节数
int free=7
//保存的字符串的长度
int len=6
//保存的字符串的字节数组
byte[] buf
}
当下次操作再进行添加时,可以使用free的字节数,进行操作
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。