spring集成redis 存入map值报错

java.util.ConcurrentModificationException 并发修改异常

说实话这个错误我是第一次见,但是我大致知道报错的原因是什么,就是并发高的情况下,多个线程争抢一个资源导致的.
分析: 我项目中用的是线程池方式处理实时数据,其实并发量根本不会太高,只是基本上没秒都会有数据处理,且也有存入其他String类型的值,但是却没有问题,唯独存这个map报错,但是看redis中的数据还是对的!!

解决办法
1 既然报并发修改异常,那么我将redis存入map类型的这块代码的整体方法上加上了@sync... 关键字,查看控制台,果然不报错了,但是这个很影响性能啊,不能这么搞.
2 看项目中,是spring集成的redis,有两种引入的redis操作,一种是Stringredistemplet另一种是 RedisTemplete,这两种templete的序列化方式不一样:
Stringredistemplet 序列化后为可读的数据
RedisTemplete 则是序列化了为不可读的字节数据
而且 Stringredistemplet 继承了 RedisTemplete ,比 RedisTemplete 要强大
两者存的数据相互不同,
1)RedisTemplate不能取StringRedisTemplate存入的数据。
2)StringRedisTemplate不能取RedisTemplate存入的数据 。
相同点: 操作方法基本相同
3 将map换为线程安全的map ConcurrentHashMap
于是: 我将项目中原来的 RedisTemplete 换成了 Stringredistemplet ,再看控制台,已经不报错了,具体原因,不得而知.

===============================数据不互通的验证=====================

image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞旅行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值