zoukankan      html  css  js  c++  java
  • 通过 RedisTemplate 和 Redis 实现锁的功能

    private static final Long EXEC_RESULT = 1L;
    
        private static DefaultRedisScript<Long> redisScript = new DefaultRedisScript<Long>();
    
        private static RedisSerializer<String> argsSerializer = new StringRedisSerializer();
    
        private static RedisSerializer resultSerializer = new StringRedisSerializer();
    
        @Resource
        private RedisTemplate<String, Object> redisTemplate;
    
        @Override
        public boolean getDistributedLock(String key, String requestId, String expireTime) {
            String script =
                "if redis.call('setNx',KEYS[1],ARGV[1]) then " +
                "    if redis.call('get',KEYS[1])==ARGV[1] then " +
                "        return redis.call('expire',KEYS[1],ARGV[2]) " +
                "    else " +
                "        return 0 " +
                "    end " +
                "end";
            redisScript.setScriptText(script);
            redisScript.setResultType(Long.class);
            Long result = redisTemplate.execute(redisScript, argsSerializer, resultSerializer, Collections.singletonList(key), requestId, expireTime);
            System.out.println("获取锁:" + result);
            return EXEC_RESULT.equals(result);
        }
    
        @Override
        public boolean releaseDistributedLock(String key, String requestId) {
            String script =
                "if redis.call('get',KEYS[1]) == ARGV[1] then " +
                "    return redis.call('del',KEYS[1]) " +
                "else " +
                "    return 0 " +
                "end";
            redisScript.setScriptText(script);
            redisScript.setResultType(Long.class);
            Long result = redisTemplate.execute(redisScript, argsSerializer, resultSerializer, Collections.singletonList(key), requestId);
            System.out.println("释放锁:" + result);
            return EXEC_RESULT.equals(result);
        }
    
  • 相关阅读:
    SpringCloud 天气预报系统 Quartz集成
    阿里云maven镜像库配置(gradle,maven)
    天气接口
    spring boot @ConditionalOnxxx相关注解总结
    为什么不应该使用ZooKeeper做服务发现
    Spring cloud系列十四 分布式链路监控Spring Cloud Sleuth
    Spring Cloud Sleuth Zipkin
    Spring Cloud Sleuth Zipkin
    标签系统
    简述 OAuth 2.0 的运作流程
  • 原文地址:https://www.cnblogs.com/wbyixx/p/15130945.html
Copyright © 2011-2022 走看看