RedisTemplate은 Spring 자체적으로 Bean으로 등록한다.
그래서 그냥 주입받아서 쓰면 되긴한다.
RedisAutoConfiguration을 통해 자동으로 RedisTemplate을 설정합니다.
- opsForValue(): String 타입
- opsForList(): List 타입
- opsForSet(): Set 타입
- opsForHash(): Hash 타입
- opsForZSet(): ZSet 타입
이거 말고도
RedisStringTemplate,
RedisListTemplate,
RedisHashTemplate,
RedisSetTemplate,
RedisZSetTemplate
이렇게 추가로 각 자료형에 맞춰진 특화 템플릿이 존재한다.
RedisTemplate나 ReactiveRedisTemplate를 사용할 가능성이 높습니다. RedisTemplate는 높은 수준의 추상화를 제공합니다. 이진 값(바이트 배열)을 수락하고 반환하는 낮은 수준의 방법을 제공하지만, 템플릿은 직렬화 및 연결 관리를 처리하여 사용자가 그러한 세부 사항을 다루지 않도록 합니다.
일단 구성되면 RedisTemplate은 스레드 안전과 여러 인스턴스에서 재사용할 수 있습니다.
RedisTemplate Java 기반 직렬화기를 사용합니다. RedisTemplate에 의해 쓰거나 읽히는 모든 객체가 자바를 통해 직렬화되고 역직렬화된다는 것을 의미한다.
RedisTemplate에서 직렬화 메커니즘을 변경할 수도 있다. serializer를 null로 설정하고, enableDefaultSerializer 속성을 false로 설정하여 원시 바이트 배열과 함께 RedisTemplate를 사용할 수 있습니다.
RedisTemplate은 모든 키가 null이 아니어야 한다. 기본 직렬화기가 수락하는 한 값은 null이 될 수 있습니다.
@Configuration
class MyConfig {
@Bean
LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory();
}
@Bean
RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
return template;
}
}
public class Example {
// inject the actual operations
@Autowired
private RedisOperations<String, String> operations;
// inject the template as ListOperations
@Resource(name="redisTemplate")
private ListOperations<String, String> listOps;
public void addLink(String userId, URL url) {
listOps.leftPush(userId, url.toExternalForm());
}
}
StringRedisTemplate과 StringRedisSerializer 등의 클래스를 별도로 제공한다.
@Configuration
class RedisConfiguration {
@Bean
LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory();
}
@Bean
StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
public class Example {
@Autowired
private StringRedisTemplate redisTemplate;
public void addLink(String userId, URL url) {
redisTemplate.opsForList().leftPush(userId, url.toExternalForm());
}
}
// 콜백 사용
public void useCallback() {
redisOperations.execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) throws DataAccessException {
Long size = connection.dbSize();
// Can cast to StringRedisConnection if using a StringRedisTemplate
((StringRedisConnection)connection).set("key", "value");
}
});
}
기본 빈 등록 필요
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
return RedisCacheManager.create(connectionFactory);
}
RedisCacheManager동작은 RedisCacheManager.RedisCacheManagerBuilder 구성하여 기본RedisCacheManager, 트랜잭션 동작 및 미리 정의된 캐시를 설정할 수 있습니다.
RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory)
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig())
.transactionAware()
.withInitialCacheConfigurations(Collections.singletonMap("predefined",
RedisCacheConfiguration.defaultCacheConfig().disableCachingNullValues()))
.build();
RedisCacheManager cacheManager = RedisCacheManager
.builder(RedisCacheWriter.lockingRedisCacheWriter(connectionFactory))
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig())
...
// static key prefix
RedisCacheConfiguration.defaultCacheConfig().prefixCacheNameWith("(͡° ᴥ ͡°)");
The following example shows how to set a computed prefix:
// computed key prefix
RedisCacheConfiguration.defaultCacheConfig()
.computePrefixWith(cacheName -> "¯\_(ツ)_/¯" + cacheName);