栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis-plus基于redis实现二级缓存过程解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis-plus基于redis实现二级缓存过程解析

1. mybatis-plus开启二级缓存

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 # 连接超时时间(毫秒)默认是2000ms
  lettuce:
   pool:
    max-active: 200 # 连接池最大连接数(使用负值表示没有限制)
    max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
    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
@Slf4j
public 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;
  }

  public RedisTemplate getRedisTemplate() {
    redisTemplate = (RedisTemplate) 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来序列化和反序列化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("缓存出错 ");
    }
    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中加入

两种方式根据实际情况二选一即可!

@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
@Mapper
public interface SysConfigDao extends baseMapper {}

如果调用该mapper下的方法,那么会使用redis缓存

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/132700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号