Spring 에서 Redis 사용 하기
org.springframework.data
spring-data-redis
2.0.9.RELEASE
Redis 연결 사용
Lettuce
또는Jedis
@Configuration
class AppConfig {
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
}
}
@Configuration
class AppConfig {
@Bean
public JedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
}
}
보초병 모드 사용
/**
* jedis
*/
@Bean
public RedisConnectionFactory jedisConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master("mymaster")
.sentinel("127.0.0.1", 26379)
.sentinel("127.0.0.1", 26380);
return new JedisConnectionFactory(sentinelConfig);
}
/**
* Lettuce
*/
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master("mymaster")
.sentinel("127.0.0.1", 26379)
.sentinel("127.0.0.1", 26380);
return new LettuceConnectionFactory(sentinelConfig);
}
RedisTemplate Spring 을 사용 하여 RedisTemplate 클래스 를 제공 하여 Redis 를 조작 합 니 다.Redis 의 각종 조작 을 고도 로 추상 화하 고 서로 다른 데이터 형식 에 따라 대응 하 는 operation 을 제공 합 니 다.예 를 들 어
StringRedisTemplate
종 류 를 제공 합 니 다.이 종 류 는StringRedisSerializer
을 사용 하여 직렬 화 합 니 다.하나의 예:
public class Example {
@Autowired
private StringRedisTemplate redisTemplate;
public void addLink(String userId, URL url) {
redisTemplate.opsForList().leftPush(userId, url.toExternalForm());
}
}
직렬 화 Spring 은 여러 가지 직렬 화 방식 을 제공 하 였 다.
JdkSerializationRedisSerializer
RedisTemplate 기본 직렬 화 기 는 JDK 원생 직렬 화 방식StringRedisSerializer
Jackson2JsonRedisSerializer
Jackson 을 사용 하여 JSON 형식 으로 데 이 터 를 저장 합 니 다GenericJackson2JsonRedisSerializer
Jackson 을 사용 하여 JSON 형식 으로 데 이 터 를 저장 하고 JSON 에는 대상 유형우 리 는 자바 에서 항상 대상 을 저장 해 야 합 니 다.이때 설정
Jackson2JsonRedisSerializer
또는GenericJackson2JsonRedisSerializer
할 수 있 습 니 다.@Bean
public RedisTemplate<String, Person> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Person> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Person.class));
return redisTemplate;
}
혹은
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
두 가지 차이 점 은
GenericJackson2JsonRedisSerializer
구조 할 때 자바 대상 유형 을 지정 할 필요 가 없다 는 것 이다.서로 다른 자바 대상 을 저장 하고 여러 개의 RedisTemplate 를 설정 하고 싶 지 않 을 때GenericJackson2JsonRedisSerializer
를 사용 할 수 있다.Redis 에서 데 이 터 를 보면GenericJackson2JsonRedisSerializer
저 장 된 JSON 데이터 가 하나@Class
키 가 더 많 고 이 JSON 에 대응 하 는 자바 데이터 형식 을 저장 한 다 는 것 을 알 수 있다.파 이 프 를 여러 개 조작 하여 파 이 프 를 사용 하면 네트워크 통신 의 소 모 를 줄 일 수 있다.
RedisTemplate
관 로 를 조작 하 는 몇 가지 방법 을 제공 하 였 으 며,반환 값 에 관심 이 없 으 면 직접execute
방법 을 사용 할 수 있 으 며,반환 값 이 필요 하 다 면executePipelined
방법 을 사용 할 수 있다.List<Object> results = stringRedisTemplate.executePipelined(
new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) throws DataAccessException {
StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
for(int i=0; i< batchSize; i++) {
stringRedisConn.rPop("myqueue");
}
return null;
}
});
RedisCallback 에서 doInRedis 의 반환 값 은 null 이 어야 합 니 다.
또 다른 적재량 전달 방법
SessionCallback
public List<Object> getLockers(List<Integer> ids) {
return redisTemplate.executePipelined(new SessionCallback<Locker>() {
@Override
public <K, V> Locker execute(RedisOperations<K, V> operations) throws DataAccessException {
return null;
}
});
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.