一、redis的数据类型
String
list
hash
set
sortedSet
二、redis的穿透
key对应的数据在数据库中不存在。每次针对此key的请求从缓存获取不到。请求都会到数据库,从而可能击垮数据库。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有
处理方式:
1、布隆过滤器
2、缓存空对象:当数据查询时,未查询到值时候返回一个空值并存到缓存中,设置一个较短的过期时间,之后访问数据将会从缓存中获取。从而不去数据库获取。
三、redis的击穿
key对应的数据库中存在,但是在redis中过期了,此时若有大量并发请求过来,这些请求发现缓存数据过期了,则会从数据库加载数据并且回设到缓存,这个时候并发的请求可能会将数据库击穿
处理方式:
1、设置key永久不失效
四、redis的雪崩
当缓存服务器大量缓存集中在某个时间失效,这样失效的时候,会对后端带来很大压力,导致redis雪崩
处理方式:
1、设置key永久不失效
2、设置key缓存失效时间尽可能错开
五、redis过期删除策略
1、定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量
2、惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存
六、redis回收使用算法
LRU算法
七、redis为何引入
- 提高性能
- 处理重复请求
读少:不引入redis
读多:适当引入redis