目录
String | list | hash | set | zset | |
应用场景 | 存储key-value键值对 | 朋友圈点赞列表评论列表、消息队列 | 购物车、存储对象 | 好友/粉丝/关注的集合、首页随机展示 | 排行榜、存学生成绩 |
Redis基础数据结构有哪些?
一、String(字符串)
在任何一种编程语言里,字符串 String 都是最基础的数据结构, 那你有想过 Redis 中存储一个字符串都进行了哪些操作嘛?
在 Redis 中 String 是可以修改的,称为 动态字符串 ( Simple Dynamic String 简称 SDS )( 快拿小本本记名词,要考的 ),说是字符串但它的内部结构更像是一个 ArrayList ,内部维护着一个字节数组,并且在其内部预分配了一定的空间,以减少内存的频繁分配。
Redis 的内存分配机制是这样:
-
当字符串的长度小于 1MB时,每次扩容都是加倍现有的空间。
-
如果字符串长度超过 1MB时,每次扩容时只会扩展 1MB 的空间。
这样既保证了内存空间够用,还不至于造成内存的浪费, 字符串最大长度为 512MB . 。
image.png
上图就是字符串的基本结构,其中 content 里面保存的是字符串内容, 0x\0 作为结束字符不会被计算 len 中。
分析一下字符串的数据结构
struct SDS{
T capacity; //数组容量
T len; //实际长度
byte flages; //标志位,低三位表示类型
byte[] content; //数组内容
}
capacity 和 len 两个属性都是泛型,为什么不直接用 int类型 ?因为 Redis 内部有很多优化方案,为更合理的使用内存,不同长度的字符串采用不同的数据类型表示,且在创建字符串的时候 len 会和 capacity 一样大,不产生冗余的空间,所以 String 值可以是字符串、数字(整数、浮点数) 或者 二进制。
1、应用场景:
存储key-value键值对,这个比较简单不细说了