欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式

 更新時(shí)間:2024年05月15日 16:46:51   作者:-luking-  
這篇文章主要介紹了Redis集群利用Redisson實(shí)現(xiàn)分布式鎖方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Redisson實(shí)現(xiàn)集群環(huán)境下的分布式鎖十分簡單:

引入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lk</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        //Redis起步依賴
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.1.7.RELEASE</version>
        </dependency>
        //Redisson起步依賴
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>3.11.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Redisson配置類

package com.lk.demo.redissionconfig;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/*
* Redisson的配置類,提供RedissonClient實(shí)例
* */
@Configuration
public class RedissionConfiguration {

    @Bean
    public RedissonClient getRedissionClient(){
        Config config=new Config();
        //集群模式,集群節(jié)點(diǎn)的地址須使用“redis://”前綴,否則將會(huì)報(bào)錯(cuò)。
        //此例集群為3節(jié)點(diǎn),各節(jié)點(diǎn)1主1從
        config.useClusterServers().addNodeAddress("redis://192.168.37.134:7001","redis://192.168.37.134:7002",
                "redis://192.168.37.134:7003","redis://192.168.37.134:7004","redis://192.168.37.134:7005","redis://192.168.37.134:7006");
        return Redisson.create(config);
    }
}

分布式鎖

package com.lk.demo.redissionconfig;

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;


import java.util.concurrent.TimeUnit;

/*
* 利用RedissonClient部署及解除分布式鎖
* 直接調(diào)用lock、unlock方法,此方法只允許1個(gè)線程取得鎖,其余線程將自旋等待
* */

@Repository
public class HandlerLock{
    @Autowired
    private RedisTemplate<String,String> rt;
    //@Qualifier("redisson") //在org.redisson.spring.starter包中,可以從配置文件讀取redis配置,并返回redissonclient對象
    @Qualifier("getRedissionClient")//指定從本地自寫的class中取得實(shí)例
    @Autowired
    private RedissonClient redissonClient;
    //實(shí)驗(yàn)方法,測試分布式鎖
    public void doLock(String lockname){
        //從RedissonClient取得Rlock實(shí)例
        RLock rlock=redissonClient.getLock(lockname);
        //嘗試取鎖,有效期為3s,到期后自動(dòng)釋放。如果取得鎖繼續(xù)執(zhí)行。取鎖失敗則自旋。
        //亦可使用rlock.tryLock()方法,此方法也為嘗試取鎖,并返回boolean結(jié)果
        rlock.lock(3,TimeUnit.SECONDS);
        //以下為測試業(yè)務(wù)代碼,
        System.out.println(Thread.currentThread().getName()+"取得鎖");
        int store=Integer.valueOf(rt.opsForValue().get("store"));
        if(store>0)
        {
            System.out.printf("售出1,當(dāng)前庫存為%d\n",--store);
            rt.opsForValue().set("store",String.valueOf(store));
        }else
            System.out.println("已售完,下次再來吧");
        //業(yè)務(wù)完成,釋放鎖
        rlock.unlock();
        System.out.println("解鎖");
    }
}


測試Controller

@Controller
public class Controllerdemo {
    @Autowired
    private HandlerLock handlerLock;
    @RequestMapping("/hello")
    @ResponseBody
    public void demo(){
        handlerLock.doLock("luking");
    }

}

并發(fā)測試

啟動(dòng)SpringBoot,使用Jmeter進(jìn)行并發(fā)壓力測試,Redis中store字段現(xiàn)有值100。

500線程并發(fā),循環(huán)2次

控制臺(tái)結(jié)果輸出

redis緩存

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis安裝配置與常用命令

    Redis安裝配置與常用命令

    Redis 是一款開源的,基于 BSD 許可的,高級(jí)鍵值 (key-value) 緩存 (cache) 和存儲(chǔ) (store) 系統(tǒng)。由于 Redis 的鍵包括 string,hash,list,set,sorted set,bitmap 和 hyperloglog,所以常常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。
    2018-03-03
  • Redis應(yīng)用之簽到的使用

    Redis應(yīng)用之簽到的使用

    在很多時(shí)候,我們遇到用戶簽到的場景,本文主要介紹了Redis應(yīng)用之簽到的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 關(guān)于使用Redisson訂閱數(shù)問題

    關(guān)于使用Redisson訂閱數(shù)問題

    本文主要介紹了關(guān)于使用Redisson訂閱數(shù)問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Redis 布隆過濾器的原理和實(shí)踐教程

    Redis 布隆過濾器的原理和實(shí)踐教程

    布隆過濾器適用于需要快速判斷一個(gè)元素是否可能存在于集合中的場景,例如網(wǎng)絡(luò)爬蟲中的去重、緩存中的數(shù)據(jù)判斷等,這篇文章主要介紹了Redis 布隆過濾器的原理和實(shí)踐,需要的朋友可以參考下
    2024-02-02
  • Windows系統(tǒng)安裝Redis的詳細(xì)圖文教程

    Windows系統(tǒng)安裝Redis的詳細(xì)圖文教程

    但有時(shí)候想在windows下折騰下Redis,那么就可以參考下面的方法了,雖然腳本之家小編以前整理了一些,發(fā)現(xiàn)這篇做的比較詳細(xì),下載也給出來了
    2018-08-08
  • 詳解Redis如何處理Hash沖突

    詳解Redis如何處理Hash沖突

    在 Redis 中,哈希表是一種常見的數(shù)據(jù)結(jié)構(gòu),通常用于存儲(chǔ)對象的屬性,對于哈希表,最常遇到的是哈希沖突,那么,當(dāng) Redis遇到Hash沖突會(huì)如何處理?本文我們將詳細(xì)介紹Redis如何處理哈希沖突,需要的朋友可以參考下
    2024-09-09
  • Redis有序集合類型的操作_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Redis有序集合類型的操作_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    今天通過本文給大家說一下Redis中最后一個(gè)數(shù)據(jù)類型 “有序集合類型”,需要的的朋友參考下吧
    2017-08-08
  • Redis哨兵模式的實(shí)現(xiàn)

    Redis哨兵模式的實(shí)現(xiàn)

    Redis的哨兵模式是一種用于自動(dòng)監(jiān)控Redis實(shí)例狀態(tài)并在主服務(wù)器出現(xiàn)故障時(shí)自動(dòng)切換到從服務(wù)器的機(jī)制,本文主要介紹了Redis哨兵模式的實(shí)現(xiàn),感興趣的可以了解一下
    2024-02-02
  • Redis:Redisson分布式鎖的使用方式(推薦使用)

    Redis:Redisson分布式鎖的使用方式(推薦使用)

    這篇文章主要介紹了Redis:Redisson分布式鎖的使用方式(推薦使用),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • CentOS 6.6下Redis安裝配置記錄

    CentOS 6.6下Redis安裝配置記錄

    這篇文章主要介紹了CentOS 6.6下Redis安裝配置記錄,本文給出了安裝需要的支持環(huán)境、安裝redis、測試Redis、配置redis等步驟,需要的朋友可以參考下
    2015-03-03

最新評(píng)論