Redis应用实例》Java实现(3):用 Redis 实现分布式锁

本章代码演示了使用 Redis 实现分布式锁。
通过 Redis 的 SET 命令(带 NX 和 EX 选项)实现基本的分布式锁功能,演示了锁的获取、锁的互斥性以及锁的超时释放机制。
 

package com.foxbill.redisinaction;

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

/**
 * 用redis实现锁
 */
public class Chapter3 {
    public static void start(Jedis jedis) {
        lock(jedis);
    }

    //加锁。核心要点: setnx(原子操作) 加超时(防止死锁)
    private static void lock(Jedis jedis) {
        String key="chapter3:lock";
        String value1 = "lock value1";
        String value2 = "lock value2";
        long expireSeconds = 10; // 10秒后过期
        try {
            String result = jedis.set(key, value1, SetParams.setParams().nx().ex(expireSeconds));
            System.out.println("- set结果: " + (result != null ? "value1成功设置" : "键已存在,value1未设置"));

            Thread.sleep(2000);

            String result2 = jedis.set(key, value2, SetParams.setParams().nx().ex(expireSeconds));
            System.out.println("- set结果: " + (result2 != null ? "value2成功设置" : "键已存在,value2未设置"));

            //等待valu1超时失效后,再次设置
            Thread.sleep(11000);

            result2 = jedis.set(key, value2, SetParams.setParams().nx().ex(expireSeconds));
            System.out.println("- set结果: " + (result2 != null ? "value2成功设置" : "键已存在,value2未设置"));

        }catch (Exception e) {
            System.err.println("演示setnx和过期时间设置时出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

📌 小结
使用 SETNX 原子操作确保锁的互斥性
设置过期时间防止死锁
通过超时机制自动释放锁

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值