Redis 详解 - 缓存雪崩 |击穿 |穿透 概念及解决方案
Redis是一个开源的内存数据存储系统,也被称为数据结构服务器,其提供了一些常用的数据结构,如字符串、列表、集合、哈希、有序集合等,同时也支持事务、Lua脚本、LRU驱动事件、pub/sub、持久化等功能。
Redis的缓存功能是其非常重要的应用场景之一。Redis作为一款高速缓存服务器,可以存储多种类型的数据结构,通常用于缓存频繁访问的数据,以减轻数据库的压力。
Redis的缓存使用可以通过以下几个方面来详细介绍:
一、缓存
1.雪崩
-
概念
指某一时间段,缓存集中过期失效,无数的请求绕开缓存,直接访问数据库。 -
解决方案
-
让redis数据永不过期,这种方式最可靠的、最安全的,但占用空间,内存消耗大,并且不能保持数据最新,所以需要根据具体的业务考虑
-
将缓存失效的时间分散开,比如每个key的过期时间都是随机的,防止同一时间大量数据过期的现象发生,就不会出现同一时间全部请求都访问数据库
-
可以启动服务熔断机制,暂停业务应用对缓存服务的访问,直接返回错误,但是暂停了业务应用访问缓存系统,其它的业务都无法正常的工作
-
创造redis集群,对数据库进行读写分离
2.击穿
-
概念
大并发集中对一个点进行访问,当这个点失效瞬间,大并发穿透缓存直接访问数据库。 -
解决方案
- 互斥锁,保证同一时间只有一个业务线程更新缓存,未能获取互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值
- 不给热点数据设置过期时间,由后台异步更新缓存,或者在热点数据准备要过期前,提前通知后台线程更新缓存以及重新设置过期时间
3.穿透
- 概念
数据库和缓存中都没有一条数据,持续查询数据库,使数据库的访问压力过大
2.解决方案
- 接口层添加校验,如用户鉴权校验;id做基础校验,指定接口的请求方式,只接受 一种或几种 的请求方式
- 不仅在缓存取不到的数据,而且在数据库中也没有取到,这时可以将key-value写成key-null,缓存有效时间可以设置30秒(设置太长对导致正常情况下也无法使用),这样可以防止攻击用户反复用同一个id暴力攻击
- 布隆过滤器
本文来自博客园,作者:手可敲星辰脚驾七彩云,转载请注明原文链接:https://www.cnblogs.com/arek/p/16580042.html,谢谢!