redis setIfAbsent和setnx的區(qū)別與使用說明
redis setIfAbsent和setnx的區(qū)別與使用
如果為空就set值,并返回1
如果存在(不為空)不進(jìn)行操作,并返回0
setIfAbsent 和 setnx 使用范圍
setIfAbsent 是java中的方法
setnx 是 redis命令中的方法
setnx 例子
redis> SETNX testkey "test" (integer) 1 redis> SETNX testkey "test" (integer) 0 redis> GET testkey "test"
setIfAbsent 例子
redis> SETNX testkey "test" (integer) 1 redis> SETNX testkey "test" (integer) 0 redis> GET testkey "test"
RedisTemplate 實(shí)現(xiàn) setnx exptime (擴(kuò)展 redisTemplate.setIfAbsent)
之前用 redisTemplate 實(shí)現(xiàn)setnx exptime 時(shí) 是分兩步的
1. redisTemplate.setIfAbsent
2. redisTemplate.expire
這樣的不是原子性的 可能在第一步與第二步之間 重新發(fā)布了或者服務(wù)器重啟了 這個(gè)key就永遠(yuǎn)不會(huì)消失了
可以采用以下的方法
public static boolean setIfAbsent(final String key, final Serializable value, final long exptime) { Boolean b = (Boolean) redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer valueSerializer = redisTemplate.getValueSerializer(); RedisSerializer keySerializer = redisTemplate.getKeySerializer(); Object obj = connection.execute("set", keySerializer.serialize(key), valueSerializer.serialize(value), SafeEncoder.encode("NX"), SafeEncoder.encode("EX"), Protocol.toByteArray(exptime)); return obj != null; } }); return b; }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Redis的setNX分布式鎖超時(shí)時(shí)間失效 -1問題及解決
- Redis實(shí)現(xiàn)分布式鎖(setnx、getset、incr)以及如何處理超時(shí)情況
- 詳解使用Redis SETNX 命令實(shí)現(xiàn)分布式鎖
- SpringCloud之Config配置中心與Redis分布式鎖詳解
- SpringCloud?分布式鎖的多種實(shí)現(xiàn)
- springcloud如何用Redlock實(shí)現(xiàn)分布式鎖
- 詳解如何在springcloud分布式系統(tǒng)中實(shí)現(xiàn)分布式鎖
- Redis SETNX命令在Spring Cloud中的分布式鎖用法詳解
相關(guān)文章
淺談Java設(shè)置PPT幻燈片背景——純色、漸變、圖片背景
這篇文章主要介紹了Java設(shè)置PPT幻燈片背景——純色、漸變、圖片背景,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03SpringBoot項(xiàng)目實(shí)現(xiàn)統(tǒng)一異常處理的最佳方案
在前后端分離的項(xiàng)目開發(fā)過程中,我們通常會(huì)對(duì)數(shù)據(jù)返回格式進(jìn)行統(tǒng)一的處理,這樣可以方便前端人員取數(shù)據(jù),后端發(fā)生異常時(shí)同樣會(huì)使用此格式將異常信息返回給前端,本文介紹了如何在SpringBoot項(xiàng)目中實(shí)現(xiàn)統(tǒng)一異常處理,如有錯(cuò)誤,還望批評(píng)指正2024-02-02SpringCloudStream中的消息分區(qū)數(shù)詳解
這篇文章主要介紹了SpringCloudStream中的消息分區(qū)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Spring AOP日志框架實(shí)現(xiàn)過程圖解
這篇文章主要介紹了Spring AOP日志框架實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Java虛擬機(jī)JVM性能優(yōu)化(三):垃圾收集詳解
這篇文章主要介紹了Java虛擬機(jī)JVM性能優(yōu)化(三):垃圾收集詳解,本文講解了眾多的JVM垃圾收集器知識(shí)點(diǎn),需要的朋友可以參考下2014-09-09MyBatisPlus?大數(shù)據(jù)量查詢慢的問題解決
本文主要介紹了MyBatis?Plus?解決大數(shù)據(jù)量查詢慢問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Mybatis Plus LambdaQueryWrapper的具體用法
Mybatis Plus 在其基礎(chǔ)上擴(kuò)展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加簡便的查詢語法,同時(shí)也避免了SQL注入的風(fēng)險(xiǎn),感興趣的可以了解一下2023-11-11