Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java分布式锁

作者:故事没有她   发布日期:2025-11-01   浏览:32

import redis.clients.jedis.Jedis;
import java.util.Collections;

public class DistributedLock {

    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";

    private Jedis jedis; // Redis客户端

    /**
     * 尝试获取分布式锁
     * @param lockKey 锁的key
     * @param requestId 请求标识
     * @param expireTime 超时时间(毫秒)
     * @return 是否获取成功
     */
    public boolean tryGetDistributedLock(String lockKey, String requestId, int expireTime) {
        String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
        if (LOCK_SUCCESS.equals(result)) {
            return true;
        }
        return false;
    }

    /**
     * 释放分布式锁
     * @param lockKey 锁的key
     * @param requestId 请求标识
     * @return 是否释放成功
     */
    public boolean releaseDistributedLock(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 = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));
        if (result.toString().equals("1")) {
            return true;
        }
        return false;
    }
}

解释说明:

  1. Redis 客户端:使用 Jedis 作为 Redis 客户端,与 Redis 进行交互。
  2. tryGetDistributedLock 方法
    • 使用 SET 命令尝试设置锁。NX 表示只有当锁不存在时才设置,PX 表示设置锁的过期时间(以毫秒为单位)。
    • 如果设置成功,则返回 true,表示获取锁成功;否则返回 false
  3. releaseDistributedLock 方法
    • 使用 Lua 脚本确保原子性操作,先检查锁是否存在且属于当前请求,然后删除锁。
    • 如果删除成功,则返回 true;否则返回 false

这个实现确保了分布式锁的安全性和可靠性。

上一篇:java 加密

下一篇:java list 交集

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站