Redis| 青训营笔记

43 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
今天来研究一下Redis

Redis的出现

Redis的出现是为了解决在数据量暴增的情况下,Mysql已经进行了分库分表仍然不能够满足数据量和读写压力的问题。

数据的分类

数据可以分成两类:一类是热数据,一类是冷数据。基于“局部性原理”。
大量的访问和调用集中于几个部分。这些集中的部分就是热数据。能够有效提高这些数据的访问效率的话,就能够有效解决海量数据条件下Mysql已经进行分库分表和集群仍然不能满足数据量和读写压力的问题。

Redis基本工作原理

  1. 数据从内存中读写
  2. 数据保存在硬盘中防止热重启导致的数据丢失
    1. 增量数据:保存在AOF文件
    2. 全量数据:保存在RDB文件
  3. 单线程处理所有命令

Redis应用场景

  1. 连续签到事件
  2. 消息通知事件
  3. 计数事件
  4. 排行榜
  5. 限流环境
  6. 分布式锁

1. 连续签到事件设置

采用【key:记录唯一uid,value:记录连续签到次数,:expireAt:记录过期时间】 可采用数据结构:sds

  • sds
    • 可存储:字符串,数字,二进制数据
    • 通常搭配expire
    • 用于存储计数,session
    • 能够保存元信息

2. 消息通知事件设置

可采用数据结构:list

  • list
    • 可作为消息队列使用
    • 由一个双向链表+一个listpack实现
    • listpack“紧凑列表”

3. 计数事件

可采用数据结构:hash

  • hash
    • hash有一个dict部分
    • dict存在rehash的问题
      • 直接rehash在数据量大的环境下会产生阻塞问题
      • 采用渐进式rehash

4. 排行榜

可采用数据结构:zskiplist 可结合dict实现跳表

5. 限流环境

可采用匹配对应的key值,对key调用incr,超过限制则停止访问