빠에야는 개발중
Redis란? 본문
오랜만에 글을 쓴다. 전부터 궁금했던 redis에 대해서 알아보자.
2015년에 ndc에서 들었던 세션 중에 마비노기 TCG 게임에서 redis를 사용하여 캐싱을 한다는 이야기를 들은 기억이 있다. 그 때 이름만 듣고 넘어갔던 녀석이 점점 많이 들리기 시작했고 최근에는 H2 데이터베이스를 사용해보면서 “인 메모리 데이터베이스”의 개념을 알게 되었고 결국 대중적 오픈 소스인 redis에 도달하게 되었다. 그럼 이것들이 다 무엇인가?
In-memory Database
인메모리 데이터베이스는 디스크가 아닌 메모리에 데이터들을 저장하는 방식의 데이터베이스를 일컫는다. 처리 속도가 디스크에 비해 월등히 빠른 메모리 레벨에서 데이터를 처리함으로써 성능 향상을 도모한 것이다. 그런데 메모리에 데이터를 저장한다는 건 시스템이 shutdown 되면 모든 데이터가 날아간다는 뜻이다(휘발성). 그러므로 DB의 원칙 중 하나인 지속성(Durability)을 지키기 위해서 모든 작업을 로그 파일에 기록하여 디스크에 저장해두고, 시스템을 구동할 때 로그에 기반하여 데이터를 다시 메모리에 올리는 방식을 사용한다.
Redis의 특징
list, array 형식의 데이터 처리에 특화됨
mysql보다 10배 정도 빠른 성능을 보인다고 한다.atomic하게 데이터 부정합 방지 처리
여러 대의 서버 구성
분산 캐시 서버를 구축할 수 있다.싱글 스레드를 사용한다.
이에 따른 성능 저하가 올 수 있다.
Memcached와의 차이
같은 인메모리 DB 중에서 또 하나 유명한 녀석이 바로 Memcached이다. 그렇다면 Redis와 어떤 차이가 있을까?
Memcached는 데이터를 오직 메모리에만 저장한다. 하지만 Redis는 메모리와 디스크에 모두 저장한다.(디스크에는 회복용 로그를 저장)
Memcached는 메모리 공간이 부족할 시 LRU 알고리즘으로 데이터를 자동 삭제한다. 하지만 Redis는 명시적으로만 데이터를 삭제할 수 있다.
스프링과의 연동
스프링과도 쉽게 연동할 수 있다. 의존성 설정만 해주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | //pom.xml <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>${redis.version}</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.1.0</version> </dependency> //redis-config.xml <bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:usePool="true" p:hostName="172.xxx.xxx.xxx" p:port="6379"/> <!-- redis template definition --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref="jedisConnFactory"/> //redis test @Autowired RedisTemplate<String, String> redisTemplate; @Resource(name="redisTemplate") private ValueOperations<String, ResultMap> valueOps; | cs |