最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis-plus基于redis實(shí)現(xiàn)二級(jí)緩存過(guò)程解析

 更新時(shí)間:2020年08月07日 09:41:18   作者:william_zhao  
這篇文章主要介紹了Mybatis-plus基于redis實(shí)現(xiàn)二級(jí)緩存過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1. mybatis-plus開(kāi)啟二級(jí)緩存

spring:
 datasource:
  type: com.alibaba.druid.pool.DruidDataSource
  driver-class-name: com.mysql.jdbc.Driver
  jdbc-url: jdbc:mysql://192.168.222.155:3306/sys?serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=utf-8
  username: root
  password: 123456
 redis:
  host: 39.104.203.155
  port: 6380
  password: 123456
  database: 1
  timeout: 2000ms # 連接超時(shí)時(shí)間(毫秒)默認(rèn)是2000ms
  lettuce:
   pool:
    max-active: 200 # 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)
    max-wait: -1ms # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)
    max-idle: 100 # 連接池中的最大空閑連接
    min-idle: 50 # 連接池中的最小空閑連接
   shutdown-timeout: 100ms
#  sentinel: # 哨兵模式
#   master: mymaster
#   nodes: 192.168.222.155:26379,192.168.222.155:26380,192.168.222.155:26381
mybatis-plus: mapper-locations: classpath*:/mapper/*.xml type-aliases-package: com.redis.shaobing.entity global-config:  db-config:   id-type: auto   table-underline: true configuration:  cache-enabled: true  map-underscore-to-camel-case: true

2. 自定義自己的緩存管理

package com.redis.shaobing.utils;


import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.cache.Cache;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * @author shuangyueliao
 * @create 2019/9/10 14:02
 * @Version 0.1
 */
@Slf4j
public class MybatisRedisCache implements Cache {


  // 讀寫(xiě)鎖
  private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true);

  //這里使用了redis緩存,使用springboot自動(dòng)注入
  private RedisTemplate<String, Object> redisTemplate;

  private String id;

  public MybatisRedisCache(final String id) {
    if (id == null) {
      throw new IllegalArgumentException("Cache instances require an ID");
    }
    this.id = id;
  }

  public RedisTemplate<String, Object> getRedisTemplate() {
    redisTemplate = (RedisTemplate<String, Object>) ApplicationContextUtils.getBean("redisTemplate");
    Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    serializer.setObjectMapper(mapper);
    //使用StringRedisSerializer來(lái)序列化和反序列化redis的key值
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(serializer);
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    redisTemplate.setHashValueSerializer(serializer);
    redisTemplate.afterPropertiesSet();
    return redisTemplate;
  }

  @Override
  public String getId() {
    return this.id;
  }

  @Override
  public void putObject(Object key, Object value) {
    redisTemplate = getRedisTemplate();
    if (value != null) {
      redisTemplate.opsForHash().put(id.toString(), key.toString(), value);
    }
  }

  @Override
  public Object getObject(Object key) {
    redisTemplate = getRedisTemplate();
    try {
      if (key != null) {
        return redisTemplate.opsForHash().get(id.toString(), key.toString());
      }
    } catch (Exception e) {
      e.printStackTrace();
      log.error("緩存出錯(cuò) ");
    }
    return null;
  }

  @Override
  public Object removeObject(Object key) {
    redisTemplate = getRedisTemplate();
    if (key != null) {
      redisTemplate.delete(key.toString());
    }
    return null;
  }

  @Override
  public void clear() {
    System.out.println("清空緩存");
    log.debug("清空緩存");
    redisTemplate = getRedisTemplate();
    redisTemplate.delete(id.toString());
  }

  @Override
  public int getSize() {
    redisTemplate = getRedisTemplate();
    Long size = redisTemplate.opsForHash().size(id.toString());
    return size.intValue();
  }

  @Override
  public ReadWriteLock getReadWriteLock() {
    return this.readWriteLock;
  }
}

