【redis相关】
文章目录
- redis相关
- 一、什么是 Redis?
- 二、缓存
- 1.缓存穿透
- (1)缓存空值
- (2)布隆过滤器
redis相关
一、什么是 Redis?
Redis(Remote Dictionary Server)是一个开源的、基于内存的、支持多种数据结构的 Key-Value 存储系统。它可以用作数据库、缓存、消息队列等。
🚀 速度快,是 Redis 最大的特点!因为它将所有数据存储在内存中。
二、缓存
1.缓存穿透
就是指请求的数据既不在缓存里,也不在数据库里,但请求依然不停地打到数据库上,导致数据库压力剧增,甚至可能崩溃。
恶意攻击:通常表现为攻击者频繁请求大量不存在的 key,导致请求绕过缓存,直接打到数据库,造成数据库压力剧增,甚至宕机。
解决方式
(1)缓存空值
查询数据库返回的数据为空时,仍把这个空结果进行缓存。
优点:实现简单。
缺点:空值也会占用 Redis 内存,若缓存大量无效数据,会浪费缓存资源。
(2)布隆过滤器
优点:内存占用较少。
缺点:实现复杂,存在误判(误判率可设置,误判率在5%及以下可接受)。
原理:
- 相当于是一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或1。
- 在 Redis 缓存预热时,会先把缓存中的有效数据通过多个哈希函数映射到布隆过滤器的位数组上,将对应的索引位置置为 1。当有请求进来时,会用相同的哈希函数计算该数据对应的索引位置。若索引位置都为1,则说明数据“可能存在”,有一定误判的可能,但只要有一个索引位置是 0,就可以确定该数据一定不存在,直接返回,避免无效请求打到数据库。
- 误判率:数组越大、哈希函数数量合理、插入元素越少,误判率就越低。误判率可以设置,大概不会超过5%,5%以内的误判率一般都项目也能接受,不至于高并发压倒数据库。