redis?setIfAbsent返回null的問題及解決
起因
今天在寫業(yè)務(wù)代碼的時候,用到了StringRedisTemplate中redisTemplate.opsForValue().setIfAbsent()中并不是我期望的true或者false而是返回了null,起初我還以為是因為Returns:null when used in pipeline / transaction.這個原因,但是我并沒有在業(yè)務(wù)中使用到事務(wù)。
原因
遂使用谷歌大法,才搜到原來這是因為Redisson的bug,網(wǎng)友給出的解決方案是去掉就好了,但是不可能因為這個問題就不使用Redisson,看來又看但一個帖子,說這是redisson的bug。
看到這里,我就想到去看看github中是不是有相關(guān)的issue呢?
解決
果然,我們可以看到有兩個issue是關(guān)于setIfAbsent返回null的問題,讓我們?nèi)?a target="_blank">看一下回復(fù)數(shù)多的那一條。
其中提到在#2811中修復(fù)
也可以明確看到關(guān)于此bug的修復(fù)代碼
讓我們一起看看這個BooleanNullSafeReplayConvertor是何方神圣,怎么解決的返回值為null的bug.
其實解決的方式也很簡單暴力,就是把之前的obj == null return null改為了obj == null return false并且去掉了泛型。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis基本數(shù)據(jù)類型Zset有序集合常用操作
這篇文章主要為大家介紹了redis基本數(shù)據(jù)類型Zset有序集合常用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Redis+PHP實現(xiàn)用戶消息推送每天最多通知2次的功能
在開發(fā)應(yīng)用程序中,經(jīng)常需要向用戶推送消息通知,但是為了避免過多的打擾用戶,我們希望限制每天最多通知2次,本篇博文將介紹如何使用PHP和Redis實現(xiàn)這一功能,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-10-10