ERR invalid expire time in setex


异常背景

  • 通过有效期的截止时间减去当前时间获取缓存生效时间
  • long seconds = bo.getEndTime().getTime() - System.currentTimeMillis();
  • 在存储生效时间时,对时间Long进行强制转换时 (int)seconds发生异常

异常原因

  • 异常信息

    redis.clients.jedis.exceptions.JedisDataException: ERR invalid expire time in setex
    at redis.clients.jedis.Protocol.processError(Protocol.java:115) ~[jedis-2.6.1.jar:na]
    at redis.clients.jedis.Protocol.process(Protocol.java:141) ~[jedis-2.6.1.jar:na]
    at redis.clients.jedis.Protocol.read(Protocol.java:196) ~[jedis-2.6.1.jar:na]
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:283) ~[jedis-2.6.1.jar:na]
    at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:182) ~[jedis-2.6.1.jar:na]
    at redis.clients.jedis.Jedis.setex(Jedis.java:422) ~[jedis-2.6.1.jar:na]

  • 异常分析

    • 数值类型强制转换发生溢出,缓存失效时间为负数

      bo.getEndTime().getTime() - System.currentTimeMillis();
      // 得到 long 型数据 2169331921L
      // 再将 long 转 int 时,使用 (int) seconds 发生溢出 -2125635375
      long seconds = 2169331921L;
      System.out.println((int) seconds);
      //  -2125635375
      
    • Redis 失效时间赋值源码1

      //如果定义了key的过期时间
      if (expire) {//从expire对象中取出值,保存在milliseconds中,如果出错发送默认的信息给clientif (getLongLongFromObjectOrReply(c, expire, &milliseconds, NULL) != C_OK)return;// 如果过期时间小于等于0,则发送错误信息给clientif (milliseconds <= 0) {addReplyErrorFormat(c,"invalid expire time in %s",c->cmd->name);return;}//如果unit的单位是秒,则需要转换为毫秒保存if (unit == UNIT_SECONDS) milliseconds *= 1000;
      }
      
    • 缓存失效时间小于0时,抛出异常

      • 失效时间 < 0 ,-1L

  1. Redis源码剖析和注释(九)— 字符串命令的实现(t_string) ↩︎

ERR invalid expire time in setex相关推荐

  1. nested exception is io.lettuce.core.RedisCommandExecutionException: ERR invalid expire time in setex

    线上时不时会报出类似的报错,看代码以为key为空取值问题,结果本地调试后发现并不是,于是通过打印详细报错找到了大概方向. 错误信息: Error in execution; nested except ...

  2. 阿里云 Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR invalid password

    如果你是买的阿里云的redis服务的话,不要被这个ERR invalid password所迷惑了. 你应该去检查一下你买的服务有没有设置白名单. 像mysql和mongodb的服务如果连不上的话也可 ...

  3. Vue项目 报错TypeError [ERR INVALID ARG TYPE]: The “path“ argument must be of type string

    # Vue项目 报错TypeError [ERR INVALID ARG TYPE]: The "path" argument must be of type string 卡了半 ...

  4. npm ERR! Invalid tag name “@vue-cli“: Tags may not have any characters that encodeURIComponent encod

    npm ERR! Invalid tag name "@vue-cli": Tags may not have any characters that encodeURICompo ...

  5. 日常踩坑记录-汇总版

    开发踩坑记录,不定时更新 心得 RTFM 严谨的去思考问题,处理问题 严格要求自己的代码编写习惯与风格 注意 单词拼写 20200207 mybatis plus 自带insert插入异常 sql i ...

  6. 2017年问题汇总-待整理

    查询时应注意的事项 1.从库查询,减轻主库压力 2.缓存,不是实时要求的数据,放入缓存 Excel导入异常Cannot get a text value from a numeric cell解决 h ...

  7. 2022-11 | Redis命令SET SETEX SETNX语法及描述

    这里写目录标题 SET SETEX SETNX 死锁处理 SET 语法 SET key value [EX seconds|PX milliseconds|EXAT unix-time-seconds ...

  8. Go语言:go-redis客户端设置过期时间相关命令Expire,ExpireAt,TTL的用法示例

    ExpireAt和Expire类似,只是参数是过期的时间点.TTL查看key还有剩余多少秒才过期.incr,expire这两条命令不是原子操作,如果需要进行事务操作,可以使用Multi,Exec,详见 ...

  9. Redis 的 8 大数据类型,写得非常好!

    来源:https://blog.itzhouq.cn/redis2 NoSQL 开发中或多或少都会用到,也是面试必问知识点. 最近这几天的面试每一场都问到了,但是感觉回答的并不好,还有很多需要梳理的知 ...

最新文章

  1. php和css一样吗,php和css一样吗
  2. gpio pin和pad的区别
  3. js中propertyIsEnumerable()方法使用介绍
  4. #51CTO学院四周年# 成长路上的我和你
  5. centos snmp配置_如何在CentOS系统中安装配置SNMP服务
  6. ccna____总结
  7. Centos6.6安装之后调优
  8. Asp.Net MVC 模型(使用Entity Framework创建模型类)
  9. vue 直接访问静态图片_vue中本地静态图片路径写法
  10. java btrace_BTrace:Java开发人员工具箱中的隐藏宝石
  11. Linux服务器配置---安装vsftpd
  12. linux打开python3_Python3 执行Linux Bash命令的方法
  13. Flask实现发送邮件功能
  14. 边缘设备上的实时AI人员检测:检测视频中的人员
  15. redis的发布和订阅
  16. jcabanillas/yii2-inspinia-asset composert 安装失败
  17. 最全SSH命令 - 11种用法
  18. 笔记本电脑摄像头频闪问题,打开摄像头出现错误代码0xA00F4244(0xC00D36D5)的问题解决方法
  19. linux清理垃圾文件,安装及使用Sweeper从Linux系统上清除垃圾文件
  20. 淘宝开店之旅_我要充一充

热门文章

  1. 在自行下载的背景图片上写字
  2. CentOS的下载与安装
  3. 利用YAKE进行文档关键词提取
  4. 困难时拉你一把的图片_在你遇到的困难时,总会有人拉你一把、你命中有这样的贵人吗?...
  5. 不评价别人的生活,是一个人最基本的修养 // 转
  6. 一步步教你轻松学KNN模型算法
  7. Vue.use 写多个_老师说“你女儿跟多个男生早恋”,爸爸的回应改变了女儿的一生|早恋|马伊琍|晓敏|老师|告白...
  8. QQ浏览器X5内核问题汇总
  9. python中range函数是什么意思_python中range什么意思
  10. 说说自己找互联网工作的经验