使用Redisson工具實(shí)現(xiàn)分布式鎖

上一篇 <<<Redis分布式鎖的實(shí)現(xiàn)代碼示例
下一篇 >>>Redis集群模式之主從復(fù)制原理及存在的缺陷


1、引入redisson依賴(lài)包

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.11.0</version>
</dependency>

2、增加配置文件

redisson.singleServerConfig.address=127.0.0.1:6379

3、Redisson實(shí)現(xiàn)分布式鎖

@GetMapping("/seckill")
public synchronized String seckill() throws InterruptedException {
    RLock seckillLock = redissonClient.getLock("seckillLock");
    try {
        seckillLock.tryLock(3, TimeUnit.SECONDS);
        String stock = stringRedisTemplate.opsForValue().get("Stock");
        int nStock = Integer.valueOf(stock) - 1;
        if (nStock > 0) {
            //成功秒殺到
            nStock = Integer.valueOf(stock) - 1;
            stringRedisTemplate.opsForValue().set("Stock", nStock + "");
            System.out.println("成功秒殺商品了,還剩余商品:" + nStock);
            return "恭喜您,下單成功";
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        seckillLock.unlock();
    }
    System.out.println("商品庫(kù)存不足");
    return "當(dāng)前庫(kù)存不足";
}

4、getLock和tryLock的區(qū)別

tryLock(long time, TimeUnit unit)方法和tryLock()方法是類(lèi)似的,只不過(guò)區(qū)別在于這個(gè)方法在拿不到鎖時(shí)會(huì)等待一定的時(shí)間,在時(shí)間期限之內(nèi)如果還拿不到鎖,就返回false。如果一開(kāi)始拿到鎖或者在等待期間內(nèi)拿到了鎖,則返回true。


推薦閱讀:
<<<分布式緩存與本地緩存的區(qū)別
<<<Ehcache基礎(chǔ)知識(shí)
<<<SpringBoot整合Ehcache
<<<Redis的5種數(shù)據(jù)類(lèi)型
<<<Redis存放實(shí)體對(duì)象的方式及區(qū)別
<<<Redis的應(yīng)用場(chǎng)景匯總
<<<Redis高效及線程安全的真正原因
<<<Redis為啥要分為16個(gè)庫(kù)
<<<RDB和AOF持久化方式的區(qū)別
<<<Redis與數(shù)據(jù)庫(kù)的一致性解決方案
<<<SpringBoot整合Redis的注解版本完成數(shù)據(jù)緩存
<<<Redis的淘汰策略
<<<Redis的事務(wù)操作(Mult和Watch)知識(shí)點(diǎn)
<<<Redis的過(guò)期機(jī)制使用場(chǎng)景示例
<<<Redis實(shí)現(xiàn)分布式鎖的原理分析
<<<Redis分布式鎖的實(shí)現(xiàn)代碼示例
<<<Redis集群模式之主從復(fù)制原理及存在的缺陷
<<<Redis集群模式之哨兵模式
<<<Redis集群模式之Cluster去中心化分片集群
<<<Linux環(huán)境下安裝單機(jī)Redis
<<<Redis Cluster集群環(huán)境搭建
<<<Redis Cluster如何動(dòng)態(tài)擴(kuò)容與縮容
<<<Redis Cluster主從節(jié)點(diǎn)自動(dòng)切換
<<<Redis集群模式的類(lèi)型和缺陷匯總
<<<Redis緩存的穿透、擊穿和雪崩效應(yīng)
<<<Redis解決穿透擊穿問(wèn)題時(shí)使用的布隆過(guò)濾器知識(shí)點(diǎn)
<<<Redis與MySQL的數(shù)據(jù)同步解決方案
<<<阿里云的Canal框架實(shí)現(xiàn)Redis與Mysql同步原理及代碼示例
<<<阿里云的Canal框架配置
<<<Redis官方提出的redlock分布式鎖
<<<Redis的調(diào)優(yōu)設(shè)置
<<<Redis常見(jiàn)問(wèn)題匯總

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容