redis-String
String
简单介绍
String是像java arrayList采用的是预分配冗余空间的方式来减少内存的频繁分配,每次扩容接近翻一倍.
String 的最大值为512m.
特点:
可以支持批量操作
支持过期时间的设置
支持自增操作(最大值为sign long超过会报错)
批量键值对:
set name value
set name value
mget name1 name2 返回一个列表
expire name1 5 指定5s后过期
set num 50
incrby num 5
深入String原理
注意: 创建字符串串的时候capacity和len是一样的大写,默认不会给冗余空间,因为绝大多数场景不会使用append来修改字符串.
结构:正常字符串为字符数组结构,但是redis是维护一个成为sds的数据结构.好处就不用遍历算字符串的长度.
struct SDS<T> {
T capacity; // 数组容量
T len; // 数组长度
byte flags; // 特殊标识位,不理睬它
byte[] content; // 数组内容
}
存储结构 embstr 和 raw
介绍: 长度小于44字节,则编码格式为embstr,超过44则raw.
特点: embstr 只会进行一次内存分配(连续的内存空间),分别分配redisObjec结构和sdshdr结构表示字符串对象,而raw是两次
注意: 边界有改变,3.0及以前版本是以39字节为界限的,3.2版本以后则为44字节为界限;2.8版本不会REIDS_ENCODING_EMBSTR_SIZE_LIMIT比较,而是直接创建raw.
具体分析: https://blog.csdn.net/XiyouLinux_Kangyijie/article/details/78045385
官方文档:http://redisbook.com/preview/object/string.html
老钱:https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5b5af9d96fb9a04f83465ada
扩容:
小于1m加倍扩容,大于1m则只扩容1m.
网友评论