互斥锁是指同一时间只能有一个线程获取到的资源,其它线程需要等待。
原理
setnx keyName value,只有当keyName不存在时,才会写入成功,返回1。
实现
获取锁操作。
/** * 获取互斥锁:在redis中存入一个key-value,若存入成功,则获取锁成功,若存入失败,则获取锁失败。 * @param key 作为锁的key,value为1 * @return */ private boolean tyrLock(String key){ //写入一个数据到缓存中,如果数据已经存在,则不写入。 Boolean flag = stringRedisTemplate.opsForValue().setIfAbsent(key,"1",10, TimeUnit.SECONDS); //避免空指针 if(flag!=null){ //自动拆箱 return flag; } return false; }
释放锁操作。
/** * 释放互斥锁:删除作为锁的key-value */ private void unlock(String key){ stringRedisTemplate.delete(key); }