@File
2019-11-28T09:46:32.000000Z
字数 4074
阅读 144
java
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<!-- pool 连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.7.0</version>
</dependency>
spring:
redis:
# 选库:0~16
database: 0
# ip地址
host: 127.0.0.1
# 端口号
port: 6379
# 密码
#password:
jedis:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# 连接池中的最大空闲连接
max-idle: 10
# 连接池中的最小空闲连接
min-idle: 0
# 连接超时时间
timeout: 1000ms
lettuce:
pool:
min-idle:
max-active:
@Configuration
public class RedisConfiguration {
/**
* 注册 RedisTemplate
* @param factory
* @return
*/
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
// 注册到系统中去
redisTemplate.setConnectionFactory(factory);
// 1.2.36 低版本
GenericFastJsonRedisSerializer serializer = new GenericFastJsonRedisSerializer();
// 需要改 value 序列化方式
redisTemplate.setValueSerializer(serializer);
// 修改 key 序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
/**
* 注册 hash
* @param redisTemplate
* @return
*/
@Bean
public HashOperations<String,String,Object> hashOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForHash();
}
/**
* 注册 list
* @param redisTemplate
* @return
*/
@Bean
public ListOperations<String,Object> listOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForList();
}
/**
* 注册 value
* @param redisTemplate
* @return
*/
@Bean
public ValueOperations<String,Object> valueOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForValue();
}
/**
* 注册 set
* @param redisTemplate
* @return
*/
@Bean
public SetOperations<String,Object> setOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForSet();
}
/**
* 注册 zSet
* @param redisTemplate
* @return
*/
@Bean
public ZSetOperations<String,Object> zSetOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForZSet();
}
/**
* 注册 geo
* @param redisTemplate
* @return
*/
@Bean
public GeoOperations<String,Object> geoOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForGeo();
}
/**
* 注册 cluster
* @param redisTemplate
* @return
*/
@Bean
public ClusterOperations<String,Object> clusterOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForCluster();
}
/**
* 注册 hyperLogLog
* @param redisTemplate
* @return
*/
@Bean
public HyperLogLogOperations<String,Object> hyperLogLogOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForHyperLogLog();
}
}
public class RedisCache implements Cache {
/**
* redis 对象(不通过注入获取)
*/
private RedisTemplate<Object, Object> redisTemplate;
private String id;
public RedisCache(){}
/**
* 构造时传入一个id
*/
public RedisCache(String id) {
this.id = id;
}
/**
* 获取 redis 对象
* @return 返回 RedisTemplate 对象
*/
private RedisTemplate<Object, Object> getRedisTemplate() {
if(null == this.redisTemplate) {
// 注意要检查是否创建了 ApplicationContextHolder
this.redisTemplate = ApplicationContextHolder.getBean("redisTemplate", RedisTemplate.class);
}
return this.redisTemplate;
}
@Override
public String getId() {
return this.id;
}
@Override
public void putObject(Object key, Object value) {
if(value != null) {
this.getRedisTemplate().opsForValue().set(key, value);
}
}
@Override
public Object getObject(Object key) {
if(null != key) {
return this.getRedisTemplate().opsForValue().get(key);
}
return null;
}
@Override
public Object removeObject(Object key) {
if(null != key) {
this.getRedisTemplate().delete(key);
}
return null;
}
@Override
public void clear() {
Set<Object> set = getRedisTemplate().keys("*:" + this.id + "*");
if(null != set) {
getRedisTemplate().delete(set);
}
}
@Override
public int getSize() {
return 0;
}
@Override
public ReadWriteLock getReadWriteLock() {
return new ReentrantReadWriteLock();
}
}
<!--
flushInterval: 清空缓存的时间间隔,单位为毫秒; 默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用更新语句时刷新。
size: 可以被设置为任意正整数, 缓存的数量,默认是1024;
evication: LRU 移除最长时间不被使用的对象。
blocking: 默认是false;
-->
<cache size="1024" type="com.lidaye.cache.RedisCache" />