高并发
多机的时候,虽然有失效时间,但还是会有短时间内缓存和数据库数据不一致(读操作不需要特殊操作),
更新操作的时候
先删除缓存,再更新数据库
先更新数据库,再删除缓存
原子性破坏,增加队列重试
先删除缓存,再更新数据库
在高并发下表现不如意,在原子性被破坏时表现优异
先更新数据库,再删除缓存(Cache Aside Pattern设计模式)
在高并发下表现优异,在原子性被破坏时表现不如意
雪崩
大量key同时失效,或者缓存层崩了
1.多机负载,哨兵监控,限流降级,同一个线程对同一个key
2. 给每个key的过期时间加随机数,尽量设置把过期时间设置的均匀一些
3.缓存持久化,宕机之后重启并快速从磁盘恢复
穿透
不断地访问数据库不存在的值,空值因为不存缓存,就会一直访问数据库。
1.数据库返回为空,也放入缓存,并设置短过期时间,下次再访问就返回空。
2.布隆过滤器,不合法的提前拦截
持久化
RDB和AOF的优缺点
RDB优点:全量数据快照,文件小,恢复快
RDB缺点:无法保存最近一次快照之后的数据,数据量大会由于I/O严重影响性能
AOF优点:可读性搞,适合保存增量数据,数据不一丢失
AOF缺点:文件体积大,恢复时间长