redis?setIfAbsent返回null的問題及解決
起因
今天在寫業(yè)務代碼的時候,用到了StringRedisTemplate中redisTemplate.opsForValue().setIfAbsent()中并不是我期望的true或者false而是返回了null,起初我還以為是因為Returns:null when used in pipeline / transaction.這個原因,但是我并沒有在業(yè)務中使用到事務。

原因
遂使用谷歌大法,才搜到原來這是因為Redisson的bug,網(wǎng)友給出的解決方案是去掉就好了,但是不可能因為這個問題就不使用Redisson,看來又看但一個帖子,說這是redisson的bug。
看到這里,我就想到去看看github中是不是有相關(guān)的issue呢?
解決

果然,我們可以看到有兩個issue是關(guān)于setIfAbsent返回null的問題,讓我們?nèi)?a target="_blank">看一下回復數(shù)多的那一條。
其中提到在#2811中修復

也可以明確看到關(guān)于此bug的修復代碼

讓我們一起看看這個BooleanNullSafeReplayConvertor是何方神圣,怎么解決的返回值為null的bug.

其實解決的方式也很簡單暴力,就是把之前的obj == null return null改為了obj == null return false并且去掉了泛型。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談redis的maxmemory設(shè)置以及淘汰策略
下面小編就為大家?guī)硪黄獪\談redis的maxmemory設(shè)置以及淘汰策略。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

