redis setIfAbsent返回null的问题及解决
0浏览
收藏
学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《redis setIfAbsent返回null的问题及解决》,以下内容主要包含redissetIfAbsent、null等知识点,如果你正在学习或准备学习数据库,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!
起因
今天在写业务代码的时候,用到了StringRedisTemplate中redisTemplate.opsForValue().setIfAbsent()中并不是我期望的true或者false而是返回了null,起初我还以为是因为Returns:null when used in pipeline / transaction.这个原因,但是我并没有在业务中使用到事务。

原因
遂使用谷歌大法,才搜到原来这是因为Redisson的bug,网友给出的解决方案是去掉就好了,但是不可能因为这个问题就不使用Redisson,看来又看但一个帖子,说这是redisson的bug。
看到这里,我就想到去看看github中是不是有相关的issue呢?
解决

果然,我们可以看到有两个issue是关于setIfAbsent返回null的问题,让我们去。
其中提到在#2811中修复

也可以明确看到关于此bug的修复代码

让我们一起看看这个BooleanNullSafeReplayConvertor是何方神圣,怎么解决的返回值为null的bug.

其实解决的方式也很简单暴力,就是把之前的obj == null return null改为了obj == null return false并且去掉了泛型。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持golang学习网。
好了,本文到此结束,带大家了解了《redis setIfAbsent返回null的问题及解决》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!
版本声明 本文转载于:脚本之家 如有侵犯,请联系 删除
- 使用RedisAtomicInteger计数出现少计问题及解决
- RedisRDB与AOF持久化方式详细讲解
