• redis读取自增时候指定的key问题


    首先,此文章是接了如下文章写的

    Spring boot redis自增编号控制 踩坑

    上面这个问题解决后,公司这边功能其实已经实现了,但是考虑到一种情况,因为我们这边号的生成就是根据上面的自增编号来的,而redis里的自增编号是可以设置过期时间的,我这边设置的过期时间是根据客户的营业时间来换算获取的,

    而当中碰到一个问题,因为考虑到客户营业时间是由客户自己维护的,所以不得不考虑当他们在同一天里面,刚开始设置的是一个上午的,后来在过期时间已经到了,redis中的计时器已经被自动清除的情况下,所以我这边再做一个计数器,

    但是它的期限是无限期。当有限计时器过期导致这边数据找不到的时候,则从无限计时器去过来数据,并把它的值作为增量保存回到有限计时器中。而当中碰到一个问题:

    代码1:

     1 /**
     2      * 读取缓存
     3      *
     4      * @param key
     5      * @return
     6      */
     7     public Object get(final String key) {
     8         Object result = null;
     9         ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
    10         result = operations.get(key);
    11         return result;
    12     }

    代码2:

     1 /**
     2      * redis 自增
     3      * @param key
     4      * @param liveTime 毫秒数 这个计数器的有效存留时间
     5      * @param delta 自增量
     6      * @return
     7      */
     8     public Long incr(String key, long liveTime, long delta) {
     9         RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
    10         Long increment = entityIdCounter.addAndGet(delta);
    11 
    12         if ((null == increment || increment.longValue() == 0) && liveTime > 0) {//初始设置过期时间
    13             entityIdCounter.expire(liveTime, TimeUnit.MILLISECONDS);
    14         }
    15 
    16         return increment;
    17     }

    我通过代码1,去获取代码2生成的数据,结果发现不管怎么获取,都是null

    必须要使用如下代码才能获取到值,尴尬呀!!!

    RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
    entityIdCounter.get();
  • 相关阅读:
    Linux 命令ln
    基于ifix组态软件研究控制按钮权限
    Linux sar 性能监控命令
    使用Oracle执行计划分析SQL性能
    谈谈解决问题的思路
    MySQL技术内幕:InnoDB存储引擎 pdf下载
    算法笔记 pdf下载
    Python最佳代码实践:性能、内存和可用性!
    利用Python进行数据分析 pdf下载
    主流 NoSQL 数据库常见应用场景详解
  • 原文地址:https://www.cnblogs.com/Grace-is-enough/p/9235534.html
Copyright © 2020-2023  润新知