Redis

(1) Redis란 ?

preferrrr 2024. 2. 28. 17:04

Redis

Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

 

레디스는  Remote Dictionary Server의 약자로, in-memory 데이터베이스이며, Key-Value 쌍의 NoSql이다.

<string, hash, list, set, sorted set> 자료구조를 지원하며, DB, 캐시, 메시지 브로커, 스트리밍 엔진으로 사용된다.

 

인 메모리 기반의 DB이기 때문에 HDD or SSD를 기반으로 하는 RDBMS보다 빠른 read와 write가 빠르며,

또한 Key-Value 쌍으로 데이터를 조회하기 때문에 O(1)의 시간복잡도로 빠르게 read 할 수 있다. 

 

Key-Value 쌍으로 데이터를 조회한다면, Java의 HashMap과 비슷하지 않을까 ?


Redis vs Java HashMap

레디스와 Java의 HashMap을 비교하면, 둘 다 Key-Value 기반이고 메모리에 데이터를 저장하여 빠른 속도로 데이터를 read 할 수 있다.

그럼에도 불구하고 Java의 HashMap이 아닌, 레디스를 사용하는 이유는 뭘까 ?

서버가 1대만 있다면 레디스의 장점이 크게 보이지 않지만, 서버가 여러 대로 분산 환경이라면 장점이 쉽게 보인다.

 

분산 환경에서의 장점

사용자의 요청이 늘어나 서버를 증설하고 HashMap의 데이터를 사용할 때, 각 서버 간 HashMap의 데이터 동기화에서 문제가 생긴다.

이때 별도의 레디스 서버를 구성하여 해당 레디스에서 데이터를 read와 write 한다면, 각 서버 간의 데이터 동기화 문제를 해결할 수 있다.

 

DBMS로서 장점

Java의 HashMap과는 달리 레디스는 DBMS로서 여러가지 기능을 지원함으로써 장점이 있다.

이외에도 Redis Docs(https://redis.io/docs/)를 읽어보면 많은 기능을 지원한다.

 

 


내가 Redis를 사용하는 이유

커뮤니티 프로젝트를 진행하며 DB 쿼리를 통한 최적화를 많이 진행했지만, 이것만으로는 성능 개선에 한계가 있었다. 또한 사용자가 많아진다면 DB에 부하가 생길 것이고, 자주 조회되는 인기글같은 경우 캐시에 저장해둔다면 이또한 부하가 줄어들며 성능이 개선될 것이다. 

그래서 프로젝트의 성능 개선과 부하 감소를 위해 Redis 캐시를 도입하려 한다.

 

 

https://prefercoding.tistory.com/46

 

스프링 직렬화 For RedisCache, RedisSerializer

직렬화란 ? 자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터

prefercoding.tistory.com