以下是一个简单的 Redis 分布式锁的 Java 实现:

import redis.clients.jedis.Jedis;

public class RedisLock {

    private Jedis jedis;
    private String lockKey;
    private int expireTime = 30; // 锁过期时间,单位秒
    private boolean locked = false;

    public RedisLock(Jedis jedis, String lockKey) {
        this.jedis = jedis;
        this.lockKey = lockKey;
    }

    // 获取锁,如果获取成功返回 true,否则返回 false
    public boolean lock() {
        long expires = System.currentTimeMillis() + expireTime * 1000 + 1;
        String expiresStr = String.valueOf(expires);

        if (jedis.setnx(lockKey, expiresStr) == 1) {
            locked = true;
            return true;
        }

        String currentValueStr = jedis.get(lockKey);
        if (currentValueStr != null && Long.parseLong(currentValueStr) < System.currentTimeMillis()) {
            // 锁已经过期,尝试获取锁
            String oldValueStr = jedis.getSet(lockKey, expiresStr);
            if (oldValueStr != null && oldValueStr.equals(currentValueStr)) {
                locked = true;
                return true;
            }
        }

        return false;
    }

    // 释放锁
    public void unlock() {
        if (locked) {
            jedis.del(lockKey);
            locked = false;
        }
    }
}

使用方法:

import redis.clients.jedis.Jedis;

public class TestRedisLock {

    public static void main(String[] args) {
        Jedis jedis = new Jedis('localhost', 6379);

        RedisLock lock = new RedisLock(jedis, 'test_lock');

        try {
            if (lock.lock()) {
                // 获取锁成功,执行业务逻辑
                System.out.println('获取锁成功');
            } else {
                // 获取锁失败,可能有其他进程在处理
                System.out.println('获取锁失败');
            }
        } finally {
            lock.unlock(); // 释放锁
        }

        jedis.close();
    }
}
Java 实现 Redis 分布式锁:简单易懂的代码示例

原文地址: https://www.cveoy.top/t/topic/lSsO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录