public class RedisClient {
@Test
public void sortedSetPagenation(){
releaseDistributedLock("test","123");
String test = occupyDistributedLock("test");
System.out.println(test);
String test1 = occupyDistributedLock("test");
System.out.println(test1);
// releaseDistributedLock(test1,"123");
}
/**
* 占用锁
* @param lockKey 锁key
* @return 锁id
*/
public static String occupyDistributedLock(String lockKey) {
//获得jedis实例
Jedis jedis = jedisPool.getResource();
//锁id(必须拥有此id才能释放锁)
String lockId = "123";
//占用锁同时设置失效时间
/**
nxxx: 只能取NX或者XX,如果取NX,则只有当key不存在是才进行set,如果取XX,则只有当key已经存在时才进行set
expx: 只能取EX或者PX,代表数据过期时间的单位,EX代表秒,PX代表毫秒。
time: 过期时间,单位是expx所代表的单位。
5 分钟
*/
String isSuccees = jedis.set(lockKey, lockId, "NX","EX", 300);
//占用锁成功返回锁id,否则返回null
if("OK".equals(isSuccees)){
return lockId;
}else{
return null;
}
}
/**
* 释放锁
* @param lockKey 锁key
* @param lockId 加锁id
*/
public static void releaseDistributedLock(String lockKey,String lockId) {
if(lockId != null){
//获得jedis实例
Jedis jedis = jedisPool.getResource();
//执行Lua代码删除lockId匹配的锁
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(lockId));
}
}
}
Redis—— 分布式锁(Jedis)
于 2022-03-03 11:42:20 首次发布