本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。
由于 MyBatis 本身的 Cache 实现都是基于本地的,在分布式场景下必然会出现 Cache 脏读,所以。
MyBatis 的二级缓存可以通过实现 Cache
接口来自定义,MyBatis 官方已经提供了一个 Redis 的实现:
1) 依赖
compile 'org.mybatis.caches:mybatis-redis:1.0.0-beta2'
2) 配置
2.1) Mapper 配置
首先是 mapper 的配置
<cache type="org.mybatis.caches.redis.RedisCache"/>
或
@CacheNamespace(implementation = RedisCache.class)
2.2) Redis 配置
入口为 RedisCache 的构造方法
public RedisCache(final String id) {
if (id == null) {
throw new IllegalArgumentException("Cache instances require an ID");
}
this.id = id;
RedisConfig redisConfig = RedisConfigurationBuilder.getInstance().parseConfiguration();
pool = new JedisPool(redisConfig, redisConfig.getHost(), redisConfig.getPort(),
redisConfig.getConnectionTimeout(), redisConfig.getSoTimeout(), redisConfig.getPassword(),
redisConfig.getDatabase(), redisConfig.getClientName());
}
从源码 RedisConfigurationBuilder 中得知,MyBatis-Redis 默认会读取 redis.properties 配置文件
,或在项目启动时 -Dredis.properties.filename=xxx.prop"
指定配置文件名来加载 Redis 的配置。
private static final String SYSTEM_PROPERTY_REDIS_PROPERTIES_FILENAME = "redis.properties.filename";
private static final String REDIS_RESOURCE = "redis.properties";
private RedisConfigurationBuilder() {
redisPropertiesFilename = System.getProperty(SYSTEM_PROPERTY_REDIS_PROPERTIES_FILENAME, REDIS_RESOURCE);
}
有哪些参数可配置呢,可以从 RedisConfig 看到配置 key
private String host = Protocol.DEFAULT_HOST;
private int port = Protocol.DEFAULT_PORT;
private int connectionTimeout = Protocol.DEFAULT_TIMEOUT;
private int soTimeout = Protocol.DEFAULT_TIMEOUT;
private String password;
private int database = Protocol.DEFAULT_DATABASE;
private String clientName;
redis.properties
password=password
结束。