锁Redis锁 处理并发 原子性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了锁Redis锁 处理并发 原子性相关的知识,希望对你有一定的参考价值。
【锁】Redis锁 处理并发 原子性
如果为空就set值,并返回1
如果存在(不为空)不进行操作,并返回0
很明显,比get和set要好。因为先判断get,再set的用法,有可能会重复set值。
setIfAbsent 和 setnx
setIfAbsent 是java中的方法
setnx 是 redis命令中的方法
说明:当key不存在,将key的值设为value,并设置过期时间,返回true;若给定的key已经存在,则不做任何动作,并返回false。此方法是原子性的
@Autowired
private RedisTemplate redisTemplate;
/**
* 加锁
* @param key key
* @param value value
* @param timeout 过期时间单位秒
* @param false表示有锁 / true表示key不存在 无锁
*/
public boolean getLock(String key, String value, long timeout)
try
//原子性操作
boolean flag = redisTemplate.opsForValue().setIfAbsent(key, value, timeout, TimeUnit.SECONDS);
//如果存在false表示重复
return flag;
catch (Exception e)
logger.error("redis加锁异常", e);
//出现异常删除锁
redisTemplate.delete(key);
return true;
redis命令
redis> SETNX mykey "Hello"
(integer) 1
redis> SETNX mykey "World"
(integer) 0
redis> GET mykey
"Hello"
以上是关于锁Redis锁 处理并发 原子性的主要内容,如果未能解决你的问题,请参考以下文章
Redis的IO多路复用和多线程特性会破坏分布式锁的原子性吗?
Redis的IO多路复用和多线程特性会破坏分布式锁的原子性吗?