Redis 六 缓存

1、 缓存预热是指系统上线后,将相关的缓存数据直接加载到缓存系统,这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题。
2、 缓存预热的两种实现方式:
    1)数据量不大的时候,工程启动的时候进行加载缓存动作
    2)数据量大的时候,设置一个定时任务脚本,进行缓存的刷新    
3、 缓存穿透:指查询一个缓存中不存在的数据,需要去数据库中获取。如果数据库也查不到结果,将不会写入到缓存,导致这个不存在数据每次请求都要到数据库查询,
    失去了缓存的意义
4、 解决缓存穿透
    1)布隆过滤(Bloom filter)
        将所有查询的参数都存储到一个 bitmap 中,在查询缓存之前,先在每个 bitmap 里面进行验证。如果 bitmap 中存在,则进行底层缓存的数据查询; 
        如果 bitmap 中不存在查询参数,则进行拦截,不再进行缓存的数据查询。
        适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集
    2)缓存空对象
        如果查询返回的数据为空,仍然把这个空结果进行缓存。那么再次用相同 key 获取数据的时候,即使不存在的数据,缓存也可以直接返回空值,避免重复访问 DB。
        把没有数据的缓存结果的过期时间设置为比较短的一个值,比如 3 分钟。
5、 缓存空对象有两个不足之处:
        1)缓存层将存储更多的键值对,如果是恶意的随机访问,将造成很多内存空间的浪费。这个不足之处可以通过将这类数据设置很短的过期时间来控制。
        2)DB 与缓存数据不一致。这种可以考虑通过异步消息来进行数据更新的通知,在一定程度上减少这类不一致的时间。
6、 缓存雪崩:在集中的一段时间内,有大量的缓存失效,导致大量的访问没有命中缓存,从而将所有查询进行数据库访问,导致数据库的压力增大,从而造成了缓存雪崩
7、 解决缓存雪崩
    1)分散失效时间        将热点缓存的失效时间均匀分布。 如说将相同类型的缓存的失效时间设置成一个在一定区间内的随机值
    2)DB 访问限制        对数据的访问进行限流性质的操作。比如说对数据库访问进行加锁的处理或者限流相关的处理。
    3)多级缓存设计        一级缓存为基础缓存,缓存失效时间设置一个较长时间, 二级缓存为应用缓存,失效时间正常设置,一般会比较短。 
                        当二级缓存失效的时候,再从一级缓存里面获取。
    4)使用 Redis 主备,保证缓存系统的高可用
8、Redis 缓存回收策略:
    Redis 可以看作是一个内存数据库,通过 Maxmemory 指令配置 Redis 的数据集使用指定量的内存。设置 Maxmemory 为 0,则表示无限制。
    当内存使用达到 Maxmemory 极限时,需要使用某种淘汰策略来决定清理哪些数据,以保证新数据的存入。
    noeviction:        禁止淘汰数据,当内存使用达到上限,所有需要申请内存的命令都会异常报错
    allkeys-lru:        尝试回收最近最少使用的键
    volatile-lru:        尝试回收最少使用的键,但仅限于在过期集合的键
    allkeys-random:    随机回收一个键
    volatile-random:    随机回收一个键,但仅限于在过期集合的键
    volatile-ttl:        回收在过期集合的键,并且优先回收存活时间较短的键
9、Redis 缓存失效策略
    1)定时删除策略        在设置 key 的过期时间时,为 key 创建一个定时器,让定时器在 key 的过期时间来临时对 key 进行删除
        优点:保证内存尽快释放
        缺点:若 key 过多,删除这些 key 会占用很多 CPU 时间, 而且每个 key 创建一个定时器,性能影响严重
    2)    惰性删除策略    key 过期的时候不删除,每次从数据库获取 key 的时候去检查是否过期,若过期则删除,返回 null
        优点:CPU 时间占用比较少
        缺点:若 key 很长时间没有被获取,将不会被删除,可能造成内存泄漏
    3)定期删除策略     每隔一段时间执行一次删除(在 redis.conf 配置文件设置 hz,1s 刷新的频率)过期的 key 
        优点:可以控制删除操作的时长和频率,来减少 CPU 时间占用,可以避免惰性删除时候内存泄漏的问题
        缺点:对内存友好方面,不如定时策略;对 CPU 友好方面,不如惰性策略
    Redis 一般采用:惰性策略 + 定期策略两个相结合。
10、缓存的更新策略:
    1)先更新数据库,再更新缓存
    2)先更新数据库,再删除缓存
    3)先删除缓存,再更新数据库
11、保证 Redis 的数据一致性的方法:
    1)合理设置缓存的过期时间
    2)新增、更改、删除数据库操作时同步更新 Redis
    3)可以使用事务机制来保证数据的一致性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值