zoukankan      html  css  js  c++  java
  • redis过期键删除策略以及大key删除方法

    今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的

    redisTemplate.expire(CacheConst.GOOGS_PREFIX,1,TimeUnit.MILLISECONDS);

    设置key过期为一毫秒,导致缓存中有时没有商品信息,因为在这一毫秒内有可能已经从数据库中取到了最新数据,并且又放到了缓存中,一毫秒过后key过期了,缓存中就没了商品信息。

    正确的应该这样写redisTemplate.expire(CacheConst.GOOGS_PREFIX,-1,TimeUnit.MILLISECONDS)立马让key过期。

    redis中对于有设置过期的key有三种处理方式

    1. 被动删除:这个key下一次被访问到的时候才会删除。
    2. 主动删除:Redis会定期主动淘汰一批已过期的key
    3. 当前已用内存超过maxmemory限定时,触发主动清理策略

    直接删除大key是有风险的,key过大,直接删除时会导致Redis阻塞,不同类型的大key有不同的删除方式,

    Large Hash Key 可使用hscan命令,每次获取500个字段,再用hdel命令,每次删除1个字段。

    Large Set Key 可使用sscan命令,每次扫描集合中500个元素,再用srem命令每次删除一个键。

    Large List Key可通过ltrim命令每次删除少量元素

    Large Sorted Set Key使用sortedset自带的zremrangebyrank命令,每次删除top 100个元素

  • 相关阅读:
    springcloud 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5
    继承
    封装
    对象的生命周期
    类与对象
    如何理解类?
    面向过程
    jdk1.8新特性
    git使用指南
  • 原文地址:https://www.cnblogs.com/akaneblog/p/6706717.html
Copyright © 2011-2022 走看看