• Redis 如何实现redis分布式锁


    1、redis设置key时上锁

    参考怎样实现redis分布式锁?

    package com.test;
    
    import com.utils.JedisUtil;
    import redis.clients.jedis.Jedis;
    
    import java.util.*;
    
    public class Test09_Redis {
        private static final Long SUCCESS = 1L;
        private static Jedis jedis = new Jedis("127.0.0.1");
    
        public static void main(String[] args) {
            // Jedis jedis = JedisUtil.getJedis();
            // JedisUtil.close(jedis);
            boolean b = tryLock("1", "123");
            boolean b1 = unLock("1", "123");
            System.out.println("b= " + b + " b1= " + b1);
        }
    
        // public boolean tryLock2(String key, String requestId, int expireTime) {
        //     //使用jedis的api,保证原子性
        //     //NX 不存在则操作 EX 设置有效期,单位是秒
        //     // String result = jedis.set(key, requestId, "NX", "EX", expireTime);
        //     String result = jedis.set(key, requestId, expireTime);
        //     //返回OK则表示加锁成功
        //     return "OK".equals(result);
        // }
    
        /**
         * 加锁
         */
        public static boolean tryLock(String key, String requestId) {
            //使用setnx命令。
            //不存在则保存返回1,加锁成功。如果已经存在则返回0,加锁失败。
            return SUCCESS.equals(JedisUtil.getJedis().setnx(key, requestId));
        }
    
        //删除key的lua脚本,先比较requestId是否相等,相等则删除
        private static final String DEL_SCRIPT = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
    
        /**
         * 解锁
         */
        public static boolean unLock(String key, String requestId) {
            //删除成功表示解锁成功
            Long result = (Long) jedis.eval(DEL_SCRIPT, Collections.singletonList(key),
                    Collections.singletonList(requestId));
            return SUCCESS.equals(result);
        }
    }
    
    
  • 相关阅读:
    hbase源码分析.客户端.预备知识.ExecutorService
    Dijkstra for MapReduce (1)
    [leetcode]Palindrome.Partitioning
    CSS3兼容性写法
    C#延时
    python学习日记180823
    2012年11月11日 本周随笔
    2012年11月20日 上周回顾 && 疯狂的程序员书摘
    2012年11月27日 上周回顾
    hadoop loadBalance源码分析
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/15084638.html
Copyright © 2020-2023  润新知