redis基本知识
来源:互联网 发布:mysql 查看版本号 编辑:程序博客网 时间:2024/06/03 23:03
SDS字符串的优点:
- 杜绝缓冲区溢出
在C语言中,新增字符串都会假设存储的长度能足够的容纳新增的字符串,然而新增长度一旦超过了存储的长度,就会存在缓冲区溢出,使得新增的字符串被截取,导致新增字符串内容丢失。 - 减少修改字符串时带来的内存重分配次数
C语言中,字符串本身并不记录自身的长度,而字符串的底层实现总是一个N+1的字符串长度,所以在每次新增和缩短一个字符串时,都需要对内存重新分配。而SDS字符串本身用len属性记录了字符串的长度,在新增时,会预留存储字符串那么大的空间,下次新增时先判断预留的空间是否能够容纳新增字符串,能够新增则直接新增,不能够容纳则为其分配,而删除字符串时,删除的空间先通过SDS字符中的free属性保存,留于新增操作运用。SDS通过未使用空间,实现了空间预分配和惰性空间释放两种优化策略。
1. ## 空间预分配 ##
它主要是用于优化SDS字符串增长操作:当SDS进行修改,并且需要对SDS空间进行扩展的时候,程序不但会对SDS分配修改所需要的空间,并会对SDS分配额外的未使用的空间。
分配的原则:
- 分配SDS长度小于1MB:程序会分配和未使用空间相同大小的空间,即len和free的值相同。如:修改后SDS的len将变为13字节,那么程序则会分配13个字节,SDS的buf数组实际长度为13+13+1=27(1为结束’\0’)
分配SDS长度大于1MB:程序会分配1MB的未使用空间,即free为1MB。如修改后SDS长度为30MB,则SDS长度为30MB+1MB+1byte。
2. ## 惰性空间释放 ##
它主要是运用于优化SDS字符串缩短操作:SDS要缩短保存SDS时,程序并不立刻使用内存重新分配要回收缩短后多出来的字节空间,而是使用free属性将这些数量记录起来,等待将来使用。
阅读全文
0 0
- redis基本知识
- Redis基本知识(一)
- Redis基本知识(二)
- Redis相关基本知识
- Redis的基本知识梳理
- jedis操作redis的基本知识
- Redis学习01-Redis安装与基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- QuickReport基本知识
- Oracle 基本知识
- Oracle 基本知识
- Ubuntu17.10配置JDK
- python列表介绍list
- 基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts
- drawerLayout的侧拉监听事件
- 15-EMM Procedure 5. Periodic TAU
- redis基本知识
- Laravel创建数据库表结构
- Mapreduce的性能调优
- POJ3278 Catch That Cow题解 广度优先搜索+限定解空间
- [绍棠] ReactNative : ignoring return value of function declared with warn_unused_result attribute
- mysql(6)-mycat中间件
- 16-EMM Procedure 6. Handover without TAU
- Linux Oracle服务启动&停止脚本与开机自启动
- Tensorflow实战学习(二十五)【自编码器】