概述
了解string数据结构,还是非常有必要的.谈到数据结构就必须要谈两个问题,一个是时间复杂度,一个是空间.redis作为缓存,一个涉及访问速度,一个涉及占用内存空间,对于redis来说还是非常敏感的.
数据结构图
redis整体结构图
entry结构图
1.从redis整体结构图来看,只要是个全局key,意味着都会占用一个全局hash表元素
2.从entry结构图来看,entry默认就要分配key,value,next24字节的指针本省消耗
分配数量是2的幂次方,会分配32字节
3. 只要是属于全局key,那么就要占用一个entry,就要多分配出32字节(不适合数据数据多场景)
4.不管是string类型,还是hash,set,list,sorted,都是一个RedisObject类型,不同的是
string类型,在ptr指针指向的数据结构不一样,string数据结构是SDS(simple dynamic string)
5.string可以存储整数,小于44短字符串,大于44长度字符串,SDS分别采用int embstr,raw编码方式,
这样带来的效果也不一样,可以对空间做进一步优化
使用场景
1.string适合于单个或者少数健值对的缓存场景,数据条数多不建议使用string,因为单entry
每次就要消耗32字节,这种情况可以考虑集合类型
2.计数器场景,可以记录一些博客点赞,评论,阅读数这些
3.限速器场景,短信,邮件发送频率
4.分布式ID生成,在分库分表场景下
5.session共享的场景下,解决单点登录问题