본문 바로가기

728x90

Server/Redis

(8)
[Redis] Redis Lock과 Redis Connection Pool HTML 삽입 미리보기할 수 없는 소스 개요 FastAPI에 Redis를 이용해 비동기 통신에 대한 성능 테스트를 시험 중이었다. locust에 Numbers of users는 1000 spawn rate는 100으로 설정하고 worker는 3개 정도를 주어 테스트 했다. FastAPI의 로그를 보고 있으니 다음과 같은 에러가 발생하고 있는 걸 확인했다. 위에 첨부한 이미지에서 확인할 수 있다시피 redis connection과 관련된 에러이다. 다음은 이 에러의 TraceBack 중 일부이다. ... File "/Users/jako/private/git-repo/backend-playground-src/coupons/src/repository/redis_repository.py", line 33, in..
Redis, Persistence - AOF Persistence? Persistenc는 영속성이라고 하며, 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 특성을 말한다. Redis는 데이터를 in-memory에 저장하기 때문에 전원이 꺼지면 모든 데이터가 삭제한다. 이러한 문제를 해결하기 위해 메모리에 저장되어 있는 Redis의 데이터를 디스크로 백업하는 기능을 지원하며 이러한 기능에는 AOF와 RDB 방식이 존재한다. persistence 관련 설정을 확인하는 명령어는 다음과 같다. redis:6379> info persistence AOF, Append Only File AOF는 입력, 수정, 삭제의 명령을 실행할 때마다 파일에 기록되는 방식을 뜻한다. 기록되는 파일은 텍스트 파일 형식이기 때문에 수정이 가능하다. 파일에 계속 ..
Redis, Collections - Sorted Set Sorted Set 하나의 Key에 여러개의 Score와 Value로 구성된다 Score를 기준으로 정렬이 가능하다 value는 score로 sort되며 score가 같으면 value로 sort 된다. score가 같으면 value로 sort됩니다. Sorted Sets에서는 집합이라는 의미에서 value를 member라 부릅니다. Sorted Sets은 주로 정렬이 필요한 곳에 사용한다. ZADD - 데이터 추가 zadd는 Sorted Sets에 데이터를 추가한다. ZADD KEY [score] [value] 순으로 입력 redis:6379> zadd test 10 a (integer) 1 redis:6379> zadd test 20 b (integer) 1 redis:6379> zadd test 15..
Redis, Collections - Hashes Hashes Hashes는 Key 하나에 여러개의 Field와 Value로 구성된다. Key하나에 field와 value를 4,294,967,295까지 저장 가능합니다. Summary HSET - HSET은 데이터를 삽입하며 삽입 된 key-value 쌍의 개수를 반환한다. HGET - HGET은 key를 단건으로 데이터를 조회한다. HMGET - HMGET은 key를 복수건으로 데이터를 조회한다. HGETALL - HGETALL은 Hashes에 들어간 데이터 전부를 반환한다. HKEYS - 입력된 key를 통해 hashes 에 존재하는 key의 목록을 조회한다. HVALS - 입력된 key를 통해 Hashes에 존재하는 value의 목록을 조회한다. HEXISTS - HEXISTS는 데이터가 없으면 0..
Redis, Collection - Sets Sets 중복된 데이터가 존재하지 않는다. 교집합, 합집합 등의 집합 연산을 제공한다. SADD - 데이터 추가 Sets 자료형에 key-value 추가 한다. redis:6379> sadd work:queue:ids 1 (integer) 1 이미 존재하는 데이터를 다시 추가할 때 0을 반환하며 이는 추가되지 않았음을 뜻하고 추가에 성공하면 1을 반환한다. redis:6379> sadd work:queue:ids 0 (integer) 1 redis:6379> sadd work:queue:ids 1 (integer) 1 redis:6379> smembers work:queue:ids 1) "0" 2) "1" redis:6379> sadd work:queue:ids 0 (integer) 0 redis:637..
Redis, Collection - Lists Lists List는 String values가 linked list라 생각하면 되고 Head와 Tail에서 PUSH/POP 연산을 이용하여 데이터를 넣고 뺄 수 있다. 한 key 에 넣을 수 있는 요소의 최대 개수는 4,294,967,295 개이다. Head 와 Tail에 데이터를 넣고 뺴는 건 속도가 빠르지만 중간에 데이터를 삽입하거나 삭제하는 어렵다. LPUSH / RPUSH - 데이터 삽입 LPUSH는 키에 저장된 목록에 좌측(왼쪽)에 지정된 값을 삽입한다. RPUSH는 키에 저장된 목록에 우측(오른쪽)에 지정된 값을 삽입한다. LPUSH와 RPUSH 모두 키가 없다면 빈 목록을 생성한 후에 처리한다. redis:6379> lpush work:queue:ids 101 (integer) 1 redi..
Redis, Collection - Strings Strings 가장 일반적인 형태로 Key-Value로 저장하는 형태이다. key와 value가 Binary Safe 하기 때문에 데이터 종류의 제한이 없다 Redis의 String은 512MB의 LIMIT를 가진다. SET / GET SET은 문자열 값을 저장하며 이미 key가 존재하는 경우, key에 value를 덮어씌운다. GET은 문자열 값을 검색한다. redis:6379> set mykey value2 OK redis:6379> get mykey "value2" APPEND append는 key에 해당하는 value에 문자열을 추가한다 redis:6379> append mykey value3 (integer) 12 redis:6379> get mykey "value2value3" INCR inc..
Redis란 Stands for Redis는 Remote Dictionary Server의 약어이다. In-Memory DataBase Redis는 데이터를 메모리에 저장하고 조회한다. 즉 In-Memory DataBase이다. 데이터를 메모리에 저장하고 사용하기 때문에 이는 HDD와 RAM의 차이를 알고 있다면 명확하게 속도가 빠르다는 것을 의미하는 것을 알 수 있다. 하지만 RAM을 사용하기 때문에 당연히 용량 문제가 있고 데이터 저장을 위한 DB로 사용하기에는 무리가 있다. 즉 Redis as a Cache 그러니까 Redis는 주로 Cache DB Server 라고 생각하자. NoSQL DataBase라고 표현되어있기 떄문에 SQL을 써야되는건가 싶지만 그렇진 않고 Key-Value 구조로 데이터를 관리하기 ..

728x90
반응형