Redis란?
- Redis는 Remote Dictionary Server의 약자로, 메모리 기반의 Key-Value 저장소
- 주요 특징
- In-Memory 저장소
- 데이터를 디스크 대신 RAM에 저장해서 매우 빠른 읽기·쓰기 속도를 제공합니다.
- 필요하면 데이터의 스냅샷(백업)을 디스크에 저장할 수도 있습니다.
- 다양한 데이터 구조 지원
- 단순 문자열(String)뿐 아니라 List, Set, Sorted Set, Hash, Bitmap, HyperLogLog, Stream 등을 지원합니다.
- 그래서 단순 캐시뿐 아니라 실시간 순위표, 세션 저장소, 큐 시스템 등에도 사용됩니다.
- 싱글 스레드 기반 고성능
- 하나의 스레드로 동작하지만, 네트워크 I/O와 메모리 접근이 매우 빠르기 때문에 초당 수십만 건의 요청을 처리할 수 있습니다.
- 캐시 및 세션 관리에 적합
- Spring 같은 웹 애플리케이션에서 로그인 세션, 토큰, 임시 데이터 저장소로 자주 사용됩니다.
- TTL(Time To Live) 기능으로 자동 만료 설정이 가능해 캐시 관리가 쉽습니다.
- 분산·고가용성 지원
- Redis Sentinel(장애 감지·자동 페일오버)
- Redis Cluster(샤딩을 통한 분산 저장)
pom.xml 설정
org.springframework.session
spring-session
1.3.1.RELEASE
org.springframework.session
spring-session-data-redis
1.3.1.RELEASE
pom
biz.paluch.redis
lettuce
3.5.0.Final
web.xml 설정
springSessionRepositoryFilter
org.springframework.web.filter.DelegatingFilterProxy
springSessionRepositoryFilter
/*
REQUEST
ERROR
context-common.xml 설정
<!— 레디스 세션 만료시간, 초단위 —>
<util:constant static-field=”org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP”/>
<bean id=”lettuceConnectionFactory” class=”org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory” destroy-method=”destroy">
<property name=”hostname” value=”redis server IP”/>
<property name=”hostname” value=”redis server IP”/>
다른 두 프로젝트가 Redis 서버를 공유할 때 발생하는 오류
- org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the type array a result of corresponding serialization for DefaultDeserializer?; nested exception is org.springframework.core.NestedIOException: Failed to deserialize object type; nested exception is java.lang.CalssNotFoundException: kr.co.test.common.vo.UserVO
— 해당 오류는 웹에 있는 UserVO 를 모바일에서 계속 땡겨와 직렬화 및 역직렬화가 안되는 현상임
— 따라서 redis에 있는 sessionId를 웹에서 접근시 WEB_JSESSIONID 로 변경하여 수정함( 차후 추가수정도 있을 수 있음)
- context-common.xml 에 있는 <context:annotation-config/> 아래 빈에 해당 내용 추가
— redis 리눅스 서버에서 key 검색시 나오는 value를 customize 가능
— 브라우저에서 개발자도구로 SESSION 확인시 나오는 name을 customize 가능