우분투에 레디스 설치
레디스 기본동작
레디스 외부 연결
그리고 몇 가지 꿀팁까지
redis 설치
// 설치
sudo apt-get update
sudo apt-get install redis
// 상태 확인
sudo systemctl status redis-server
// 설정
sudo nano /etc/redis/redis.conf
// 필요시
maxmemory 1g //최대 메모리 허용량
maxmemory-policy allkeys-lru //초과시 삭제
//재시작
sudo systemctl restart redis-server.service
redis 외부접속 설정
// 외부접속의 경우 방법2 추천
// 방법 1
// 현재 접속중 IP 확인
w
// 필요시 포트 개방
sudo nano /etc/redis/redis.conf
bind -접속허용하는 주소
sudo systemctl restart redis-server
redis-cli monitor
// 방법 2
// 전부 허용 한다음 UFW 설정도 가능
// 필요시 protected-mode no
// 간단하게 bind 라된 부분 주석처리 후에 방화벽 설정을 하면됨
sudo ufw allow proto tcp from 192.168.xxx.xxx to any port 6379 comment 'kimc home'
sudo ufw reload
// 방화벽 정리를 하고자 하는 경우 번호로 삭제
sudo ufw status numbered
sudo ufw delete {rule-number-here}
Redis Strings
Redis의 기본 자료형
카운터나 비트연산도 가능
```
// SET
// 값을 저장
SET user:1 kimc
// Serialize 된 JSON 문자열을 저장하고 100초 유효기간 지정
SET ticket:33 "\"{'username': 'kimc', 'ticket_id': 123}\"" EX 100
// SETNX
// string 값이 존재하지 않는 경우 string 값만 저장
SETNX user:1 kimc
// GET
// 값을 조회
GET user:1
"kimc"
// MGET
// 여러 값을 조회
// INCR
// 키에 해당되는 값을 증가
INCR views:page:33
INCRBY views:page:33 10
// reference
// https://redis.io/docs/data-types/strings/
Redis Lists
주로 스택과 큐를 위해 사용
background worker system의 큐를 관리하는 데 사용
```
Lists
LPUSH
리스트 왼쪽에 값을 추가
LPUSH kimc:queue:1 101
RPUSH
리스트 오른쪽에 값을 추가
RPUSH kimc:queue:1 102
LPOP
리스트 왼쪽 값 삭제 및 반환
LPOP kimc:queue:1
RPOP
리스트 오른쪽 값 삭제 및 반환
RPOP kimc:queue:1
LLEN
리스트 길이(아이템 개수)반환
LLEN kimc:queue:1
LRANGE
리스트 특정 범위 반환
LRANGE kimc:queue:1 0 -1
```
// reference
// https://redis.io/docs/data-types/lists/
///////////////////////
Redis Sets
유니크 값들을 관리하는데 주로 사용(IP 주소등)
관계를 나타내는 데 사용
집합연산을 할 때 사용
```
SADD
Set에 추가
SADD user:33:favorites 44
SREM
Set에 제거
SREM user:33:favorites 44
SISMEMBER
Set 확인
SISMEMBER user:33:favorites 44
SINTER
두 Set에 해당 키에 공통값이 있는지 확인
SINTER user:33:favorites user:55:favorites
SCARD
Set 사이즈 반환
SCARD user:33:favorites
SMEMBERS
전체를 반환하나
O(n)이기떄문에 사용을 권장하지 않음
```
// reference
// https://redis.io/docs/data-types/sets/
///////////////////////
Redis Hashes
개별 필드를 개별 관리하기 위해서 사용
```
HSET
하나의 해쉬에 하나 혹은 그 이상의 필드들을 설정
HSET user:33 username kimc firstName cmaster lastName kim country KR
HGET
하나의 필드의 값을 반환
HGET user:33 username
HGETALL
하나의 해쉬에 필드값들을 전부반환
HGETALL user:33
HMGET
하나의 해쉬에 필드값들을 일부반환
HMGET user:33 username country
HINCRBY
하나의 필드의 값을 증가
HGETALL user:33 age 1
```
// reference
// https://redis.io/docs/data-types/hashes/#examples
///////////////////////
Redis sorted sets
스트링값 키와 Score 값들이 매핑돼 있으며
Score로 정렬되있습니다.
이를 통해서 sliding window rate limiter나
게임, 게시판 leader board에 사용가능합니다
```
ZADD
멤버가 없다면 멤버와 스코어를 추가합니다.
멤버가 있다면 멤버의 스코어를 업데이트 합니다.
ZADD leaderboard:33 100 user:1
ZREM
한개 이상의 멤버를 삭제
ZREM leaderboard:33 user:1
ZRANGE
범위 내에 멤버와 스코어를 반환합니다.
옵션 REV 로 순서를 역방향으로 합니다 e.g)0 번째 idx ~ 2번째 idx
옵션 LIMIT 으로 TOP N개만 반환합니다
옵션 WITHSCORES 로 점수도 반환합니다.
leaderboard:33 0 2 REV WITHSCORES
ZRANK
오름차순으로 정렬되있다는 가정하에 해당 멤버의 랭크를 반환합니다
ZRANK leaderboard:33 user:1
ZREVRANK
내림차순으로 정렬되있다는 가정하에 해당 멤버의 랭크를 반환합니다
ZREVRANK leaderboard:33 user:1
```
// reference
// https://redis.io/docs/data-types/sorted-sets/
///////////////////////
Redis Streams
읽고 쓰기 좋음
Event Sourcing, Sensor Monitoring, Notifications 등에 사용
```
XADD
entry를 stream에 추가
XADD mystream:33 1526919030474-55 message "Hello"
XREAD
하나 이상의 entry를 읽음
XREAD COUNT 2 STREAMS mystream:33 writers 0-0 0-0
XRANGE
두개의 entry 아이디 사이의 값을 읽음
XRANGE mystream:33 - +
XLEN
스트림 길이(아이템 개수)반환
XLEN mystream:33
```
// reference
// https://redis.io/docs/data-types/streams/
///////////////////////
Redis geospatial
특정 위치값을 넣거나 반환
```
GEOADD
lon lat 순으로 위치 추가
GEOADD locations:kr -111.2633447 11.7933344 station:1
GEOSEARCH
해당 원이나 사각형 내부에 값을 반환
GEOSEARCH locations:kr FROMLONLAT -111.2633447 11.7933344 BYRADIUS 5 km WITHDIST
```
// reference
// https://redis.io/docs/data-types/geospatial/
//////////////////////////////
Redis Cacheing 예시
Redis Spring에 설치
gradle build 파일
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis
implementation("org.springframework.boot:spring-boot-starter-data-redis:3.0.4")
application properties 설정
spring.data.redis.host={{IPV4주소}}
spring.data.redis.port={{포트번호}}
1. 자바의 경우
Redis에 넣는 객체가 Serializable를 implement 하게 변경하여야 함
아래와 같은 에러 방지
DefaultSerializer requires a Serializable payload but received an object of type [Object]
2. 코틀린의 경우 참조
https://kotlinlang.org/docs/serialization.html#libraries
필요시
redisTemplate을 사용하거나
@Cacheable을 설정해서 사용
(@Cacheable이 코드가 더 깔끔해서 많이 쓰임 )
아래 링크 참조
https://www.baeldung.com/spring-boot-redis-cache
꿀팁
필요시
SLOWLOG를 찾아서 제외
https://redis.io/commands/slowlog-get/
필요시 memory 최대치가 되었을 때 발생하는 Eviction Policy 설정
https://docs.redis.com/latest/rs/databases/memory-performance/eviction-policy/
필요시 redis-benchmark 로 성능 측정
https://redis.io/docs/management/optimization/benchmarks/
필요시
싱글 쓰레드 높은 성능의 CPU 사용
'DevOps > Linux' 카테고리의 다른 글
윈도우 Hyper-V 가상화 한줄설명 및 간단 사용방법 (0) | 2023.08.16 |
---|---|
도커(Docker)를 이용한 컨테이너 관리하기: 설치부터 볼륨생성까지 (1) | 2023.04.08 |
클라우드 VM 우분투 초기 세팅 치트키 Ubuntu 22.04 SpringBoot Postgressql (0) | 2022.11.14 |
History에 시간 추가하는 한가지 방법 (0) | 2022.11.03 |
리눅스에서 History에 Trace 안남기고 커맨드 쓰는 방법 (0) | 2022.11.03 |