DevOps/Linux

Ubuntu에 Redis 설치 및 외부연동 그리고 꿀팁까지

kimc 2023. 3. 22. 00:39

 

우분투에 레디스 설치

레디스 기본동작

레디스 외부 연결

그리고 몇 가지 꿀팁까지

 


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

 

Spring Boot Cache with Redis | Baeldung

Learn how to configure Redis as the data store for Spring Boot cache.

www.baeldung.com

 

 

 

꿀팁

 

필요시

SLOWLOG를 찾아서 제외

https://redis.io/commands/slowlog-get/

 

SLOWLOG GET

Get the slow log's entries

redis.io

 

필요시 memory 최대치가 되었을 때 발생하는 Eviction Policy 설정
https://docs.redis.com/latest/rs/databases/memory-performance/eviction-policy/

 

Eviction policy | Redis Documentation Center

Note: Data eviction policies are not supported for Active-Active databases with Redis on Flash (RoF).

docs.redis.com

 

필요시 redis-benchmark 로 성능 측정

https://redis.io/docs/management/optimization/benchmarks/

 

Redis benchmark

Using the redis-benchmark utility on a Redis server

redis.io

 

필요시 

싱글 쓰레드 높은 성능의 CPU 사용

 

 

728x90