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

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

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

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

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

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
redis列表類型_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了redis列表類型的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
詳解Redis中的List是如何實(shí)現(xiàn)的
List 的 Redis 中的 5 種主要數(shù)據(jù)結(jié)構(gòu)之一,它是一種序列集合,可以存儲(chǔ)一個(gè)有序的字符串列表,順序是插入的順序,本文將給大家介紹了一下Redis中的List是如何實(shí)現(xiàn)的,需要的朋友可以參考下2024-05-05
基于Redis實(shí)現(xiàn)分布式鎖以及任務(wù)隊(duì)列
這篇文章主要介紹了基于Redis實(shí)現(xiàn)分布式鎖以及任務(wù)隊(duì)列,需要的朋友可以參考下2015-11-11
淺談redis的maxmemory設(shè)置以及淘汰策略
下面小編就為大家?guī)硪黄獪\談redis的maxmemory設(shè)置以及淘汰策略。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03

