Spring Boot使用redis做数据缓存
1 添加redis支持
在pom.xml中添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
2 redis配置
@Configuration @EnableCaching public class RedisCacheConfig { @Bean public CacheManager cacheManager( @SuppressWarnings("rawtypes") RedisTemplate redisTemplate) { return new RedisCacheManager(redisTemplate); } @Bean public RedisTemplate<String, String> redisTemplate( RedisConnectionFactory factory) { final StringRedisTemplate template = new StringRedisTemplate(factory); template.setValueSerializer(new Jackson2JsonRedisSerializer<SysUser>( SysUser.class)); //请注意这里 return template; } }
3 redis服务器配置
# REDIS (RedisProperties) spring.redis.database= # database name spring.redis.host=localhost # server host spring.redis.password= # server password spring.redis.port=6379 # connection port spring.redis.pool.max-idle=8 # pool settings ... spring.redis.pool.min-idle=0 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-1 spring.redis.sentinel.master= # name of Redis server spring.redis.sentinel.nodes= # comma-separated list of host:port pairs
4 应用
/** *此处的dao操作使用的是spring data jpa,使用@Cacheable可以在任意方法上,*比如@Service或者@Controller的方法上 */ public interface SysUserRepo1 extends CustomRepository<SysUser, Long> { @Cacheable(value = "usercache") public SysUser findByUsername(String username); }
5 检验
@Controller public class TestController { @Autowired SysUserRepo1 sysUserRepo1; @RequestMapping("/test") public @ResponseBody String test(){ final SysUser loaded = sysUserRepo1.findByUsername("wyf"); final SysUser cached = sysUserRepo1.findByUsername("wyf"); return "ok"; } }
关于过期:
我们都知道spring-cache是不能够在注解上配置过期时间的,那么如何自己定义每个缓存的过期时间呢。
首先有个方法叫做:setDefaultExpiration,这里可以设置一个默认的过期时间。
其次还有一个setExpires方法:
public void setExpires(Map<String, Long> expires) { this.expires = (expires != null ? new ConcurrentHashMap<String, Long>(expires) : null); }其接受一个Map类型,key为缓存的value,value为long
比如在Map中put一个
map.put("AccountCache",1000L);那么所有的AccountCache的缓存过期时间为1000秒