能否使用加锁的方法去删除Redis的键值

能否使用加锁的方法去删除Redis的键值

老师,我有一个问题一直没想明白,使用Redis实现分布式锁,在删除的时候之前您说的需要用lua脚本,但是使用RedisTemplate应该也能删除,是因为lua脚本在判断是否存在、删除操作的原子性吗?如果是的话在不考虑性能的情况下能否用加锁的形式代替呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

分布式锁里 再加锁吗?


你要保证你删除的key 的 value 是你自己设置的value,  如果是别人的value是不能删除的。

  • 黄药师_NO1 提问者 #1
    @GetMapping("/redisLock") public String redisLock(){ log.info("enter into interface"); try{ String redisValue = UUID.randomUUID().toString(); String redisKey = "redisKey"; log.info("redisvalue is : "+redisValue); Boolean result = redisTemplate.opsForValue().setIfAbsent(redisKey,redisValue,30000, TimeUnit.MILLISECONDS); if(result){ log.info("enter into lock already"); try { Thread.sleep(15000); } catch (InterruptedException e) { e.printStackTrace(); } } String value = (String) redisTemplate.opsForValue().get(redisKey); if(value.equals(redisValue)){ redisTemplate.delete(value); log.info("key has been deleted already"); } else{ log.info("value changed: "+value); } }catch (Exception ex){ return ex.getMessage(); } return "lock over"; }
    2020-07-03 17:25:38
  • 黄药师_NO1 提问者 #2
    老师,这个是我用另一种方式写的,我这测试着不需要使用lua代码,也可以正常添加删除
    2020-07-03 17:27:01
  • 凌波微步 回复 提问者 黄药师_NO1 #3
    取值 与 删除 不能保证原子性
    2020-07-03 18:01:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师