Redis: 15개의 글
| Redis란? 레디스(Redis)는 고성능 key-value 저장소로서 리스트, 해시, 셋 정렬된 셋 등 여러 형식의 자료구조를 지원하는 NoSQL입니다. 메모리에 상주하면서 RDBMS의 캐시 솔루션으로서 주로 사용되며 라인, 삼성전자, 네이버, Stackoverflow, 인스타그램 등 여러 IT 대기업에서도 사용하는 검증된 오픈소스 솔루션입니다. 제가 일하는 회사에서도 Redis를 쓰고 있으며 RDBMS의 read부하를 줄이기 위해 Redis 클러스터 형태로 운영하고 있습니다. | Redis 사용용도 Redis는 Message Queue, Shared Memory, Remote Dictionary 용도로 사용할 수 있습니다. 특히 Remote Dictionary로서 RDBMS의 캐시 솔루션으로 사용..
redis-cli를 이용해서 간단히 조회할 때 사용할만한 redis 명령어 몇 가지를 정리한다. get string 형식으로 저장된 값 하나를 조회한다. get my-key "my value blah blah" hget hash로 저장된 값의 필드 하나를 조회한다. # my-hkey로 저장된 hash의 my-field에 대한 값을 조회 hget my-hkey my-field "my field value blah blah" lrange list로 저장된 목록을 조회한다. # 전체 목록 조회 lrange my-lkey 0 -1 # 일부 목록 조회, 시작 인덱스와 끝 인덱스를 지정 # 끝 인덱스는 결과에 포함됨 lrange my-lkey 1 4 smembers set으로 저장된 모든 값을 조회한다. smemb..
* Medis란? : 간단하게 값 조회하고 편집하려고 Redis cli 클라이언트와 Redis command cheat sheet를 함께 띄워두고 떠듬떠듬 작업하다보니 더는 안 되겠어서 괜찮은 오픈소스 GUI 툴을 찾아보았습니다. Medis를 발견하고 사용해 봤는데 역시 그래픽이란 혁명적이에요. Medis는 Node.js, React, Electron으로 만들어진 오픈소스 Redis 클라이언트 어플리케이션입니다. 키와 config의 조회 및 수정, SSH 터널링, 커맨드 입력을 위한 터미널 등 기본적인 기능과 많은 고급 기능들을 지원합니다. Windows용 클라이언트의 경우, exe 파일이 배포되고 있습니다. 👉 Medis for Windows 그러나 macOS용 클라이언트는 직접 빌드해서 사용해야 합니..
활용 목표 : 어떤 유저들의 상태를 비교하여 값이 같다면 리스트에서 삭제하는 기능을 테스트해 보겠습니다. Redis에서 Insert시 unique를 보장하는 것은 Sets 입니다. Sets에 입력되는 값들은 단순 key 식별자가 가능해서 해당 key들의 상태 값들의 변경을 담을 수 없습니다. 그래서 Sets에서는 특정 key값이 이미 존재 하는지, 존재 하지 않는지를 식별하는 tree로 사용하고, 해당 key값이 가지는 부가적인 상태들을 Hash에 담아 관리 하며, 특정 값이 삭제할 상태가 되었을때 Sets와 Hashs에 존재 하는 값을 삭제 하는 것을 구현해 보겠습니다. 상황 설정 Guild Chatting Room 의 번호를 1,2,3..(Guild의 PK) 으로 관리 합니다. FrontEnd에서는 ..
개요 RDB의 stored procedure와 비슷한 용도로 사용이 가능 합니다. 자주 사용되는 여러 명령어로 묶인 코드를 script로 호출하여, Redis Server Side 에서 한번에 처리 되도록 처리할 수 있습니다. 이를 적절히 잘 활용하면 성능을 향상 시킬수 있으며, 코드도 간단해 집니다. Redis는 single threaded 이므로 Lua Script 실행중에 인터럽트 되지 않습니다. (Atomic) Redis에서 RDB의 transaction과 비슷한 기능을 사용 할 수 있는 기능을 제공 합니다. MULTI : 트랜잭션시작, EXEC : 커밋, DISCARD : 롤백, WATCH : 변경감시, UNWATCH : 변경감시해제 을 이용한 방법과 lua script를 이용하는 방법이 존재 ..
개요 Redis Cluster는 데이터가 자동으로 sharding 되우 Redis node로 분산되어 들어가도록 해줍니다. - 16384개의 hash slot을 사용하고 key modulo 16384를 사용하는 CRC16를 사용하고 hash slot을 계산 합니다. - 대량의 memory를 사용 하는 경우 scale out을 위해 사용될 수 있습니다. cluster bus port 는 (client pot + 10000) 으로 설정 되며 다른 node cluster에게 항상 개방되어 있어야 합니다. 구성된 cluster nodes들중 하나가 다운이 되면, 다른 살아 있는 nodes들도 더 이상 입력을 받지 않습니다. 이때 slave가 존재 한다면 해당 slave가 mater node가 되어 대체 되어 정..
개요 key 하나당 하나의 value를 가집니다. key와 value의 Data Type은 문자, 숫자, 이미지등을 사용할 수 있습니다. key와 value의 최대 길이는 512MB입니다. 명령어 요약 저장 :SET, MSET, SETNX, SETEX, MSETNX SET :set key value 예)set stringK "가나 다라!!", stringK에 가나 다라!! data를 저장 합니다. 띄어쓰기를 할 때 큰따움표를 사용 합니다. 이미 존재하는 key 값을 set 하면 새로운 value로 대체 됩니다. MSET :set key1 value1 key2 value2 예)mset stringA 아이 stringB 엠걸, 여러개의 데이터를 입력 합니다. SETNX :setnx key value 예)se..
개요 key 값 내에 여러 value가 존재 하는 일대다 관계 입니다. Queue와 Statck로 사용됩니다. 명령어 요약 저장 : LPUSH, RPUSH, LINSERT, LPUSHX, RPUSHX LPUSH : lpush key value 예) lpush userlist "홍길동1" "홍길동2", 왼쪽에서 리스트의 오른쪽에 데이터를 저장 합니다. 저장 후 전체 value수가 리턴됩니다. RPUSH : rpush key value 예) rpush userlist "홍길동1" "홍길동2", 오른쪽에서 리스트의 왼쪽에 데이터를 저장 합니다. 저장 후 전체 value수가 리턴됩니다. LINSERT : linsert key BEFORE|AFTER pivot value 예) linsert userlist aft..
개요 key 하나에 여러개의 score와 value로 구성 됩니다. key 집합 내에 value는 중복되지 않습니다. Sorted Sets에서는 집합이라는 의미에서 value를 member라 부릅니다. value는 score로 sort 되며 skip list를 사용하여 member의 수와 상관 없이 고성능 sorting을 제공합니다. 명령어 요약 저장 :ZADD ZADD : ZADD key score member [score member ...] 예) zadd usersorted 5 "홍길동1" 90 "홍길동2" , 결과 적용된 member수 리턴됩니다. score는 숫자 여야 합니다. score의 범위는 -9007199254740992 부터 9007199254740992 입니다. score가 같으면 m..
개요 Sets는 key와 value가 일 대 다 관계 입니다. Sets에서는 집합이라는 의미에서 value를 member라 부릅니다. key 집합 내에서 Value 는 중복되지 않습니다 (unique) 명령어 요약 저장 :SADD SADD : sadd key member 예) sadd userset "홍길동1" "홍길동2" , 결과 2(입력된 member수) 가 출력 됩니다. 조회 :SMEMBERS, SCARD, SRANDMEMBER, SSCAN SMEMBERS : smembers key 예) smembers userset , key의 member를 조회, 조회 순서를 지정 할 수 없습니다. SCARD : scard key 예) scard userset, key의 member 수 조회 합니다. SRAND..