Spring Boot使用redis做数据缓存

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秒


  1. Good to see real expertise on display. Your corioibuttnn is most welcome.