redis都有哪些数据类型

String hash list set sorted set

String是最简单的类型,就是普通的set和get,做简单的KV缓存

hash类似map的一种结构,这个一般就是可以将将结构化的数据,比如一个对象给缓存在Redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段

list有序列表,存储列表型的数据结构,类似粉丝列表,文章评论列表

set是无序集合,自动去重。直接基于set将系统里需要去重的数据扔进去就给去重

sorted set 是排序的set 去重但可以排序,写进去的时候给一个分数自动根据分数排序

缓存雪崩
对于系统A,假设每天高峰期每秒5000个请求,本来缓存在高峰期可以抗住每秒4000个请求,但是缓存机器意外发生了宕机,缓存挂了,请求全部落入数据库,必然扛不住报警。此时,如果没采取什么方案处理故障,数据库会被新的流量打死。

file

解决方案

Redis高可用 主从+哨兵 本地缓存+限流降级 Redis持久化

缓存穿透

对于系统A假设一秒5000个请求,其中4000个请求是黑客发出的恶意攻击。
黑客发出的4000个攻击,缓存中查不到去库里查也查不到数据库id从1开始的,黑客发过来的id是负数,缓存中不会有请求视缓存于无物,查询数据库这种恶意攻击场景的缓存穿透就会直接把数据库打死的。

解决方案

写一个空值到缓存里去,设置过期时间。布隆过滤器

缓存击穿

某个key非常热点,访问非常频繁处于集中式高并发访问的情况,当这个key在失效的瞬间大量的请求击穿了缓存直接请求数据库,就像是在一道屏障上凿开了一个洞。

解决方式

可以将热点数据设置为永远不过期;或者基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。


Starzhang
50 声望4 粉丝