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

这是我的解决方案之一,它只是不起作用 .

MybatisRedisCache:

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));
}
}