mybatis plus中怎么将redis作为二级缓存
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天就跟大家聊聊有关mybatis plus中怎么将redis作为二级缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. mybatis-
千家信息网最后更新 2026年11月03日mybatis plus中怎么将redis作为二级缓存
今天就跟大家聊聊有关mybatis plus中怎么将redis作为二级缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1. mybatis-plus开启二级缓存
mybatis-plus.configuration.cache-enabled=true
2. 定义RedisTemplate的bean交给spring管理,这里为了能将对象直接存取到redis中,进行了一些序列化的操作
@Bean(value = "redisTemplate") public RedisTemplateredisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); //Use Jackson 2Json RedisSerializer to serialize and deserialize the value of redis (default JDK serialization) Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); //将类名称序列化到json串中 objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); //设置输入时忽略JSON字符串中存在而Java对象实际没有的属性 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); //Use String RedisSerializer to serialize and deserialize the key value of redis RedisSerializer redisSerializer = new StringRedisSerializer(); //key redisTemplate.setKeySerializer(redisSerializer); redisTemplate.setHashKeySerializer(redisSerializer); //value redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; }
3. 自定义自己的缓存管理
package com.qctchina.headsetserver.config;import com.qctchina.headsetserver.util.SpringUtil;import lombok.extern.slf4j.Slf4j;import org.apache.ibatis.cache.Cache;import org.springframework.data.redis.connection.RedisServerCommands;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.util.CollectionUtils;import java.util.Set;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * @author shuangyueliao * @create 2019/9/10 14:02 * @Version 0.1 */@Slf4jpublic class MybatisRedisCache implements Cache { // 读写锁 private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true); //这里使用了redis缓存,使用springboot自动注入 private RedisTemplate redisTemplate; private String id; public MybatisRedisCache(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 (redisTemplate == null) { //由于启动期间注入失败,只能运行期间注入,这段代码可以删除 redisTemplate = (RedisTemplate) SpringUtil.getBean("redisTemplate"); } if (value != null) { redisTemplate.opsForValue().set(key.toString(), value); } } @Override public Object getObject(Object key) { if (redisTemplate == null) { //由于启动期间注入失败,只能运行期间注入,这段代码可以删除 redisTemplate = (RedisTemplate) SpringUtil.getBean("redisTemplate"); } try { if (key != null) { return redisTemplate.opsForValue().get(key.toString()); } } catch (Exception e) { e.printStackTrace(); log.error("缓存出错 "); } return null; } @Override public Object removeObject(Object key) { if (redisTemplate == null) { //由于启动期间注入失败,只能运行期间注入,这段代码可以删除 redisTemplate = (RedisTemplate) SpringUtil.getBean("redisTemplate"); } if (key != null) { redisTemplate.delete(key.toString()); } return null; } @Override public void clear() { log.debug("清空缓存"); if (redisTemplate == null) { redisTemplate = (RedisTemplate) SpringUtil.getBean("redisTemplate"); } Set keys = redisTemplate.keys("*:" + this.id + "*"); if (!CollectionUtils.isEmpty(keys)) { redisTemplate.delete(keys); } } @Override public int getSize() { if (redisTemplate == null) { //由于启动期间注入失败,只能运行期间注入,这段代码可以删除 redisTemplate = (RedisTemplate) SpringUtil.getBean("redisTemplate"); } Long size = redisTemplate.execute((RedisCallback) RedisServerCommands::dbSize); return size.intValue(); } @Override public ReadWriteLock getReadWriteLock() { return this.readWriteLock; }} SpringUtil是手动获取bean的工具类
@Componentpublic class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringUtil.applicationContext = applicationContext; } public static Object getBean(String name){ return applicationContext.getBean(name); } public static T getBean(String name, Class clazz){ return applicationContext.getBean(name, clazz); } public static T getBean(Class clazz){ return applicationContext.getBean(clazz); }} 4. 在mapper上加上注解@CacheNamespace
@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)public interface CommonMapper extends BaseMapper{
如果调用该mapper下的方法,那么会使用redis缓存
看完上述内容,你们对mybatis plus中怎么将redis作为二级缓存有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
缓存
代码
运行
内容
对象
序列
管理
字符
字符串
实际
属性
工具
手动
方法
更多
注解
知识
篇文章
类名
行业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东万易互联网科技有限公司惠州分公司
湖南永感互联网科技有限公司
科技互联网公司装修
新华互联网科技学院
互联网络科技有限公司
北京互联网科技
美国互联网黑科技
苏州大垚互联网科技
亿人帮互联网科技
重庆科技学院互联网
贵州叶脉互联网科技有限公司所属行业
坤平互联网科技
广州新华互联网科技学校电竞方面
科技互联网海报
锡山区互联网智能科技产品供应
南通创西澳互联网科技有限公司
从那以后互联网科技有限公司
普陀区互联网教育科技管理办法
互联网公司属于科技吗
福仕德教育科技互联网
重生之互联网科技帝国
互联网巨头反垄断金融科技
互联网金融 金融科技
华宇互联网科技
浩特互联网科技
青海省互联网新科技
广州市恰铎互联网科技有限公司
互联网新科技动漫ppt素材
企晟互联网信息科技有限公司
互联网科技手机排行榜