3. 在mapper上加上注解@CacheNamespace或者在Mpper.xml中加入<cache type="com.redis.shaobing.utils.MybatisRedisCache"/>

兩種方式根據(jù)實(shí)際情況二選一即可!

@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
@Mapper
public interface SysConfigDao extends BaseMapper<SysConfig> {}

如果調(diào)用該mapper下的方法,那么會(huì)使用redis緩存

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis之基于SpringBoot實(shí)現(xiàn)Redis stream實(shí)時(shí)流事件處理方式

    redis之基于SpringBoot實(shí)現(xiàn)Redis stream實(shí)時(shí)流事件處理方式

    這篇文章主要介紹了redis之基于SpringBoot實(shí)現(xiàn)Redis stream實(shí)時(shí)流事件處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能

    JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 一文盤(pán)點(diǎn)五種最常用的Java加密算法

    一文盤(pán)點(diǎn)五種最常用的Java加密算法

    大家平時(shí)的工作中,可能也在很多地方用到了加密、解密,比如:支付功能等,所以本文為大家盤(pán)點(diǎn)了Java中五個(gè)常用的加密算法,希望對(duì)大家有所幫助
    2023-06-06
  • Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能

    Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能

    這篇文章主要介紹了Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能,需要的朋友可以參考下
    2017-09-09
  • SpringBoot2.x 參數(shù)校驗(yàn)問(wèn)題小結(jié)

    SpringBoot2.x 參數(shù)校驗(yàn)問(wèn)題小結(jié)

    這篇文章主要介紹了SpringBoot2.x 參數(shù)校驗(yàn)一些問(wèn)題總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn)

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn),雙向鏈表是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它允許在鏈表中的任意位置進(jìn)行高效的插入和刪除操作,需要的朋友可以參考下
    2022-05-05
  • Java工廠模式的深入了解

    Java工廠模式的深入了解

    這篇文章主要為大家介紹了Java工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 關(guān)于springcloud報(bào)錯(cuò)報(bào)UnsatisfiedDependencyException的問(wèn)題

    關(guān)于springcloud報(bào)錯(cuò)報(bào)UnsatisfiedDependencyException的問(wèn)題

    這篇文章主要介紹了關(guān)于springcloud報(bào)錯(cuò)報(bào)UnsatisfiedDependencyException的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java集合之HashMap用法詳解

    Java集合之HashMap用法詳解

    這篇文章主要介紹了Java集合之HashMap用法,結(jié)合實(shí)例形式分析了java map集合中HashMap定義、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • 如何在Spring Boot中建立連接及測(cè)試

    如何在Spring Boot中建立連接及測(cè)試

    對(duì)于剛接觸MQTT的開(kāi)發(fā)者來(lái)說(shuō),了解如何在Spring Boot項(xiàng)目中集成MQTT客戶端并建立連接是邁向?qū)嶋H應(yīng)用的重要一步,今天,我將分享一個(gè)詳細(xì)的入門(mén)指南,帶你一步步在Spring Boot中建立MQTT連接,并通過(guò)JUnit進(jìn)行簡(jiǎn)單的單元測(cè)試,感興趣的朋友一起看看吧
    2024-12-12

最新評(píng)論

隆化县| 兴安盟| 昌乐县| 谢通门县| 乌兰浩特市| 顺义区| 泽州县| 北安市| 涟水县| 浙江省| 肇源县| 博客| 万全县| 定边县| 大方县| 来安县| 连云港市| 大田县| 溧水县| 永平县| 内乡县| 石泉县| 绥滨县| 洪湖市| 墨竹工卡县| 连平县| 定州市| 抚松县| 溆浦县| 武功县| 万全县| 克山县| 铜山县| 上虞市| 诸城市| 当雄县| 新巴尔虎左旗| 商洛市| 泾阳县| 云南省| 河西区|