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

SpringBoot使用Redis實(shí)現(xiàn)分布式緩存

 更新時(shí)間:2023年04月03日 14:05:58   作者:Java Fans  
這篇文章主要介紹了SpringBoot redis分布式緩存實(shí)現(xiàn)過程解析,文中通過示例代碼解析的非常詳細(xì),感興趣的同學(xué)可以參考閱讀

springboot使用Redis實(shí)現(xiàn)分布式緩存

1、環(huán)境構(gòu)建

1.1 通過MybatisX工具逆向功能快速初始化一個(gè)工程(springboot+mybatis-plus)

1.2 構(gòu)建controller層測(cè)試各模塊的功能

1.3 相同的請(qǐng)求沒有實(shí)現(xiàn)共享數(shù)據(jù),需要開啟mybatis的二級(jí)緩存

1.4 springboot環(huán)境下開啟mybatis-plus的二級(jí)緩存

1.5編寫獲取spring工廠的工具類

@Component
public class ApplicationContextUtils implements ApplicationContextAware {

    private  static ApplicationContext applicationContext;
    
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
    public static Object getBean(String beanName){
        return applicationContext.getBean(beanName);
    }
}

1.6編寫Redis緩存類

@Slf4j
public class RedisCache  implements Cache {

    private final String id;

    public RedisCache(String id){
        this.id = id;
    }

    // 操作模塊的mapper文件的命名空間 唯一標(biāo)識(shí)符
    @Override
    public String getId() {
        log.info("id= {}",id);
        return this.id;
    }

    // 將數(shù)據(jù)寫入redis
    @Override
    public void putObject(Object key, Object value) {

        log.info("===============將查詢的數(shù)據(jù)開始寫入緩存===============");
        RedisTemplate redisTemplate = getRedisTemplate();
        redisTemplate.opsForHash().put(id, key.toString(), value);

        log.info("===============將查詢的數(shù)據(jù)寫入緩存完畢===============");

    }

    // 獲取緩存中的數(shù)據(jù)
    @Override
    public Object getObject(Object key) {
        log.info("============開始從緩存中獲取數(shù)據(jù)=============");
        RedisTemplate redisTemplate = getRedisTemplate();
        log.info("============從緩存中獲取數(shù)據(jù)完畢=============");
        return redisTemplate.opsForHash().get(id, key.toString());
    }

    // 移除緩存中的數(shù)據(jù)
    @Override
    public Object removeObject(Object key) {
        return null;
    }

    // 清空緩存
    @Override
    public void clear() {
        log.info("==========清空緩存=============");
        RedisTemplate redisTemplate = getRedisTemplate();
        redisTemplate.delete(id);
    }

    // 獲取緩存的數(shù)量
    @Override
    public int getSize() {
        RedisTemplate redisTemplate = (RedisTemplate) 			ApplicationContextUtils.getBean("redisTemplate");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        int size = redisTemplate.opsForHash().size(id).intValue();
        return size;
    }


    private RedisTemplate getRedisTemplate(){
        RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }

}

1.7Redis中有關(guān)聯(lián)關(guān)系緩存數(shù)據(jù)的處理

@CacheNamespaceRef(DeptMapper.class)  // 引用有關(guān)聯(lián)關(guān)系的命名空間
public interface EmpMapper extends BaseMapper<Emp> {

}
注:以上設(shè)置完成后,兩個(gè)模塊會(huì)使用相同的key(命名空間)存儲(chǔ)數(shù)據(jù)到緩存中  

1.8 Redis中key進(jìn)行摘要算法

DigestUtils.md5DigestAsHex(key.toString().getBytes()) // 通過該操作可以減少key的長度

Redis實(shí)現(xiàn)主從復(fù)制

1.準(zhǔn)備三臺(tái)已經(jīng)安裝Redis的虛擬機(jī)

???????2.查看三臺(tái)虛擬機(jī)的ip地址

3.通過遠(yuǎn)程連接工具FinalShell連接

4.修改從節(jié)點(diǎn)配置文件

啟動(dòng)三臺(tái)服務(wù)器上的redis后,輸入一下命令查看redis主從配置狀態(tài)

info replication

修改從節(jié)點(diǎn)服務(wù)器的配置文件redis.conf

replicaof  主機(jī)ip 主機(jī)redis接口
masterauth 密碼

修改后重啟兩個(gè)從機(jī),在主機(jī)和從機(jī)分別輸入一下命令查看如下:

info replication

驗(yàn)證主從架構(gòu)

至此主從架構(gòu)設(shè)置完成

Redis集群的構(gòu)建

以上結(jié)構(gòu)的集群構(gòu)建可以在一臺(tái)虛擬機(jī)環(huán)境中進(jìn)行模擬,首先創(chuàng)建一臺(tái)已經(jīng)安裝好Redis數(shù)據(jù)庫的虛擬機(jī)

開啟虛擬機(jī)并在虛擬機(jī)的根路徑下創(chuàng)建好7000,7001,7002,7003,7004,7005六個(gè)文件夾,之后將redis解壓目錄下的redis.conf配置文件拷貝到以上幾個(gè)文件夾中,同時(shí)按照以下參數(shù)完成配置文件的修改

修改配置文件中的參數(shù)

