Redis关键场景速览

91 阅读2分钟

REDIS场景

实际的REDIS做过哪些应用?

  • 首先REDIS一般做短平快的热点数据处理,所以做过缓存,做过REDIS分步锁

REDIS缓存是如何应用的?

一般做旁路缓存,比如说接口调用项目中查询ACCESS-KEY 和SCRESS-KEY 先查询REDIS ,没有查找再查询MYSQL,更新数据的时候,直接更新MYSQL,删除REDIS或者不删,当下次查询的时候再更新缓存。适用于读多写少的情况,比如用户配置或者用户信息

REDIS缓存有几种模式?

  • 旁路缓存:先查询缓存,没查到,去查询数据库,更新直接更新MYSQL,删除REDIS,当查询的时候再加载进缓存,适合读多写少
  • 读穿透,将NOSQL和MYSQL封装成一起,对调用方透明
  • 写穿透/异步写穿透

REDIS做旁路缓存,如果MYSQL更新了,此时何去何从?

  • 首先缓存中的数据都使用过期时间兜底
  • 为了保证一致性,删除缓存,调研了一些腾讯云团队,他们甚不删
  • 考虑过使用订阅模式,当需要额外引入消息队列,消息服务,成本高。

消息队列是什么?

具有先入先出队特性的传递消息的队列,主要作用:异步流程、流量削峰、消息分发

REDIS做消息队列的三种方法

  • List做消息队列,RPUSH队尾入队列。BRPOP阻塞队头出队列
  • SUBSCRIBE PUBLISH
  • STREAM

REDIS如何做并发锁?

  • 分布式锁的四大特性

    • 互斥性
    • 对称性
    • 安全原子性
    • 可靠性
  • 如何实现分布式锁

    • 最简单的命令:set key value nx ex seconds确保互斥性
    • 加上owner【防止A释放B的锁】确保对称性
    • lua确保原子性
    • 主从容灾+多级部署(REDLOCK多个同时加锁,一半以上同意)

缓存穿透是什么?

  • 场景描述:攻击者用不存在数据反复攻击,缓存穿透指数据既不在缓存中,也不在数据库中
  • 解决办法:回写特殊值【在缓存中标记这种数据】、布隆过滤器、限流

缓存击穿是什么?

  • 场景描述:数据不在缓存中,在数据库中
  • 解决办法:延长热点数据过期时间、分布式锁缓解数据库压力、异步更新缓存

缓存雪崩是什么?

  • 场景描述:大量REDIS过期或者REDIS过期
  • 解决办法:和缓存击穿类似