文章目录
Redis基础应用
用途:缓存、分布式锁
字典hash
- 1.记录帖子点赞数、评论数、点击数、
- 2.记录帖子的标题、摘要、作者、封面、展示列表
- 3.缓存近期热评内容、减少数据库压力
列表list
- 根据帖子id记录相关帖子
跳跃列表zset
- 1.根据用户id记录帖子列表
- 2.记录帖子点赞、评论用户id列表
- 3.收藏
- 4.记录热门帖子列表、总热榜、分类榜
- 5.缓存用户历史行为,过滤恶意行为
计数器
- 记录整数自增
5种基本数据结构
String(字符串)
- 特点:类似于 键值对 的存储,字符串分配空间 > 存储空间;字符串长度< 1MB ,翻倍扩容, 字符串长度 > 1MB,扩容只加1MB,最大为 512MB
- 用途:缓存用户信息
List(列表)
- 特点:相当于java 里面的LinkList
- 优点:插入删除较快,但遍历查询慢 时间复杂度 O( n )
- 右进左出:队列
- 右进右出:栈
- 慢操作:相当于链表的 get ( i ),只能处理较少数进行遍历
- 快速列表: quicklist
优点:快速 插入、删除,又不好出现太大的空间冗余。
对比其他链表:普通链表需要附加指针空间(如:prev、next)会浪费太多空间,加重内存的碎片化。
快速列表 = 链表 + ziplist :多个ziplist 结合形成链表–>quicklist
ziplist:压缩列表。一块连续存储的内存存储,所有元素彼此紧挨着一起存储
hash(字典)
- 特点:类似HashMap的无序字典,结构上都是 数组 + 链表 的二维结构
- Redis字典和 JAVA中HashMap区别:JAVA中 rehash 时是一次性区别rehash;而Redis中 是采用渐进式rehash策略:旧hash–>新hash。
渐进式rehash策略:保留新旧两个hash结构,查询时会同时查询两个hash结构,在后续的定时任务及hash操作指令中,循序渐进将旧hash内容迁移到新hash,直到迁徙完成,新hash完全取代。
什么时候ReHash - 缺点:存储消耗高于单个字符串。