ERR invalid expire time in setex
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
Redis源码剖析和注释(九)— 字符串命令的实现(t_string) ↩︎
ERR invalid expire time in setex相关推荐
- nested exception is io.lettuce.core.RedisCommandExecutionException: ERR invalid expire time in setex
线上时不时会报出类似的报错,看代码以为key为空取值问题,结果本地调试后发现并不是,于是通过打印详细报错找到了大概方向. 错误信息: Error in execution; nested except ...
- 阿里云 Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR invalid password
如果你是买的阿里云的redis服务的话,不要被这个ERR invalid password所迷惑了. 你应该去检查一下你买的服务有没有设置白名单. 像mysql和mongodb的服务如果连不上的话也可 ...
- 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 卡了半 ...
- 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 ...
- 日常踩坑记录-汇总版
开发踩坑记录,不定时更新 心得 RTFM 严谨的去思考问题,处理问题 严格要求自己的代码编写习惯与风格 注意 单词拼写 20200207 mybatis plus 自带insert插入异常 sql i ...
- 2017年问题汇总-待整理
查询时应注意的事项 1.从库查询,减轻主库压力 2.缓存,不是实时要求的数据,放入缓存 Excel导入异常Cannot get a text value from a numeric cell解决 h ...
- 2022-11 | Redis命令SET SETEX SETNX语法及描述
这里写目录标题 SET SETEX SETNX 死锁处理 SET 语法 SET key value [EX seconds|PX milliseconds|EXAT unix-time-seconds ...
- Go语言:go-redis客户端设置过期时间相关命令Expire,ExpireAt,TTL的用法示例
ExpireAt和Expire类似,只是参数是过期的时间点.TTL查看key还有剩余多少秒才过期.incr,expire这两条命令不是原子操作,如果需要进行事务操作,可以使用Multi,Exec,详见 ...
- Redis 的 8 大数据类型,写得非常好!
来源:https://blog.itzhouq.cn/redis2 NoSQL 开发中或多或少都会用到,也是面试必问知识点. 最近这几天的面试每一场都问到了,但是感觉回答的并不好,还有很多需要梳理的知 ...
最新文章
- php和css一样吗,php和css一样吗
- gpio pin和pad的区别
- js中propertyIsEnumerable()方法使用介绍
- #51CTO学院四周年# 成长路上的我和你
- centos snmp配置_如何在CentOS系统中安装配置SNMP服务
- ccna____总结
- Centos6.6安装之后调优
- Asp.Net MVC 模型(使用Entity Framework创建模型类)
- vue 直接访问静态图片_vue中本地静态图片路径写法
- java btrace_BTrace:Java开发人员工具箱中的隐藏宝石
- Linux服务器配置---安装vsftpd
- linux打开python3_Python3 执行Linux Bash命令的方法
- Flask实现发送邮件功能
- 边缘设备上的实时AI人员检测:检测视频中的人员
- redis的发布和订阅
- jcabanillas/yii2-inspinia-asset composert 安装失败
- 最全SSH命令 - 11种用法
- 笔记本电脑摄像头频闪问题,打开摄像头出现错误代码0xA00F4244(0xC00D36D5)的问题解决方法
- linux清理垃圾文件,安装及使用Sweeper从Linux系统上清除垃圾文件
- 淘宝开店之旅_我要充一充
热门文章
- 在自行下载的背景图片上写字
- CentOS的下载与安装
- 利用YAKE进行文档关键词提取
- 困难时拉你一把的图片_在你遇到的困难时,总会有人拉你一把、你命中有这样的贵人吗?...
- 不评价别人的生活,是一个人最基本的修养 // 转
- 一步步教你轻松学KNN模型算法
- Vue.use 写多个_老师说“你女儿跟多个男生早恋”,爸爸的回应改变了女儿的一生|早恋|马伊琍|晓敏|老师|告白...
- QQ浏览器X5内核问题汇总
- python中range函数是什么意思_python中range什么意思
- 说说自己找互联网工作的经验