场景:
redis缓存的是当前被投票人的投票数,mysql存的是投票的详细记录。
redis存储类型为hash,被投票人id为KEY,当有人投票时做incrby 每次加1操作。
mysql存储的投票详情,例如投票人id,投票时间等信息。
使用jedispool.getResource().pipelined()管道操作。
问题现象:
redis某个key的投票数是10000, 而mysql数据库根据key查询可能是12000,总之就是redis数量比数据库的详情条数少。
那要看你得代码逻辑,为什么操作db和操作redis不一致
从代码看出现问题点是redis更新和mysql是没有事务的。你redis更新成功了二mysql更新失败了就会这样。应该先更新mysql 判断成功再更新redis。还有你在循环里面插入只要一个报错整个循环就会中断,造成脏数据。
另外try有了catch哪去了?你这样把错误信息都吞了。谁知道发生了什么