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


    }
  • 相关阅读:
    电商网站测试总结
    web测试总结—用户体验
    测试用例的常用方法
    linux系统中如何查看日志 (常用命令)
    web与app测试的区别
    Json模块dumps、loads、dump、load函数介绍
    postman—集成到jenkins
    Postman—命令执行脚本及生成报告
    Postman—测试脚本
    Postman—前置请求脚本
  • 原文地址:https://www.cnblogs.com/bt2882/p/13815342.html
Copyright © 2011-2022 走看看