以上6個(gè)文件夾中文件全部修改完畢之后,可以按照以下指令啟動(dòng)全部的redis節(jié)點(diǎn)

查看redis服務(wù)是否已經(jīng)全部啟動(dòng)成功

ps aux|grep  redis

全部啟動(dòng)成功之后,執(zhí)行以下指令,將多個(gè)節(jié)點(diǎn)組合成集群,同時(shí)實(shí)現(xiàn)主從備份

確認(rèn)集群的主從從節(jié)點(diǎn)信息

輸入yes,確認(rèn)主從節(jié)點(diǎn)信息后,輸出以下信息,表示集群構(gòu)建成功

使用一下指令登錄集群中的任意節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)的操作,查看集群是否可正常工作

./redis-cli -a cyclone -c -h 192.168.220.11 -p 7001   連接

-a 表示連接密碼  沒有可省略
-c 表示集群方式進(jìn)行啟動(dòng)
-h ip 地址
-p 表示端口號(hào)

如果在springboot項(xiàng)目中連接Redis集群可按照一下方式進(jìn)行配置

redis:
    cluster: 
       nodes: 192.168.1.1:6379 ,.....

以上就是SpringBoot使用Redis實(shí)現(xiàn)分布式緩存的詳細(xì)內(nèi)容,更多關(guān)于Springboot Redis分布式緩存的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解析Java的Spring框架的基本結(jié)構(gòu)

    解析Java的Spring框架的基本結(jié)構(gòu)

    這篇文章主要介紹了Java的Spring框架的基本結(jié)構(gòu),作者從Spring的設(shè)計(jì)角度觸發(fā)解析其基礎(chǔ)的架構(gòu)內(nèi)容,需要的朋友可以參考下
    2016-03-03
  • Java如何導(dǎo)入Jsoup庫做一個(gè)有趣的爬蟲項(xiàng)目

    Java如何導(dǎo)入Jsoup庫做一個(gè)有趣的爬蟲項(xiàng)目

    Jsoup庫是一款Java的HTML解析器,可用于從網(wǎng)絡(luò)或本地文件中獲取HTML文檔并解析其中的數(shù)據(jù),這篇文章給大家介紹Java導(dǎo)入Jsoup庫做一個(gè)有趣的爬蟲項(xiàng)目,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • SpringCloud:feign對(duì)象傳參和普通傳參及遇到的坑解決

    SpringCloud:feign對(duì)象傳參和普通傳參及遇到的坑解決

    這篇文章主要介紹了SpringCloud:feign對(duì)象傳參和普通傳參及遇到的坑解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java中的十個(gè)大類總結(jié)

    java中的十個(gè)大類總結(jié)

    java.lang.string字符串類將是無可爭(zhēng)議的冠軍在任何一天的普及和不可以否認(rèn)。這是最后一個(gè)類,用來創(chuàng)建操作不可變字符串字面值
    2013-10-10
  • Springboot如何實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密

    Springboot如何實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密

    這篇文章主要介紹了Springboot如何實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • spring?boot學(xué)習(xí)筆記之操作ActiveMQ指南

    spring?boot學(xué)習(xí)筆記之操作ActiveMQ指南

    ActiveMQ是一種開源的基于JMS規(guī)范的一種消息中間件的實(shí)現(xiàn),ActiveMQ的設(shè)計(jì)目標(biāo)是提供標(biāo)準(zhǔn)的,面向消息的,能夠跨越多語言和多系統(tǒng)的應(yīng)用集成消息通信中間件,這篇文章主要給大家介紹了關(guān)于spring?boot學(xué)習(xí)筆記之操作ActiveMQ指南的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • ThreadLocal原理介紹及應(yīng)用場(chǎng)景

    ThreadLocal原理介紹及應(yīng)用場(chǎng)景

    本文詳細(xì)講解了ThreadLocal原理介紹及應(yīng)用場(chǎng)景,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Java生成二維碼的2種實(shí)現(xiàn)方法

    Java生成二維碼的2種實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java生成二維碼的2種實(shí)現(xiàn)方法,二維碼的實(shí)質(zhì)就是一個(gè)鏈接地址,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • springboot新建項(xiàng)目jdk只有17/21,無法選中1.8解決辦法

    springboot新建項(xiàng)目jdk只有17/21,無法選中1.8解決辦法

    最近博主也有創(chuàng)建springboot項(xiàng)目,發(fā)現(xiàn)了IntelliJ IDEA在通過Spring Initilizer初始化項(xiàng)目的時(shí)候已經(jīng)沒有java8版本的選項(xiàng)了,這里給大家總結(jié)下,這篇文章主要給大家介紹了springboot新建項(xiàng)目jdk只有17/21,無法選中1.8的解決辦法,需要的朋友可以參考下
    2023-12-12
  • springBoot中的CORS跨域注解@CrossOrigin詳解

    springBoot中的CORS跨域注解@CrossOrigin詳解

    這篇文章主要介紹了springBoot中的CORS跨域注解@CrossOrigin詳解,通常,服務(wù)于?JS?的主機(jī)(例如?example.com)與服務(wù)于數(shù)據(jù)的主機(jī)(例如?api.example.com)是不同的,在這種情況下,CORS?可以實(shí)現(xiàn)跨域通信,需要的朋友可以參考下
    2023-12-12

最新評(píng)論