Day 35 深入理解Redis基本数据类型
string 字符串
string表示的是一个可变的字符串,无需指定长度,在初始化之后即可拿到该字符串的长度
内存方面:内存不足时会提前扩容,小于1M时,成倍扩容;大于1M时,每次只扩容1M,但最大长度时512M

底层实现:主要是SDS(简单动态字符串),可以保存文本数据和二进制数据
使用len属性保存字符串长度,所以获取字符串的时间复杂度是O(1)
SDS API是安全的,拼接前会检查内存控件,不够时会扩容,不会造成缓冲区溢出

string支持3种编码方式:int、raw、embstr
存储的值如果是可以转化为long类型的整数,该值会被存储在对象结构的prt属性,并将该对象设为int编码
存储的值如果是字符串,且长度小于32bit会使用SDS来保存该字符串,并将编码设置为embstr;若长度大于32bit,编码设置为raw(redis2.+ => 32bit; redis3.0-4.0 => 39bit;redis5.0 = > 44bit)
embstr使用一次内存分配函数分配一块连续的内存控件来保存redisObject和SDS
raw使用两次内存分配函数来分配两块内存空间来保存redisObject和SDS

常用指令
set key value 初始化字符串
get key 获取字符串内容
strlen key 获取字符串长度
getrange key startIndex endIndex 获取字串内容
setrange key startIndex value 覆盖字串,返回长度
append key value 追加字符串,返回len
expire key 60 设置过期时间,单位:秒,返回1表示设置成功,0表示key不存在
del key 删除字符串,成功返回1,
ttl key 查询过期时间,返回-2,key不存在;返回-1,没有设置过期时间
展开
评论