`

利用redis的transaction功能,实现分布式下加锁

 
阅读更多
package memcached;

import java.util.List;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestJedisLock {

	Jedis jedis = new Jedis("127.0.0.1", 6379);
	
	public static void main(String[] args) {
		TestJedisLock t = new TestJedisLock();		
		System.out.println(t.testLock());		
	}
	
	public boolean testLock() {
		String pk = "mypk";
		String lockPk = "lock" + pk;  
		String lockValue = String.valueOf(System.currentTimeMillis()) + "111";  
		 
		try {  
		    if(jedis.exists(lockPk)) { // other one locked already   
		        System.out.println("Already locked pk:" + pk);  
		        return false;  
		    }  
		  
		    jedis.watch(lockPk);// make sure below operation is particle   
		    jedis.multi();  
		      
		    Transaction trans = new Transaction(jedis.getClient());  
		    trans.set(lockPk, lockValue);  
		    trans.expire(lockPk, 60*60);  
		    List<Object> ret = trans.exec();  
		      
		    if(ret == null) {  
		    	System.out.println("Concurrent lock fail for pk:" + pk);  
		        return false;  
		    }  
		      
		    String lockedValue = jedis.get(lockPk);  
		      
		    return lockValue.equals(lockedValue); // locked success   
		 } catch (Exception e) {  
			System.out.println("Exception in lock for pk:" + pk);   
		    return false;  
		}
	}
}
 
分享到:
评论
1 楼 b_l_east 2013-10-29  
很有问题啊

相关推荐

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

    本文将深入探讨如何使用Redis实现分布式锁,以及如何利用自旋式加锁和Lua脚本实现原子性解锁。 首先,我们来理解分布式锁的基本概念。分布式锁是在多节点之间共享资源时,用于协调各个节点的访问控制机制。在分布式...

    Go-利用Redis和Golang实现分布式令牌桶算法

    **标题详解:** "Go-利用Redis和Golang实现分布式令牌桶算法" 令牌桶算法(Token Bucket)是一种流量整形和拥塞控制算法,常用于网络通信中限制数据发送的平均速率,以避免突然的大流量对网络造成冲击。该算法允许...

    redis和redisson实现分布式锁

    Redis作为一款高性能的键值存储系统,常被用作实现分布式锁的工具,而Redisson是基于Redis的Java客户端,提供了丰富的数据结构和服务功能,包括对分布式锁的支持。本文将深入探讨如何使用Redis和Redisson来构建...

    使用 Redis 和 Python 实现分布式锁.zip

    使用 Redis 和 Python 实现分布式锁RedLock - 使用 Redis 和 Python 的分布式锁该库实现了@antirez提出的 RedLock 算法又一个……Python 世界中已经有一些基于 redis 的锁实现,例如 retools、 redis-lock。...

    基于Redis方式实现分布式锁

    ### 基于Redis方式实现分布式锁 #### 分布式锁概述 分布式锁是一种常见的分布式系统协调机制,用于控制分布式环境下的多个...通过以上步骤,我们可以有效地使用Redis实现分布式锁的功能,提高系统的稳定性和性能。

    记录redisson实现redis分布式事务锁

    Redisson的分布式锁通过`RLock`接口提供,它实现了Lock接口,包含了常规锁的基本功能,如`lock()`, `unlock()`等。 在使用Redisson实现分布式锁时,我们需要创建一个RedissonClient实例,这通常在Spring Boot应用中...

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

    通过使用 Redis 的 setnx 命令和 expire 命令,可以实现分布式锁的功能。但是,需要注意的是,在实现分布式锁时,需要考虑到各种可能的异常情况,例如服务器挂掉等,并且需要对分布式锁进行优化,例如加过期时间,...

    Redis分布式锁实现Redisson 15问.doc

    Redis分布式锁实现Redisson 15问 Redis分布式锁是指在分布式系统中,多个服务实例之间对同一个资源...Redisson是一个功能强大且高效的分布式锁实现,它提供了一个可靠的加锁机制,可以满足分布式系统中的加锁需求。

    redis和zookeeper实现分布式锁的区别

    Redis和Zookeeper是两种常用的分布式协调服务,它们都可以用来实现分布式锁,但具体实现方式和特性有所不同。 **Redis分布式锁** Redis作为内存数据库,具有高性能、低延迟的特点,常被用作实现分布式锁。Redis...

    Redis实现WebSocket分布式通信

    基于Redis实现Spring WebSocket分布式通信。 环境说明:spring-boot-2.5.6、springframework-5.3.12,spring-websocket-5.3.12、spring-data-redis-2.5.6、JDK 8 实现服务端多节点的情况下,主动推送消息到客户端...

    使用Redis和Zookeeper实现分布式锁 基于redis和zookeeper工具集-包括循环锁实现、循环速率限制器、循环序列等.zip

    使用Redis和Zookeeper实现分布式锁。基于redis和zookeeper工具集-包括循环锁实现、循环速率限制器、循环序列等分布式套件基于redis和zookeeper的全局工具集-包括全局锁实现、全局速率限制器、全局ID生成器等。使用...

    C++基于redis的分布式锁redisAPI

    总的来说,通过C++和Redis API,我们可以实现高效且可靠的分布式锁,利用Redis的原子操作特性保证了并发环境下的安全性。`cpp_redis`库作为客户端工具,使得C++开发者能够方便地与Redis进行通信,而Boost库的使用则...

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

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

    基于Redis实现分布式应用限流的方法

    以下是一个基于Redis的分布式限流实现,利用了Redis的数据结构——有序集合(Sorted Set)来创建令牌桶算法的一个变体: ```java public class RedisRateLimiter { private static final String BUCKET = "BUCKET...

    redis分布式缓存中间件培训PPT

    4. 社交网络 – Redis提供的数据结构可以相对比较容易地实现社交网站的必备功能,如赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等。 5. 消息队列系统 – Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的...

    Redis高可用的分布式锁

    本篇主要讨论的是如何基于SpringBoot框架,利用Redis实现高可用的分布式锁,并通过注解的方式简化代码。 首先,分布式锁的核心目的是在多节点环境下保证同一资源在同一时刻只能被一个客户端独占。Redis因其高性能、...

    C#实操控制并发之Lock和Redis分布式锁

    以下是一个简单的C# Redis分布式锁实现: ```csharp public bool TryAcquireLock(string lockKey, int lockTimeout) { var redis = ConnectionMultiplexer.Connect("localhost:6379"); var db = redis.Get...

    Redis线程模型,分布式一致性1

    为了实现高性能和高可用性,Redis采用了多线程模型和分布式架构。 Redis线程模型 Redis的线程模型是基于Reactor模式的单线程模型。Reactor模式是指在服务器端使用单线程来处理所有的客户端请求,而不是使用一个...

    用Redis实现分布式锁_redis_分布式_

    本教程将深入探讨如何利用Redis来构建分布式锁。 一、Redis分布式锁的优势 1. 响应速度:Redis是内存数据库,读写速度快,非常适合处理高并发的锁请求。 2. 原子性:Redis的操作是原子性的,如`SETNX`(设置如果不...

    scrapy+Fiddler+celery+ redis +mysql实现分布式定时启动并异步快速动态爬取股票数据功能.zip

    python爬虫 具体功能: 1.... 2.... 3.... 4....5.使用celery消息队列工具,自定义程序自动运行和间隔动态运行,实现数据的动态获取 6.使用redis保存celery中borker消息的队列...采用Redis做url动态缓存,实现分布式爬取系统

Global site tag (gtag.js) - Google Analytics