Redis

게시글이 올라왔을 때 게시글에 특정 키워드가 있는 경우 해당 키워드를 구독한 사용자에게 실시간으로 푸시 알람을 전달하기 위한 어플리케이션 설계 요구사항 게시글이 올라왔을 때 게시글에 특정 키워드가 포함되어 있으면, 해당 키워드를 구독한 사용자에게 알람을 보내야 한다. 하나의 게시글에 여러 키워드가 존재하고, 특정 유저가 여러 키워드에 대해 구독을 하고 있다면 알람을 한번만 보내야 한다. 게시글이 올라왔을 때 매우 빠른 시간 내에 알람을 보내야 한다. 일부 누락은 용인이 가능하다. 키워드의 개수가 100,000건까지 존재할 수 있다. 키워드가 매우 빈번하게 변경될 수 있다. 분산 환경에서 쉽게 scale out을 할 수 있어야 한다. 구현 아키텍처 이번 구현에서는 Push 로직에 집중하기 위해 Push A..
Spring Data Reids에서 Redis Streams를 구현 Redis Streams는 redis pub/sub과 다르게 message queueing system 즉 queue 형태의 자료구조에 publisher가 append하면, consumer가 데이터를 읽는다. 이때 consumer group 단위로 데이터를 읽을 수 있다. redis pub/sub과 다르게 redis 내의 메모리를 사용해 데이터를 저장하기 때문에 consumer는 놓친 부분부터 데이터를 다시 읽을 수 있다. publishing spring을 통해서 redis streams에 데이터를 append할 수 있다. low-level의 RedisConnection을 사용할 수도 있고, high-level의 StreamOperati..
spring data redis는 spring framework의 Cache Abstraction을 구현 redis를 해당 Cache Abstraction으로 사용하기 위해서는 RedisCacheManager를 사용 @Bean public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) { return RedisCacheManager.create(connectionFactory); } 다양한 설정을 적용할 수 있다. RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory) .cacheDefaults(RedisCacheConfiguration...
Serializers redis에 데이터가 저장되는 방식 / spring에서 읽어오는 방식 등을 설정할 수 있다. JdkSerializationRedisSerializer(Default) 기본 serializer 기본 java 직렬화 방식을 사용 기본 java 직렬화 방식은 취약한 원격 코드가 그대로 실행될 수 있다는 보안 취약점이 존재 신뢰할 수 없는 환경에서는 해당 직렬화 방식은 권장하지 않음 serialVersionUID를 설정하지 않으면 클래스의 기본 해쉬값을 serialVersionUID로 사용하기 때문에 클래수 구조가 조금이라도 바뀌면 기존 데이터의 역직렬화가 실패 serialVersionUID를 설정한다 해도 클래스에 필드가 제거되거나 수정되는 경우에는 역직렬화 예외가 발생 직렬화시 타입에 ..
RedisConnection에서 디테일한 부분들을 직접 관리하지 않을 수 있도록 해준 모듈 대부분의 경우 RedisTemplate을 주로 사용 다양한 feature set 제공 기존 RedisConnection은 low-level methods를 사용해 binary values를 반환하는 반면 RedisTemplate의 경우 다양한 serialization 전략 및 connection management를 수행 RedisTemplate은 thread-safe 여러 Threads에서 동시에 사용이 가능 Configure RedisTemplate @Configuration class MyConfig { @Bean LettuceConnectionFactory connectionFactory() { return..
Redis는 다양한 setup 환경에서 동작할 수 있고. 각 환경마다의 별도 설정이 필요 Redis Standalone single Redis Server를 사용할 때 가장 쉬운 방법 @Configuration class RedisStandaloneConfiguration { /** * Lettuce */ @Bean public RedisConnectionFactory lettuceConnectionFactory() { return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379)); } /** * Jedis */ @Bean public RedisConnectionFactory jedisConnectionFactor..
larcane
'Redis' 태그의 글 목록