亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringBoot+Mybatis項目使用Redis做Mybatis的二級緩存的方法

2024-07-13 10:14:26
字體:
來源:轉載
供稿:網友

介紹

使用mybatis時可以使用二級緩存提高查詢速度,進而改善用戶體驗。

使用redis做mybatis的二級緩存可是內存可控<如將單獨的服務器部署出來用于二級緩存>,管理方便。

1.在pom.xml文件中引入redis依賴

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2.在application.properties配置文件中進行redis的配置

## Redis spring.redis.database=0spring.redis.host=172.16.3.123spring.redis.port=6379spring.redis.password=spring.redis.pool.max-active=8spring.redis.pool.max-wait=-1spring.redis.pool.max-idle=8spring.redis.pool.min-idle=0spring.redis.timeout=0

3.創建cache包,然后創建兩個類,一個ApplicationContextHolder實現ApplicationContextAware接口,具體內容如下

package com.ruijie.SpringBootandRedis.cache;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;@Componentpublic class ApplicationContextHolder implements ApplicationContextAware {  private static ApplicationContext applicationContext;  @Override  public void setApplicationContext(ApplicationContext ctx) throws BeansException {    applicationContext = ctx;  }  /**   * Get application context from everywhere   *   * @return   */  public static ApplicationContext getApplicationContext() {    return applicationContext;  }  /**   * Get bean by class   *   * @param clazz   * @param <T>   * @return   */  public static <T> T getBean(Class<T> clazz) {    return applicationContext.getBean(clazz);  }  /**   * Get bean by class name   *   * @param name   * @param <T>   * @return   */  public static <T> T getBean(String name) {    return (T) applicationContext.getBean(name);  }}

4.創建RedisCache類實現Cache接口,具體內容如下:

