redis都有哪些数据类型
String hash list set sorted set
String是最简单的类型,就是普通的set和get,做简单的KV缓存
hash类似map的一种结构,这个一般就是可以将将结构化的数据,比如一个对象给缓存在Redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段
list有序列表,存储列表型的数据结构,类似粉丝列表,文章评论列表
set是无序集合,自动去重。直接基于set将系统里需要去重的数据扔进去就给去重
sorted set 是排序的set 去重但可以排序,写进去的时候给一个分数自动根据分数排序
缓存雪崩
对于系统A,假设每天高峰期每秒5000个请求,本来缓存在高峰期可以抗住每秒4000个请求,但是缓存机器意外发生了宕机,缓存挂了,请求全部落入数据库,必然扛不住报警。此时,如果没采取什么方案处理故障,数据库会被新的流量打死。
解决方案
Redis高可用 主从+哨兵 本地缓存+限流降级 Redis持久化
缓存穿透
对于系统A假设一秒5000个请求,其中4000个请求是黑客发出的恶意攻击。
黑客发出的4000个攻击,缓存中查不到去库里查也查不到数据库id从1开始的,黑客发过来的id是负数,缓存中不会有请求视缓存于无物,