目录
1)配置RedisConfig 继承 CachingConfigurerSupport,重写cacheManager,使用redisTemplate
2)通过spring boot提供的数据访问框架Spring Data Redis实现
一、redis win7 安装配置
详解:https://jingyan.baidu.com/album/86fae346e132363c49121aac.html?picindex=3
二、redis实现缓存
注意:redis实现缓存有2种方式
1)配置RedisConfig 继承 CachingConfigurerSupport,重写cacheManager,使用redisTemplate
【参考RedisUtils工具类,该工具类支持redis的其他业务场景】
实现code
@Component
public class RedisUtil {
@Autowired
private RedisTemplate redisTemplate;
/**
* @Description: 批量删除缓存
* @Author: hj
* @Date: 17:13 2017/10/24
*/
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
}
/**
* @Description: 批量删除缓存(通配符)
* @Author: hj
* @Date: 16:52 2017/10/24
*/
public void removePattern(final String pattern) {
Set<Serializable> keys = redisTemplate.keys(pattern);
if (keys.size() > 0)
redisTemplate.delete(keys);
}
/**
* @Description: 删除缓存
* @Author: hj
* @Date: 16:51 2017/10/24
*/
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
}
/**
* @Description: 判断缓存中是否有对应的value
* @Author: hj
* @Date: 16:50 2017/10/24
*/
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
}
/**
* @Description: 读取缓存
* @Author: hj
* @Date: 16:49 2017/10/24
*/
public Object get(final String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* @Description: 写入缓存
* @Author: hj
* @Date: 16:48 2017/10/24
*/
public boolean set(final String key, Object value) {
boolean result = false;
try {
redisTemplate.opsForValue().set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* @Description: 写入缓存(可以配置过期时间)
* @Author: hj
* @Date: 16:46 2017/10/24
*/
public boolean set(final String key, Object value, Long expireTime) {
boolean result = false;
try {
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Value("${redis-timeout}")
private Long redisTimeout;
// 缓存管理器
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
// 设置缓存过期时间
cacheManager.setDefaultExpiration(redisTimeout);
return cacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
//setSerializer(template);// 设置序列化工具
//template.afterPropertiesSet();
return template;
}
private void setSerializer(StringRedisTemplate template) {
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
//om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
}
}
@Autowired
private RedisUtil redisUtil;
@Test
public void contextLoads() {
System.out.println(redisUtil.get("key01"));
}
2)通过spring boot提供的数据访问框架Spring Data Redis实现
【通过在方法上添加缓存注解实现,只支持redis作为缓存管理时使用】
实现CODE
依赖
<dependency><!-- redis依赖-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.7.RELEASE</version>
</dependency>
<dependency><!-- 缓存依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
配置
主类添加:开启缓存
@EnableCaching
spring.cache.type=redis
spring.cache.cache-names=dataCenter,datahub
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
# 缓存过期时间
redis-timeout=10
业务service代码上添加
@Cacheable(value = "dataCenter", key = "#root.methodName + '_' + #root.methodName.concat(#id)")
三、redis实现session共享
实现code
依赖
<dependency><!-- 使用redis存储session,达到session共享 -->
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
配置
#session共享存储在redis内
spring.session.store-type=redis