package com.ruijie.SpringBootandRedis.cache;import org.apache.ibatis.cache.Cache;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class RedisCache implements Cache {  private static final Logger logger = LoggerFactory.getLogger(RedisCache.class);  private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();  private final String id; // cache instance id  private RedisTemplate redisTemplate;  private static final long EXPIRE_TIME_IN_MINUTES = 30; // redis過期時間  public RedisCache(String id) {    if (id == null) {      throw new IllegalArgumentException("Cache instances require an ID");    }    this.id = id;  }  @Override  public String getId() {    return id;  }  /**   * Put query result to redis   *   * @param key   * @param value   */  @Override  public void putObject(Object key, Object value) {    try {      RedisTemplate redisTemplate = getRedisTemplate();      ValueOperations opsForValue = redisTemplate.opsForValue();      opsForValue.set(key, value, EXPIRE_TIME_IN_MINUTES, TimeUnit.MINUTES);      logger.debug("Put query result to redis");    }    catch (Throwable t) {      logger.error("Redis put failed", t);    }  }  /**   * Get cached query result from redis   *   * @param key   * @return   */  @Override  public Object getObject(Object key) {    try {      RedisTemplate redisTemplate = getRedisTemplate();      ValueOperations opsForValue = redisTemplate.opsForValue();      logger.debug("Get cached query result from redis");      System.out.println("****"+opsForValue.get(key).toString());      return opsForValue.get(key);    }    catch (Throwable t) {      logger.error("Redis get failed, fail over to db", t);      return null;    }  }  /**   * Remove cached query result from redis   *   * @param key   * @return   */  @Override  @SuppressWarnings("unchecked")  public Object removeObject(Object key) {    try {      RedisTemplate redisTemplate = getRedisTemplate();      redisTemplate.delete(key);      logger.debug("Remove cached query result from redis");    }    catch (Throwable t) {      logger.error("Redis remove failed", t);    }    return null;  }  /**   * Clears this cache instance   */  @Override  public void clear() {    RedisTemplate redisTemplate = getRedisTemplate();    redisTemplate.execute((RedisCallback) connection -> {      connection.flushDb();      return null;    });    logger.debug("Clear all the cached query result from redis");  }  /**   * This method is not used   *   * @return   */  @Override  public int getSize() {    return 0;  }  @Override  public ReadWriteLock getReadWriteLock() {    return readWriteLock;  }  private RedisTemplate getRedisTemplate() {    if (redisTemplate == null) {      redisTemplate = ApplicationContextHolder.getBean("redisTemplate");    }    return redisTemplate;  }}

5.實體類中要實現Serializable接口,并且要聲明序列號

private static final long serialVersionUID = -2566441764189220519L;

6.開啟Mybatis的二級緩存

在pom.xml配置文件中配置

mybatis.configuration.cache-enabled=true

在mapper接口中加入

@CacheNamespace(implementation=(com.demo.testdemo.cache.RedisCache.class))

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美电影在线免费观看网站| 欧美丝袜第一区| 欧美性xxxxxx| 亚洲激情久久久| 国产精品久久久久久久久久ktv| 中文字幕亚洲欧美| 日韩在线观看网址| 久久久国产精品视频| 久久国产精品亚洲| 欧美夫妻性生活xx| 亚洲美腿欧美激情另类| 精品久久久久久久中文字幕| 不卡av电影在线观看| 日韩视频免费大全中文字幕| 亚洲精品电影在线| 国内成人精品一区| 美日韩精品视频免费看| 深夜精品寂寞黄网站在线观看| 4438全国成人免费| 俺去啦;欧美日韩| 尤物九九久久国产精品的特点| 亚洲成人网在线| 欧美激情高清视频| 久久久女女女女999久久| 久久久免费av| 欧美国产日韩一区二区| 欧美午夜激情视频| 狠狠躁夜夜躁人人躁婷婷91| 亚洲999一在线观看www| 国产91精品视频在线观看| 亚洲欧洲日产国产网站| 欧美激情综合色综合啪啪五月| 国产精品美女www| 这里只有精品视频在线| 欧美成人激情视频| 福利微拍一区二区| 清纯唯美日韩制服另类| 综合网日日天干夜夜久久| 国产亚洲欧洲高清一区| 欧美午夜女人视频在线| 欧美成人精品激情在线观看| 日韩精品免费在线| 97人洗澡人人免费公开视频碰碰碰| 国产精品久久久久一区二区| 8090理伦午夜在线电影| 国产成人精品综合| 亲爱的老师9免费观看全集电视剧| 色婷婷综合久久久久| 欧美性受xxxx黑人猛交| 91久久久国产精品| 欧美日韩性视频在线| 国产有码一区二区| 国产精品69久久| 亚洲xxxxx电影| 午夜精品久久久久久久白皮肤| 亚洲精品第一页| 欧美做受高潮电影o| 日韩成人激情视频| 日韩有码视频在线| 精品国产拍在线观看| 欧美成人免费va影院高清| 精品中文字幕在线2019| 国产丝袜高跟一区| 午夜精品99久久免费| 日韩中文字幕在线视频播放| 欧美另类极品videosbestfree| 亚洲欧美激情精品一区二区| 一区二区三区四区视频| 国产亚洲精品久久久优势| 成人xxxx视频| 欧美日韩激情视频8区| 欧美韩日一区二区| 国产婷婷成人久久av免费高清| 日韩有码在线观看| 亚洲级视频在线观看免费1级| 亚洲国产精品久久久久| 久久精品视频播放| 日韩av在线看| 国产一区二中文字幕在线看| 91久久久久久国产精品| 午夜免费日韩视频| 97国产精品免费视频| 亚洲国产精品小视频| 色综合影院在线| 97国产真实伦对白精彩视频8| 亚洲精品日产aⅴ| 亚洲精品国产成人| www高清在线视频日韩欧美| 日韩乱码在线视频| 国产在线精品播放| 色婷婷综合久久久久中文字幕1| 国产精品成人一区二区| 在线视频日韩精品| 日韩三级影视基地| 国产热re99久久6国产精品| 亚洲国内精品视频| 茄子视频成人在线| 欧美中文字幕精品| 亚洲国产精品免费| 91亚洲国产成人精品性色| 亚洲精品一区中文字幕乱码| 亚洲欧洲中文天堂| 91免费在线视频| 久久久av亚洲男天堂| 激情成人在线视频| 欧美成人免费小视频| 91精品国产综合久久香蕉最新版| 成人av.网址在线网站| 国内精品伊人久久| 日韩av在线免费| 日韩av电影在线免费播放| 久久久国产精彩视频美女艺术照福利| 国产脚交av在线一区二区| 欧美乱大交xxxxx另类电影| 国产激情综合五月久久| 欧美国产一区二区三区| 色综合伊人色综合网站| 最新国产精品亚洲| 久久天天躁狠狠躁夜夜躁| 国产精品亚洲欧美导航| 在线观看精品国产视频| 欧美香蕉大胸在线视频观看| 成人免费网站在线| 国产亚洲精品久久久久久| 亚洲欧美日韩直播| 欧美国产精品人人做人人爱| 欧美成人中文字幕| 亚洲网站在线观看| 国产精品久久久久久搜索| 国产成人精品一区| 欧美激情精品久久久久久变态| 在线激情影院一区| 国产在线精品自拍| 国产在线视频不卡| 97香蕉久久超级碰碰高清版| 亚洲欧美日韩视频一区| 国产伊人精品在线| 欧美一级黄色网| 神马久久桃色视频| 国产精品爱久久久久久久| 黄色一区二区在线| 久久久免费高清电视剧观看| 欧美成人精品h版在线观看| 久久久亚洲国产天美传媒修理工| 国产视频精品久久久| 日韩av一区在线| 国产精品扒开腿爽爽爽视频| 国外视频精品毛片| 国产一区二区三区免费视频| 亚洲第一综合天堂另类专| 538国产精品一区二区免费视频| 亚洲第一区中文99精品| 国产精品久久久久久久久男| 国产精品一香蕉国产线看观看| 狠狠爱在线视频一区| 国产精品免费视频xxxx| 亚洲欧美日本伦理| 免费91麻豆精品国产自产在线观看| 国产精品久久一区主播| 欧美高清自拍一区| 国产精品自产拍高潮在线观看| 成人免费福利在线| 亚洲欧美在线一区| 国内精品久久久久影院 日本资源|