Redis
목차
- Redis?
- Redis 설치
- Redis 환경 설정
- Python Redis 연결
- Redis에 Dataframe 넣기
- Redis 운영 관리 - RedisInsights
- Redis 운영 관리 - RMA
Redis?
Redis는 Remote Dictionary Server의 약자로 Key-Value 구조의 데이터를 저장한다.
Redis는 Disk가 아닌 메모리에 데이터를 저장하고 조회하므로 빠른 장점이 있다.
물론 데이터를 Disk에 저장을 못하는 것은 아니다.
Disk에 데이터를 저장하는 방식은 2가지로
1) RDB(Snapshotting) 방식
-> 메모리에 있는 전체 내용을 스냅샷을 찍어 Disk에 옮겨 담는 방식
-> redis.conf 파일에서 SAVE 옵션 설정
2) AOF(Append On File) 방식
-> Redis의 모든 Read/Write 연산 자체를 모두 log 파일에 기록하는 방식
-> redis.conf 파일에서 auto-aof-rewrite-percentage 옵션 설정
Redis 설치
1
2
3
4
5
6
7
8
sudo apt install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
위의 명령어를 실행하면 redis가 설치 완료
Redis 환경 설정
1) Redis가 사용할 수 있는 최대 메모리 설정
maxmemory 값을 변경
2) 최대 사용량 초과 시 데이터 처리 방식
maxmemory-policy 값을 수정
3) 외부 접속이 가능하도록 변경
redis.conf파일에서 bind를 127.0.0.1에서 0.0.0.0으로 변경
4) 비밀번호 설정
requirepass 주석을 해제하고 사용하려는 비밀번호 입력
5) Daemon 설정
daemonize 값을 yes로 변경
sudo vi /etc/systemd/system/redis.service 파일 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Redis
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
시스템 등록
1
2
3
4
5
6
sudo systemctl enable redis.service
sudo systemctl daemon-reload
sudo systemctl start redis.service
sudo systemctl status redis-server
Python Redis 연결
1
pip install redis
1
2
3
4
5
6
7
class RedisClient:
def __init__(self):
self.r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=0, password=REDIS_PASSWORD)
def __del__(self):
if hasattr(self, 'r'):
self.r.close()
Redis에 Dataframe 넣기
Redis가 아쉽게도 Dataframe을 지원하지 않았다.
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
class RedisClient:
def __init__(self):
self.r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=0, password=REDIS_PASSWORD)
def set_value(self, key, value):
if isinstance(value, pl.DataFrame):
value = pickle.dumps(value)
self.r.set(key, value)
def get_value(self, key):
value = self.r.get(key)
if value:
try:
return value.decode('utf-8')
except UnicodeDecodeError:
try:
return pickle.loads(value)
except:
return value
else:
return None
def del_value(self, key):
self.r.delete(key)
def __del__(self):
if hasattr(self, 'r'):
self.r.close()
위와 같은 코드로 Dataframe을 처리했다.
Redis 운영 관리 - RedisInsights
RedisInsights는 Redis에서 제공하는 GUI다.
Key, Memory, Network, Connection Client등을 확인할 수 있다.
Redis 운영 관리 - RMA
RMA는 Redis Memory Analyzer로 3가지 세주 정보를 지원한다.
우선 설치 방법은
1
pip install rma
을 통해서 설치할 수 있다.
1) global
rma -p 6379 -a password -b global
Global 모드에서는 Redis 서버 통계를 제공한다.
2) scanner
rma -p 6379 -a password -b scanner
Redis에 어떠한 키 유형이 저장되었는지 모를때 유용하다.
가장 많이 사용하는 데이터 구조가 무엇인지 알 수 있다.
3) ram
rma -p 6379 -a password -b ram
데이터 구조별 키 값으로 통계가 분리되어 출력된다.
그리고 위의 명령어를 한번에 실행하는 rma -p 6379 -a password -b all
이 있다.