Redis 详解 - 缓存雪崩 |击穿 |穿透 概念及解决方案

Redis是一个开源的内存数据存储系统,也被称为数据结构服务器,其提供了一些常用的数据结构,如字符串、列表、集合、哈希、有序集合等,同时也支持事务、Lua脚本、LRU驱动事件、pub/sub、持久化等功能。

Redis的缓存功能是其非常重要的应用场景之一。Redis作为一款高速缓存服务器,可以存储多种类型的数据结构,通常用于缓存频繁访问的数据,以减轻数据库的压力。

Redis的缓存使用可以通过以下几个方面来详细介绍:

一、缓存

1.雪崩
  1. 概念
     指某一时间段,缓存集中过期失效,无数的请求绕开缓存,直接访问数据库。

  2. 解决方案

  • 让redis数据永不过期,这种方式最可靠的、最安全的,但占用空间,内存消耗大,并且不能保持数据最新,所以需要根据具体的业务考虑

  • 将缓存失效的时间分散开,比如每个key的过期时间都是随机的,防止同一时间大量数据过期的现象发生,就不会出现同一时间全部请求都访问数据库

  • 可以启动服务熔断机制,暂停业务应用对缓存服务的访问,直接返回错误,但是暂停了业务应用访问缓存系统,其它的业务都无法正常的工作

  • 创造redis集群,对数据库进行读写分离

2.击穿
  1. 概念
     大并发集中对一个点进行访问,当这个点失效瞬间,大并发穿透缓存直接访问数据库。

  2. 解决方案

  • 互斥锁,保证同一时间只有一个业务线程更新缓存,未能获取互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值
  • 不给热点数据设置过期时间,由后台异步更新缓存,或者在热点数据准备要过期前,提前通知后台线程更新缓存以及重新设置过期时间

3.穿透

  1. 概念
     数据库和缓存中都没有一条数据,持续查询数据库,使数据库的访问压力过大

2.解决方案

  • 接口层添加校验,如用户鉴权校验;id做基础校验,指定接口的请求方式,只接受 一种或几种 的请求方式
  • 不仅在缓存取不到的数据,而且在数据库中也没有取到,这时可以将key-value写成key-null,缓存有效时间可以设置30秒(设置太长对导致正常情况下也无法使用),这样可以防止攻击用户反复用同一个id暴力攻击
  • 布隆过滤器
posted @ 2022-08-12 17:33  手可敲星辰脚驾七彩云  阅读(26)  评论(0编辑  收藏  举报