以下是一个简单的基于 Redis 实现的分布式锁的 Java 代码示例:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;

public class DistributedLock {

    private static final String LOCK_KEY = 'distributed_lock';
    private static final int LOCK_EXPIRE_TIME = 5000; // 锁的过期时间,单位毫秒
    private static final int SLEEP_TIME = 100; // 线程休眠时间,单位毫秒

    private Jedis jedis;

    public DistributedLock(Jedis jedis) {
        this.jedis = jedis;
    }

    public boolean lock() {
        while (true) {
            // 尝试获取锁
            String result = jedis.set(LOCK_KEY, 'locked', SetParams.setParams().nx().px(LOCK_EXPIRE_TIME));
            if ('OK'.equals(result)) {
                return true; // 获取锁成功
            }
            // 休眠一段时间再重试
            try {
                Thread.sleep(SLEEP_TIME);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void unlock() {
        jedis.del(LOCK_KEY);
    }
}

使用示例:

Jedis jedis = new Jedis('localhost', 6379);
DistributedLock lock = new DistributedLock(jedis);

if (lock.lock()) {
    try {
        // 执行需要保证互斥的代码
    } finally {
        lock.unlock();
    }
}

这个示例中,我们使用 Redis 的 set 命令来获取锁,其中 nx 选项表示只在键不存在时才设置值,px 选项表示设置键的过期时间。如果获取锁成功,返回 OK;否则返回 null。在获取锁失败后,我们通过线程休眠一段时间再重试,以避免一直占用 CPU 资源。释放锁时,我们直接删除对应的键即可。

Java 使用 Redis 实现分布式锁示例

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

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