zoukankan      html  css  js  c++  java
  • redis 实现分布式锁

    @RestController
    public class RedisLock {
    @Resource
    RedisTemplate<String, Object> redisTemplate;

    @GetMapping("lock/{key}/{value}")
    public String testLock(@PathVariable String key, @PathVariable String value) {
         // 根据key获取分布式锁,并且设置过期时间

    Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(key, value, 10, TimeUnit.SECONDS);

    if (aBoolean) {
    try {
    System.out.println("获取到锁");
    TimeUnit.SECONDS.sleep(5);
    } catch (InterruptedException e) {
    e.printStackTrace();
    } finally {
    Boolean unlock = unlockLua(key, value);
    System.out.println(unlock);
    }
    } else {
    System.out.println("未获取到锁");
    }
    return "测试锁";
    }

    public boolean unlockLua(String key, String value) {
    DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
    //用于解锁的lua脚本位置
    redisScript.setLocation(new ClassPathResource("unlock.lua"));
    redisScript.setResultType(Long.class);
    //没有指定序列化方式,默认使用上面配置的
    Object result = redisTemplate.execute(redisScript, Collections.singletonList(key), value);
    assert result != null;
    return result.equals(1L);
    }
    //
    在resources中创建 unlock.lua 加入以下代码
    
    
    if redis.call('get',KEYS[1]) == ARGV[1] then
    return redis.call('del',KEYS[1])
    else
    return 0
    end


    }
  • 相关阅读:
    正则表达式(二)
    HTTP状态码
    ajax(局部刷新技术)
    day03<JS对象&函数>
    day02<CSS&JavaScript>
    day01<HTML等>
    总结:HTML表单的应用
    总结:HTML的框架结构
    九、浮动与定位
    八、CSS高级技巧
  • 原文地址:https://www.cnblogs.com/bt2882/p/13815342.html
Copyright © 2011-2022 走看看