亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mybatis如何結合redis實現二級緩存

發布時間:2021-12-30 09:45:24 來源:億速云 閱讀:328 作者:小新 欄目:大數據

這篇文章將為大家詳細講解有關mybatis如何結合redis實現二級緩存,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一:自定義mybatis緩存

    我們知道任何mybatis二級緩存都需要實現一個接口,這個接口就是org.apache.ibatis.cache.Cache,代碼如下:

package com.demo.spring.mybatis.cache;

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

import org.apache.ibatis.cache.Cache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.demo.spring.mybatis.util.SerializeUtil;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class MybatisRedisCache implements Cache {
private static Logger logger = LoggerFactory.getLogger(MybatisRedisCache.class);

private Jedis redisClient = createReids();

private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

private String id;

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

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

@Override
public int getSize() {

return Integer.valueOf(redisClient.dbSize().toString());
}

@Override
public void putObject(Object key, Object value) {
logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject:" + key + "=" + value);
redisClient.set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value));
}

@Override
public Object getObject(Object key) {
Object value = SerializeUtil.unserialize(redisClient.get(SerializeUtil.serialize(key.toString())));
logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>getObject:" + key + "=" + value);
return value;
}

@Override
public Object removeObject(Object key) {
return redisClient.expire(SerializeUtil.serialize(key.toString()), 0);
}

@Override
public void clear() {
redisClient.flushDB();
}

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

protected static Jedis createReids() {
JedisPool pool = new JedisPool("127.0.0.1", 6379);
return pool.getResource();
}
}

以上代碼很簡單就是基本的Cache實現,在定義一個序列化的工具類

  package com.demo.spring.mybatis.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializeUtil {
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
// 序列化
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
byte[] bytes = baos.toByteArray();
return bytes;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static Object unserialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
// 反序列化
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {

}
return null;
}
}

然后在mapper.xml配置

<cache eviction="LRU" type="com.demo.spring.mybatis.cache.MybatisRedisCache"/>

當然在主配置文件里面還需要配置如下代碼,代表開啟二級緩存,默認是不開啟的

<setting name="cacheEnabled" value="true" />

所以得配置和代碼都已經完成了運行結果如下:

mybatis如何結合redis實現二級緩存

為什么第二次走的是一級緩存呢?

這個在講二級緩存源碼的時候分析過,只有當執行commit的時候才把之前查詢的結果放入緩存。

打開嗎redis查看如下,因為存入的是序列化的結果,不過我們隱約還是能看到一些信息到下圖

mybatis如何結合redis實現二級緩存

關于“mybatis如何結合redis實現二級緩存”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文成县| 樟树市| 平罗县| 龙口市| 迁安市| 津南区| 衡阳县| 滁州市| 镇康县| 晋州市| 开平市| 通辽市| 义乌市| 万盛区| 玛纳斯县| 河津市| 林州市| 琼结县| 同仁县| 东光县| 牡丹江市| 于田县| 吴堡县| 图木舒克市| 石门县| 玉山县| 泗阳县| 黑山县| 连南| 遵义市| 荥阳市| 信阳市| 成安县| 都匀市| 新野县| 古交市| 武宣县| 池州市| 惠水县| 法库县| 兰考县|