前端 Java Python等资源合集大放送
spring
概述数据库
springboot一般整合redis,采用的是RedisTemplate的形式,除了这种形式之外,还有另一种形式去整合,即采用spring支持的注解进行访问缓存 。编程
》准备工做缓存
pom.xml文件:springboot
<dependency>服务器
<groupId>redis.clients</groupId>微信
<artifactId>jedis</artifactId>app
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>RELEASE</version>
</dependency>
application.properties配置文件:
# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器链接端口
spring.redis.port=6379
# 链接池最大链接数(使用负值表示没有限制)
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配置类
/**
* @author hulonghai
* redis配置类
*/
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport{
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
// 多个缓存的名称,目前只定义了一个
rcm.setCacheNames(Arrays.asList("thisredis"));
//设置缓存过时时间(秒)
rcm.setDefaultExpiration(600);
return rcm;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
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);
template.afterPropertiesSet();
return template;
}
}
能够看出,咱们这里主要配置了两个东西,cacheManager方法配置了一个缓存名称,它的名字叫作thisredis,当咱们要在方法注解里面使用到它的时候,就要根据名称进行区分不一样缓存。同时设置了缓
存的过时时间。redisTemplate则是比较常见的,咱们设置了RedisTemplate,所以在代码里面,咱们也能够经过@Autowired注入RedisTemplate来操做redis.
使用
接下来就是如何使用注解啦,这一步反而是最简单的。其实只用到了两个注解,@Cacheable和@CacheEvict。第一个注解表明从缓存中查询指定的key,若是有,从缓存中取,再也不执行方法。若是没有则执
行方法,而且将方法的返回值和指定的key关联起来,放入到缓存中。而@CacheEvict则是从缓存中清除指定的key对应的数据。使用的代码以下:
@Cacheable(value="thisredis", key="'users_'+#id")
public User findUser(Integer id) {
User user = new User();
user.setUsername("hlhdidi");
user.setPassword("123");
user.setUid(id.longValue());
System.out.println("log4j2坏啦?");
logger.info("输入user,用户名:{},密码:{}",user.getUsername(),user.getPassword());
return user;
}
@CacheEvict(value="thisredis", key="'users_'+#id",condition="#id!=1")
public void delUser(Integer id) {
// 删除user
System.out.println("user删除");
}
能够看出,咱们用@Cacheable的value属性指定具体缓存,并经过key将其放入缓存中。这里key很是灵活,支持spring的el表达式,能够经过方法参数产生可变的key(见findUser方法),也能够经过其指定在
什么状况下,使用/不使用缓存(见delUser方法)。
本公众号内回复 “领取资源”, 下载各类编程资料;
以为本文对你有帮助?请分享给更多人
关注「JAVA乐园」,提高IT技能
推荐阅读:
更多精彩文章,请点击下方:阅读原文
本文分享自微信公众号 - JAVA乐园(happyhuangjinjin88)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。