记一次Redis云服务命令兼容性问题

先贴一下报错 Caused by: org.redisson.client.RedisException: ERR request failed to route, command 'wait'. channel: [id: 0x435ad7b4, L:/10.0.0.34:59660 - R:10.0.0.16/10.0.0.16:7000] command: (WAIT), promise: java.util.concurrent.CompletableFuture@49043da0[Not completed], params: [1, 1000] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:370) at org.redisson.client.handler.CommandDecoder.decodeCommandBatch(CommandDecoder.java:271) at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:210) at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:137) at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:113) 使用环境 JDK17 redisson3.17.5版本 腾讯云Redis5.0内存版(集群架构) 业务代码 RReadWriteLock readWriteLock = redissonClient.getReadWriteLock(RedisKey.REDISSON_LOCK_PREFIX + No); RLock rLock = readWriteLock.writeLock(); try { rLock.lock(); //处理业务 修改订单状态 记录支付日志 } finally { rLock.unlock(); } 排查过程 1.测试环境是单机版,生产环境是集群,怀疑是配置有误。 后将测试环境的redis换成手动搭建的集群环境,发现并没有问题 2.怀疑是云服务的redis有些配置,和自己搭建的不一致,但是并没有具体方向 3.进入redis的GitHub查看是否有相似问题 4.在Issues 中发现了同样的报错 他用的阿里云的Redis云服务,因为用的是代理模式,所以会有此问题。相关地址 腾讯云使用的也是代理模式,所以我觉得突破点,就是这儿。 5.随后找到腾讯云的文档,发现是支持的。相关文档 6.因为文档是最近更新的,怀疑是不是某个新版本才可以 ...

2024-11-29 · 1 min · airocld

【坑】INSERT IGNORE 会截断字符长度直到可以插入数据库

INSERT IGNORE和STRICT模式 当STRICT模式打开时,如果您尝试将无效值使用INSERT插入表中,MySQL将返回错误并中止语句。 但是,如果您使用INSERT IGNORE语句,MySQL将发出警告而不是错误。此外,在将值添加到表之前,它将尝试调整值以使其有效。 请考虑以下示例。 首先,我们创建一个的新表名为tokens: CREATE TABLE tokens ( s VARCHAR(6) ); 在此表中,列s仅接受长度小于或等于6的字符串。 其次,将长度为7的字符串插入tokens表中。 INSERT INTO tokens VALUES('abcdefg'); MySQL发出以下错误,因为严格模式已启用。 ERROR 1406 (22001): Data too long for column 's' at row 1 第三,使用INSERT IGNORE语句插入相同的字符串。 INSERT IGNORE INTO tokens VALUES('abcdefg'); MySQL在将数据插入tokens表之前截断了数据。此外,它会发出警告。 +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1265 | Data truncated for column 's' at row 1 | +---------+------+----------------------------------------+ 1 row in set (0.00 sec) 数据库结果 SELECT * FROM `tokens`;

2024-11-29 · 1 min · airocld

解决线上一次inode 100%

今天我们开发服务器不能rz上传文件了,而且服务器的补全都会报错,起始以为磁盘空间不足,df 看了一下 发现空间是足够的,然后df -i 查看了下inodes,发现根目录下的inodes值使用率为100%了 一开始使用,会提示空间不足 find / -xdev -printf '%h\n' | sort | uniq -c | sort -nr -k 1 | head -30 后面觉得可能是/tmp文件太多 ls -lt /tmp | wc -l 看了一下6060154,罪魁祸首就是它了 网上其他查找占用最大的文件夹命令(未尝试) for i in /*; do echo $i; find $i | wc -l; done 若是某个文件夹下面文件比较多,使用rm *是没法使用的 使用xargs命令来删除数量比较多的文件 ls | xargs -n 10 rm -rf

2024-11-29 · 1 min · airocld

insert ignore into 导致的主键id索引不连续

原理: INSERT INTO 在执行数据插入操作时,会在数据库中对元组的主键进行检测,若没有存在,则执行插入动作,若存在,则会报错。 而INSERT IGNORE INTO命令与其不同的是,INSERT IGNORE会忽略数据库中已经存在的记录: 如果数据库没有数据,就插入新的数据;如果有数据的话就跳过这条数据。 这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。 需要说明的是,INSERT INTO和INSERT IGNORE INTO只根据“主键值”或“unique索引”进行判断,只要主键值已在数据库中存在,则认为即将插入重复记录。 两个字段: id 是主键 name是唯一索引 插入’yangqq6’时,与id10的数据唯一索引冲突了,但是消耗了主键11,所以插入’yangqq7’时id为12

2024-11-29 · 1 min · airocld

Nacos动态更改配置后导致定时任务不执行

说明: nacos服务版本:1.4.1 问题: 在定时器类中使用nacos注解动态刷新,变更配置中心的配置后,项目监听到了变更,但是会使定时器无法执行的问题。 解决方案: nacos动态配置的数据统一放到一个类中,在更新nacos配置后,配置类会出现懒加载,即访问时才加载,如果将变更的变量放到定时器类中,那么定时器就会懒加载,导致定时器无法执行! import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; /** * nacos统一动态配置类 * @author tyg * @date 2021-04-15 15:57 */ @RefreshScope @Configuration public class DynamicConfig { @Value("${demo.number:10}") public Integer number; public Integer getNumber(){ return this.number; } } 3. 定时器中调用示例: import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.Date; /** * 定时器demo * @author tyg * @date 2021-04-15 9:50 */ @Component public class DemoTask { @Resource private DynamicConfig dynamicConfig; @Scheduled(fixedDelay = 5000) public void run(){ System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + " demo.number=" + dynamicConfig.getNumber()); } } ———————————————— 版权声明:本文为CSDN博主「朝如青丝·暮成雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_26365837/article/details/115767907 ...

2024-11-29 · 1 min · airocld