everydayminder
Redis pub/sub 소개 일반적인 pub/sub의 개념에서 알 수 있듯이, 메시지를 보내는 publish와 그 메시지를 수신할 수 있는 subscribe를 말한다. Kafka와는 달리, Redis에서는 subscribe가 된 상태의 클라이언트만 publish되는 메시지를 받을 수 있다. 쉽게 생각하면, Youtube 채널 구독과 비슷하다. 구독과 좋아요를 누르면, 나중에 새로운 글이 올라오면 노티가 올텐데, 구독중인 상태의 채널에 신규 콘텐츠가 올라오면 노티를 받을 수 있는 것과 같다. 명령어 Redis 서버를 매개로, Redis 클라이언트간 통신을 도와줌 Redis 클라이언트는 Redis 서버내 "채널"을 생성함 메시지를 수신하고 싶은 클라이언트는 사전에 해당 채널을 subscribe 함 메시지를..
개요 지리정보 관련 기능의 일부를 Redis에서도 간단하게나마 쓸 수 있다. 명령어 GEO 계열의 명령어도 있지만, 내부적으로 ZSet(Sorted Set)을 사용하기에 ZSet 계열 명령어도 일부 혼용 가능하다. GEOADD 127.0.0.1:6379> help geoadd GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...] summary: Add one or more geospatial items in the geospatial index represented using a sorted set since: 3.2.0 group: geo 한 개 혹은 동시에 여러 개의 정보를 추가할 수 있다. 127.0.0.1..
개요 이름에서 유추할 수 있듯이, Redis(레디스)에서 제공하는 자료 구조 중, Set과 비슷하면서도 차이점이 있는 자료 구조다. 값 자체의 중복을 허용하지 않지만, 정렬을 해주는 자료 구조이다. 정렬의 기준을 score라고 한다. 명령어 Redis - Hash에서의 예와 같이, 사용자들의 데이터를 Redis 상에서 정렬하거나 업데이트 하는 예제로 접근해 보자. 앞서 다뤘던 것과 비슷하게 해볼텐데, 이번에는 사용자의 점수(포인트)로 순위를 관리하는 예로 접근해 보고자 한다. user[0].point = 100 user[1].point = 200 user[2].point = 50 등과 같이 사용자별로 포인트가 관리되는 상황을 가정해볼 수 있을 것이다. User들의 point를 모아서 순위를 매긴다면 프로..
개요 마치 RDBMS에서의 테이블과 같은 형태를 저장하는데 유용한 구조이다. RDBMS의 테이블은 PK외 Secondary Index로도 조회를 하지만, PK 기준으로 데이터를 액세스 해야 한다는 점이 다르다. 또한, 스키마가 RDBMS의 경우는 고정형이지만, Redis의 Hash는 비고정형이며 이를 schemaless라고 한다. 따라서, RDBMS의 테이블 alter는 굉장히 무거운 작업이지만, Redis의 Hash는 그렇지 않다. 따라서, User 데이터를 저장한다 하더라도, RDBMS 테이블과 달리 데이터마다 설정된 필드들의 수가 다를 수도 있다. 명령어 Redis가 지원하는 Hash 관련 기능은 아래와 같다. RDBMS 테이블의 값을 설정하는 방식과 비교하면서 상상해 보자. 어떤 온라인 쇼핑몰의 ..
개요 프로그래밍 언어에서 어떨 때 set을 사용할까? 주로 중복을 제거하거나, 말 그대로 집합 연산(포함여부 및 합집합/교집합 등)을 해야할 경우에 사용할 것이다. Redis에서도 이러한 연산을 지원한다. 명령어 Redis가 지원하는 집합 연산 기능은 아래와 같다. SADD 127.0.0.1:6379> help sadd SADD key member [member ...] summary: Add one or more members to a set since: 1.0.0 group: set set에 아이템을 추가한다. // 여러 아이템을 set에 추가 127.0.0.1:6379> sadd s1 e1 e2 e3 (integer) 3 127.0.0.1:6379> smembers s1 1) "e2" 2) "e3"..
개요 Redis에서 List는 여러 개의 데이터를 저장하기 위한 자료구조이다. 쉽게 생각해서 Linked List를 생각하게 될텐데, 지원하는 기능을 바탕으로 보면, 오히려 Dequee(Double Ended Queue)에 가깝다. Qeueue의 인터페페이스와 Stack의 인터페이스를 동시에 지원하기 때문이다. Stack 혹은 Queue의 말단 연산은 비용이 닞지만, 중간 데이터를 처리하는 연산은 비용이 상대적으로 높다. 따라서, 내가 수행해야 하는 오퍼레이션의 종류 및 데이터 성격이 어떤지 알고 쓰면 좋을 것이다. 명령어 List가 제공하는 전체 명령어 중 주요 기능은 아래와 같다. LRANGE 127.0.0.1:6379> help lrange LRANGE key start stop summary: G..
개요 Redis에서 기본적으로 문자열, 숫자를 저장할 때 사용하는 자료구조이다. Key와 Value 모두 최대 길이가 512MB이다. 그렇다고, Key를 표기할 때 과다하게 길이가 길면 메모리 낭비가 발생한다. 프로그램내에서만 사용하는 로컬변수가 아니라, 여러 서비스에서 공통으로 사용하는 공간인 만큼, Key를 부여할 때, 적절한 가시성과 구분자를 섞어서 쓰는 편이 좋을 것이다. (예: "user_service:member:status") 명령어 주로 어떤 값을 설정하고, 조회하는 용도가 대부분이다. 특히 숫자형 데이터라면 증/감의 오퍼레이션도 지원된다. set 127.0.0.1:6379> help set SET key value [EX seconds|PX milliseconds|EXAT timestam..
개요 In-Memory Data Store 관점에서 Memcached냐 Redis냐를 두고 저울질 하는 광경을 종종 보곤한다. 이에 두 솔루션을 비교 정리해 놓는다. 주요 특징 비교 두 솔루션 모두 NoSQL로 분리되고, 크게는 In-Memory 솔루션, 캐시 솔루션으로 인식되고 있다. 그러나, 아래 표에서 보는 바와 같이 지원하는 기능에 차이가 있다. 항목 Memcached Redis 데이터 분할 O O 다양한 데이터구조 지원 X O Mutli Thread/ Single Thread Multi Thread Single Thread 데이터 저장 (persistence/ snapshot) X O 데이터 복제 (replication) X O 트랜잭션 지원 X O Publisher/Subscriber X O ..
개요 Redis는 Remote Dictionary Server를 뜻한다. Redis는 대표적인 In-Memory data store 솔루션 중 하나로 꼽히는데, 특히 Memcached와 종종 비교되곤 한다. 그러나, Redis는 Memcached와는 달리 다양한 데이터 타입을 지원하여 보다 다양한 분야의 요구사항을 충족시키고 있다. Redis는 분산 Key-Value Store, 캐시서버, 메시지 브로커 등으로도 활용되기도 한다. Redis 지원 Data Type들 Redis에서 주로 쓰이는 데이터 형은 String, List, Set, ZSet(Sorted Set), Hash가 있다. String 문자열, 정수, 소수를 저장한다. 문자열 전체 혹은 부분을 다룬다. 정수와 소수를 증감한다. List St..
Redis 설치 방법 세 가지 본 글에서는, Redis를 설치하는 여러 방법을 다룬다. 운영환경용이라기 보다 로컬 개발환경에 설치하는 목적이다. Redis 공식 사이트 https://redis.io/download Redis *Download Stable releases liberally follow the usual major.minor.patch semantic versioning schema. *Other versions Old (6.0) Redis 6.0 introduces SSL, the new RESP3 protocol, ACLs, client side caching, diskless replicas, I/O threads, faster RDB loading, ne redis.io Redis ..