From 24da85fea353960420d370cd6a50ee7be4d7ef32 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期四, 10 六月 2021 21:18:58 +0800 Subject: [PATCH] update MybatisPlus整合Redis二级缓存 --- ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java | 5 ++ ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++ ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java | 5 ++ ruoyi-generator/src/main/resources/vm/java/mapper.java.vm | 3 + 4 files changed, 113 insertions(+), 2 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java new file mode 100644 index 0000000..6ff6a98 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java @@ -0,0 +1,102 @@ +package com.ruoyi.common.core.mybatisplus; + +import cn.hutool.extra.spring.SpringUtil; +import com.ruoyi.common.core.redis.RedisCache; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.cache.Cache; +import org.springframework.data.redis.connection.RedisServerCommands; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.util.CollectionUtils; + +import java.util.Collection; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + * mybatis-redis 浜岀骇缂撳瓨 + * + * @author Lion Li + */ +@Slf4j +public class MybatisPlusRedisCache implements Cache { + + private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true); + + private RedisCache redisCache; + + private String id; + + public MybatisPlusRedisCache(final String id) { + if (id == null) { + throw new IllegalArgumentException("Cache instances require an ID"); + } + this.id = id; + } + + @Override + public String getId() { + return this.id; + } + + @Override + public void putObject(Object key, Object value) { + if (redisCache == null) { + redisCache = SpringUtil.getBean(RedisCache.class); + } + if (value != null) { + redisCache.setCacheObject(key.toString(), value); + } + } + + @Override + public Object getObject(Object key) { + if (redisCache == null) { + //鐢变簬鍚姩鏈熼棿娉ㄥ叆澶辫触锛屽彧鑳借繍琛屾湡闂存敞鍏ワ紝杩欐浠g爜鍙互鍒犻櫎 + redisCache = SpringUtil.getBean(RedisCache.class); + } + try { + if (key != null) { + return redisCache.getCacheObject(key.toString()); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("缂撳瓨鍑洪敊"); + } + return null; + } + + @Override + public Object removeObject(Object key) { + if (redisCache == null) { + redisCache = SpringUtil.getBean(RedisCache.class); + } + if (key != null) { + redisCache.deleteObject(key.toString()); + } + return null; + } + + @Override + public void clear() { + log.debug("娓呯┖缂撳瓨"); + if (redisCache == null) { + redisCache = SpringUtil.getBean(RedisCache.class); + } + Collection<String> keys = redisCache.keys("*:" + this.id + "*"); + if (!CollectionUtils.isEmpty(keys)) { + redisCache.deleteObject(keys); + } + } + + @Override + public int getSize() { + RedisTemplate<String, Object> redisTemplate = SpringUtil.getBean("redisTemplate"); + Long size = redisTemplate.execute(RedisServerCommands::dbSize); + return size.intValue(); + } + + @Override + public ReadWriteLock getReadWriteLock() { + return this.readWriteLock; + } +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java index 2416f0e..5cfb9f6 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java @@ -1,7 +1,9 @@ package com.ruoyi.demo.mapper; -import com.ruoyi.demo.domain.TestDemo; +import com.ruoyi.common.core.mybatisplus.MybatisPlusRedisCache; import com.ruoyi.common.core.page.BaseMapperPlus; +import com.ruoyi.demo.domain.TestDemo; +import org.apache.ibatis.annotations.CacheNamespace; /** * 娴嬭瘯鍗曡〃Mapper鎺ュ彛 @@ -9,6 +11,7 @@ * @author Lion Li * @date 2021-05-30 */ +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) public interface TestDemoMapper extends BaseMapperPlus<TestDemo> { } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java index 6dd75c5..0635ebc 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java @@ -1,7 +1,9 @@ package com.ruoyi.demo.mapper; -import com.ruoyi.demo.domain.TestTree; +import com.ruoyi.common.core.mybatisplus.MybatisPlusRedisCache; import com.ruoyi.common.core.page.BaseMapperPlus; +import com.ruoyi.demo.domain.TestTree; +import org.apache.ibatis.annotations.CacheNamespace; /** * 娴嬭瘯鏍戣〃Mapper鎺ュ彛 @@ -9,6 +11,7 @@ * @author Lion Li * @date 2021-05-30 */ +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) public interface TestTreeMapper extends BaseMapperPlus<TestTree> { } diff --git a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm index 6008418..36a9864 100644 --- a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm @@ -2,6 +2,8 @@ import ${packageName}.domain.${ClassName}; import com.ruoyi.common.core.page.BaseMapperPlus; +import com.ruoyi.common.core.mybatisplus.MybatisPlusRedisCache; +import org.apache.ibatis.annotations.CacheNamespace; /** * ${functionName}Mapper鎺ュ彛 @@ -9,6 +11,7 @@ * @author ${author} * @date ${datetime} */ +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) public interface ${ClassName}Mapper extends BaseMapperPlus<${ClassName}> { } -- Gitblit v1.9.3