solon-cache-jedis
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-cache-jedis</artifactId>
</dependency>
1、描述
数据扩展插件,为 Solon Data 提供基于 redisx(代码仓库) 的框架适配。主要实现 CacheService 接口。
2、配置示例
#完整配置示例
demo.cache1:
driverType: "redis" #驱动类型
keyHeader: "demo" #默认为 ${solon.app.name} ,可不配置
defSeconds: 30 #默认为 30,可不配置
server: "localhost:6379"
db: 0 #默认为 0,可不配置
password: ""
maxTotal: 200 #默认为 200,可不配
#简配示例
demo.cache2:
server: "localhost:6379"
3、序列化选择
solon-data 自带了两个缓存时的序列化选择
序列化方案 | 类型(Model) | 泛型(List<Model> ) | 泛型2(T , List<T> ) |
---|---|---|---|
JavabinSerializer.instance | 支持 | 支持 | 支持 |
JsonSerializer.instance | 支持 | 支持(1) | / |
JsonSerializer.typedInstance | 支持 | 支持 | 支持 |
- 支持(1),需要 v2.8.5 后支持
4、应用示例
//配置缓存服务
@Configuration
public class Config {
@Bean(name = "cache1", typed = true) //typed 表示可类型注入 //即默认
public CacheService cache1(@Inject("${demo.cache1}") RedisCacheService cache){
return cache;
}
@Bean(name = "cache2")
public CacheService cache2(@Inject("${demo.cache2}") RedisCacheService cache){
return cache;
}
//通过 CacheServiceSupplier ,可根据 driverType 自动构建缓存服务
//@Bean(name = "cache1s")
public CacheService cache1s(@Inject("${demo.cache1}") CacheServiceSupplier supplier){
return supplier.get();
}
//自己建构客户端 //虽然更自由,但不推荐
//@Bean(name = "cache2s")
public CacheService cache2s(@Inject("${demo.cache2}") Properties props){
RedisClient client = new RedisClient(...);
return new RedisCacheService(client, 30, "demo");
}
}
//应用
@Controller
public class DemoController {
//使用默认缓存服务。如果有缓存,直接返回缓存;如果没有,执行函数,缓存结果,并返回
@Cache
public String hello(String name) {
return String.format("Hello {0}!", name);
}
//提醒:如果是实体,实体类要加 toString() 函数!!!
@Cache
public String hello2(UserModel user) {
return String.format("Hello {0}!", user.name);
}
}
4、自定义序列化示例
@Configuration
public class Config {
@Bean
public CacheService cache1(@Inject("${demo.cache1}") RedisCacheService cache){
//设置自定义的序列化接口(借了内置的对象)
return cache.serializer(JavabinSerializer.instance); //或 JsonSerializer.instance //或 自己实现
}
}
//提示:泛序列化存储,在反序列化时是不知道目标类型的,序列化时须附带类型信息
5、Key 使用明文
@Configuration
public class Config {
@Bean
public CacheService cache1(@Inject("${demo.cache1}") RedisCacheService cache){
cache.enableMd5Key(false);
return cache;
}
}