`

jedis实现分布式锁

    博客分类:
  • java
 
阅读更多
private static final String LOCK_SUCCESS = "OK";
        private static final String SET_IF_NOT_EXIST = "NX";
        private static final String SET_WITH_EXPIRE_TIME = "PX";

        /**
         * 尝试获取分布式锁
         * @param lockKey 锁
         * @param requestId 请求标识
         * @param expireTime 超期时间
         * @return 是否获取成功
         */
        public boolean tryLock(String lockKey, String requestId, int expireTime) {

            String result = invoke.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);

            if (LOCK_SUCCESS.equals(result)) {
                return true;
            }
            return false;

        }


        private static final Long RELEASE_SUCCESS = 1L;

        /**
         * 释放分布式锁
         * @param lockKey 锁
         * @param requestId 请求标识
         * @return 是否释放成功
         */
        public boolean unLock(String lockKey, String requestId) {
            String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
            Object result = evalScript(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));
            if (RELEASE_SUCCESS.equals(result)) {
                return true;
            }
            return false;
        }

        private Object evalScript(String script, List<String> singletonList, List<String> singletonList1) {
            return (invoke instanceof Jedis)
                    ? ((Jedis)invoke).eval(script, singletonList, singletonList1)
                    : ((JedisCluster)invoke).eval(script, singletonList, singletonList1);
        }

 

分享到:
评论

相关推荐

    redis实现分布式锁(java/jedis)

    redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现 redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现

    redis实现分布式锁,自旋式加锁,lua原子性解锁

    Redis作为一个高性能的键值存储系统,常被用作实现分布式锁的工具。本文将深入探讨如何使用Redis实现分布式锁,以及如何利用自旋式加锁和Lua脚本实现原子性解锁。 首先,我们来理解分布式锁的基本概念。分布式锁是...

    Java基于redis实现分布式锁代码实例

    Java基于Redis实现分布式锁代码实例 分布式锁的必要性 在多线程环境中,资源竞争是一个常见的问题。例如,在一个简单的用户操作中,一个线程修改用户状态,首先在内存中读取用户状态,然后在内存中进行修改,然后...

    003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁

    首先,Redis是一种内存数据存储系统,它支持丰富的数据结构如字符串、哈希、列表、集合和有序集合,这使得Redis成为实现分布式锁的理想选择。由于Redis操作速度快,可以提供高并发下的快速响应,且支持主从复制和...

    jedis-lock, Jedis分布式锁定支持.zip

    jedis-lock, Jedis分布式锁定支持 jedis锁使用Redis数据库和Jedis驱动程序,Jedis锁易于使用和简单的分布式锁实现。我怎么用它?你可以在以下位置下载latests构建: http://github.com/abelaska/jedis-lock/dow

    基于Redis方式实现分布式锁

    ### 基于Redis方式实现分布式锁 #### 分布式锁概述 分布式锁是一种常见的分布式系统协调机制,用于控制分布式环境下的多个进程或线程之间的访问顺序,防止多个客户端同时修改共享资源,从而保证数据的一致性和完整...

    Redis分布式锁的正确实现方法总结

    接着,我们来看一下使用Jedis实现分布式锁的代码: ```java public class RedisTool { private static final String LOCK_SUCCESS = "OK"; private static final String SET_IF_NOT_EXIST = "NX"; private ...

    springboot redis zookeeperlock rabbit实现的分布式锁

    本项目基于SpringBoot框架,结合Redis、Zookeeper和RabbitMQ实现了分布式锁,让我们一起深入探讨这三个组件在分布式锁中的作用和实现机制。 **SpringBoot** 是一个轻量级的Java开发框架,它简化了新Spring应用的...

    redis分布式锁.zip

    Redis 的高可用性和低延迟特性使其成为实现分布式锁的理想选择。下面将详细介绍如何使用 Redis 实现分布式锁以及其中可能遇到的问题和解决方案。 首先,我们需要理解分布式锁的基本概念。分布式锁是一种在分布式...

    springboot基于redis分布式锁

    不过,以上代码提供了一个基本的实现思路,帮助你理解如何在SpringBoot应用中使用Redis实现分布式锁。 通过提供的Word文档,你应该能够找到更详细的配置和使用步骤。记得在实际项目中根据具体需求进行调整,确保...

    java基于jedisLock—redis分布式锁实现示例代码

    "java基于jedisLock—redis分布式锁实现示例代码" ...jedisLock—redis分布式锁实现示例代码主要讲解了分布式锁的概念、使用场景和实现原理,并详细介绍了如何使用redis的setNX命令实现分布式锁。

    Java Redis分布式锁的正确实现方式详解

    本篇博客将详细介绍第二种方式,基于Redis实现分布式锁。 可靠性是分布式锁的重要特性。为了确保分布式锁的可靠性,至少需要满足四个条件: 1. 互斥性:在任意时刻,只有一个客户端能持有锁。 2. 不会发生死锁:...

    Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】.docx

    由于Redis服务器是单线程处理客户端请求,这使得基于Jedis实现分布式ID生成器变得简单。通过调用`jedis.incr(key)`,可以在服务器端原子性地增加key对应的值,从而生成全局唯一的ID。由于单线程环境保证了操作的顺序...

    Spring Boot+Redis 分布式锁:模拟抢单.pdf

    综上所述,Redis在分布式锁中扮演了至关重要的角色,而结合Spring Boot和jedis库可以更加高效地实现分布式锁。掌握这些知识点,对于开发高并发、高可用的分布式应用系统尤为重要。在面试中,对于分布式锁的理解和...

    基于Spring boot的声明式和编程式分布式锁.zip

    Spring Boot,作为Java开发中的主流框架,提供了多种实现分布式锁的方式,包括声明式和编程式。下面我们将深入探讨这两种方式及其在实际应用中的具体实现。 1. **声明式分布式锁** 声明式分布式锁主要依赖于AOP...

    基于redis的分布式锁

    Redis,一个高性能的键值数据库,常被用作实现分布式锁的工具,因其内存存储特性提供了高速读写性能以及丰富的数据结构支持。 标题"基于redis的分布式锁"指出了我们将探讨如何使用Redis来构建分布式锁。Redis提供了...

    基于Redis实现的分布式锁【100012506】

    在实现分布式锁时,我们主要利用其原子操作(如`SET`、`GET`、`EXPIRE`、`DEL`)和事务(transactions)特性。 **分布式锁的基本原理:** 1. **锁定操作**:客户端尝试用一个唯一的标识(例如,UUID)作为键,设置...

    jedis单机版,集群版工具类

    5. **分布式锁**:在集群中实现分布式锁,可以使用 `JedisCluster` 的 `setnx` 和 `expire` 方法。 ```java jedisCluster.setnx("lock", "true"); jedisCluster.expire("lock", 10); // 锁定10秒 // 释放锁 if ...

    分布式锁的三种实现方式.pdf

    数据库作为传统意义上的数据存储介质,在实现分布式锁方面也有其独特的优势和局限性。常见的数据库锁分为悲观锁和乐观锁两种类型。 ##### 1. 悲观锁 悲观锁通常采用`SELECT ... WHERE ... FOR UPDATE`的方式来实现...

    基于redis分布式锁实现“秒杀”

    本文将深入探讨如何使用Redis实现分布式锁,进而完成简单的秒杀功能。 #### 二、业务场景与挑战 ##### 1. 业务场景解析 - **业务视角**:秒杀是指在短时间内大量用户尝试购买限量商品的现象。这不仅考验着系统的...

Global site tag (gtag.js) - Google Analytics