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; } } }
利用redis的transaction功能,实现分布式下加锁
猜你喜欢
转载自wb8206656.iteye.com/blog/1666289
今日推荐
周排行