后端day16-Redis | 青训营笔记

71 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 16 天

一、本堂课重点内容

本节课程主要分为三个方面:

  1. Redis基本工作原理
  2. Redis应用案例
  3. 使用Redis的注意事项

二、详细知识点介绍

1 Redis基本工作原理
  • 为什么需要Redis
    • 数据从单表演进出了分库分表,MySQL从单机演进出了集群,数据量增长,读写数据的压力增加。
    • 数据分冷热:热数据为经常被访问的数据,存储到内存中,加快读取速度。
  • 数据持久化原理
    • 增量数据保存到AOF文件。
    • 全量数据RDB文件。
  • 单线程处理命令
2 Redis应用案例
  • 连续签到

    • key:用户id
    • value:连续签到天数
    • expireAt:设置过期时间为后天0点,实现如果第二天没有签到就过期的功能
  • String数据结构

    • 可以存储字符串、数字、二进制数据。
    • 通常和expire配合使用
    • 场景:存储技术、session
  • 消息通知

    • 用list作为消息队列。
    • list数据结构quicklist:由双向链表和listpack实现。
  • 计数

    • 用户的计数需求可以通过hash结构存储。

    • hash数据结构dict:rehash、渐进式rehash。

  • 排行榜:实现积分变化时排名实时变更的功能

    • 使用zest:首先它是一个 set,这保证了内部 value 值的唯一性,其次它给每个 value 添加了一个 score(分值)属性,通过对分值的排序实现了有序化。
    • zest数据结构zskiplist:跳表。
  • 限流:要求1秒内放行的请求为N,超过N则禁止访问

    • key:limit值
    • 对key调用incr,超过限制N则禁止访问。
  • 分布式锁

    • 并发场景中要求一次只能有一个协程执行,使用redis的setnx实现。
    • 利用的特性
      • redis是单线程执行命令。
      • setnx只有未设置过才能执行成功。
3 使用Redis的注意事项
  • 大Key、热Key

    • 大Key的定义:字节数大于一定值。
    • 大Key的危害:
      • 读取成本高。

      • 容易导致慢查询。

      • 主从复制异常,服务阻塞,无法正常响应请求。

    • 消除大Key的方法:
      • 将大Key拆分为小Key。

      • 压缩value。

    • 热Key的定义:访问这个Key的QPS较高。
    • 消除热Key的方法:
      • 设置Localcache。
      • 将一个热Key复制写入多份,更新时需要更新多个Key。
  • 避免慢查询场景

  • 缓存穿透、缓存雪崩

    • 缓存穿透:热点数据查询绕过缓存,直接查询数据库。
    • 缓存雪崩:大量缓存同时过期。
    • 避免缓存穿透:
      • 缓存空值。
      • bloom filter算法。
    • 避免缓存雪崩:
      • 缓存空值。
      • 使用缓存集群,避免单机宕机造成的缓存雪崩。