REDIS 학습(3.2)spring boot 는 redis 를 캐 시 로 사용 합 니 다.

3666 단어 spring-bootredis
1.홈 키 생 성 규칙 을 지정 합 니 다.
3.1 에서 RedisConfig 수정
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
	@Bean
	public KeyGenerator smpkeyGenerator() {
		return new KeyGenerator() {
			@Override
			public Object generate(Object target, Method method, Object... params) {
				StringBuilder sb = new StringBuilder();
				sb.append(target.getClass().getSimpleName());
				sb.append(method.getName());
				for (Object o : params) {
					sb.append("_").append(o.toString());
				}
				return sb.toString();
			}
		};
	} }

관련 방법 은 keyGenerator="smpkyGenerator"를 더 해 야 합 니 다.
	@Cacheable(value = "usercache", keyGenerator="smpkeyGenerator")
	public User getUser(String no,String name){
		LogCore.BASE.debug("invoke persistent:{},{}", no, name);
		return new User(no, name);
	}

키 제 너 레이 터 를 사용 하지 않 으 면 키 생 성 규칙 을 직접 SpEL 표현 식 으로 설명 할 수 있 습 니 다.
예컨대
	@CacheEvict(value = "usercache", key="#no+'_'+#name")
	public boolean clearUser(String no,String name){
		LogCore.BASE.debug("invoke clear:{},{}", no, name);
		return true;
	}

http://localhost:8084/redis/test?name=lee&no=001
redis 에 저 장 된 키 값 은?
usercache~keys
\xAC\xED\x00\x05t\x00\x1BRedisServicegetUser_001_lee
2.직렬 화 방식 지정
user 직렬 화 태그 인터페이스 serializable 제거
public class User{
	public String no;
	public String name;
	public User(){}
	public User(String no, String name) {
		this.no = no;
		this.name = name;
	}
}
RedisConfig 를 수정 하고 CacheManager 와 RedisTemplate 의 bean 주입 을 증가 합 니 다.
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
	@Bean
	public CacheManager cacheManager(RedisTemplate, ?> redisTemplate) {
		RedisCacheManager manager = new RedisCacheManager(redisTemplate);
		manager.setDefaultExpiration(20);//        
		return manager;
	}

	@Bean
	public RedisTemplate 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;
	}
	
	@Bean
	public KeyGenerator smpkeyGenerator() {
		return new KeyGenerator() {
			@Override
			public Object generate(Object target, Method method, Object... params) {
				StringBuilder sb = new StringBuilder();
				//sb.append(target.getClass().getSimpleName());
				//sb.append(method.getName());
				for (Object o : params) {
					sb.append("_").append(o.toString());
				}
				return sb.toString();
			}
		};
	}
}

3.캐 시 추가 조건 을 SPEL 표현 식 으로 제어 합 니 다.
다음:name 이 null 이 아니 라 결 과 를 null 이 아 닐 때 만 캐 시 를 추가 합 니 다.
	@Cacheable(value = "usercache", keyGenerator = "smpkeyGenerator",condition="#name!=null", unless = "#result==null")
	public User getUser(String no, String name) {
		LogCore.BASE.debug("invoke getUser:{},{}", no, name);
		if (Util.anyNonEmpty(no, name)) {
			return new User(no, name);
		}
		return null;
	}

좋은 웹페이지 즐겨찾기