RedisConnectionException: redis 报错原因分析及解决办法

在SpringBoot应用中,使用线程池处理并发任务时,遇到Redis连接失败的问题。当尝试通过redisTemplate的opsForValue().increment()方法在多线程环境下操作Redis时,出现异常。问题出在调用executor.shutdownNow(),移除这行代码后,问题得到解决。文章提示在使用线程池处理共享数据时,确保所有线程执行相同任务以保证数据一致性。
摘要由CSDN通过智能技术生成
为了方便读者, 我这次的异常是把 executor.shutdownNow() 去掉后就解决了
详细的请往下看
当前环境:
	windows
	springboot
	线程池
	redis
当前业务逻辑: 测试并发时生成 id 的功能是否不重复
	创建任务对象, 使用 redis 完成 value 的自增
	然后使用线程池执行这个任务
	
报错信息:
	org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1:6379
测试步骤:
	window 的 redis-cli 连接本地的 redis-serve 成功
	window 的 redis-cli 连接 linux 的 redis-serve 成功
	springboot 运行后发请求, redisTemplate.opsForValue().increment(key, value) 报错
		由于使用了多线程:
			不使用多线程时, redisTemplate.opsForValue().increment(key, value) 正常
			使用多线程后: redisTemplate.opsForValue().increment(key, value) 失败
	然后开始各种输出: 最后发现问题出在这里:
		executor.execute(runnable);
        while (flag) {
            Thread.sleep(1000);
            System.out.println("睡眠");
        }
        executor.shutdownNow();
解决方法: 
	springboot 使用线程池不要调用 executor.shutdownNow(); ??????
	当前去掉这行代码后立刻就不报错了, 原因未知
温馨提示:
	共享数据使用线程池进行操作, 需要确保每个线程执行的是同一个任务对象
	如果是执行一个线程创建一个任务对象, 数据不会共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值