Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以redis作为缓存的spring boot mybatis_Spring_Caching_Spring Boot_Redis_Mybatis - Fatal编程技术网

以redis作为缓存的spring boot mybatis

以redis作为缓存的spring boot mybatis,spring,caching,spring-boot,redis,mybatis,Spring,Caching,Spring Boot,Redis,Mybatis,我在Mybatis中使用Spring Boot,我注意到每次我使用相同的查询获取一些数据时,它都会连接到db并进行查询,而不使用缓存。所以我用Redis搜索Mybatis的解决方案,但找不到。所有答案都是针对Spring和xml配置文件的,我认为最好使用注释。那么,如何在Spring Boot中将Redis配置为Mybatis的缓存呢 这是我的一个解决方案,它就是不起作用 MybatisDiscache: public class MybatisRedisCache implements Cac

我在Mybatis中使用Spring Boot,我注意到每次我使用相同的查询获取一些数据时,它都会连接到db并进行查询,而不使用缓存。所以我用Redis搜索Mybatis的解决方案,但找不到。所有答案都是针对Spring和xml配置文件的,我认为最好使用注释。那么,如何在Spring Boot中将Redis配置为Mybatis的缓存呢

这是我的一个解决方案,它就是不起作用

MybatisDiscache:

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

private Jedis redisClient = createClient();

/** The ReadWriteLock. */
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 createClient() {
    try {
        JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1");
        return pool.getResource();
    } catch (Exception e) {
        e.printStackTrace();
    }
    throw new RuntimeException("connect failed");
}
}

这里是LoggingRedisCache

public class LoggingRedisCache extends LoggingCache {
public LoggingRedisCache(String id) {
    super(new MybatisRedisCache(id));
}
}