8/6 진행사항
✅ 알고리즘 2문제
✅ MSA 프로젝트 실습
✅ 인메모리 강의 1-1 ~ 1-3
Zipkin이란?
트레이스 데이터를 수집하고 시각화하는 분산 추적 시스템
도커를 사용하여 Zipkin 서버 실행
docker run -d -p 9411:9411 openzipkin/zipkin
application.yml에 Zipkin 서버 설정 추가
management:
zipkin:
tracing:
endpoint: "http://localhost:9411/api/v2/spans"
tracing:
sampling:
probability: 1.0
Zipkin 대시보드 접속 (http://localhost:9411 )
서비스 호출을 시각화해서 볼 수 있다.
Redis란
Redis는 가장 대중적인 인메모리 데이터베이스이다.
mysql, maria, oracle 등은 관계형 데이터베이스로 테이블형이다.
프로그램이 종료되어도 사라지지 않고 영속성, 일관성이 특징이다.
파일 시스템의 데이터 변경이 상대적으로 느리다.
redis는 인메모리 데이터베이스로 프로그램이 종료되면 사라진다.
데이터 변경이 상대적으로 빠르고 자주 변하는 데이터를 여러개의 어플리케이션에 거쳐서 공유해야되는 상황에서 사용된다.
redis는 NoSQL 데이터 베이스로 스키마가 존재하지 않는다.
NoSQL 데이터 베이스는 데이터를 관리하는 방법이 서로 다르다.
key-value : Key에 Value를 저장하는 형태로 대표적으로 Redis가 있다.
document : 객체를 표현하는 Documnent라는 단위로 데이터를 저장하는 형태로 몽고DB가 있다.
Column Family : 필요한 데이터 Column을 이름, 데이터, Timestamp와 함께 저장하는 데이터 베이스로 Cassandra가 있다.
Redis
- Key-Value noSQL Database
- 메모리 상에 데이터 저장
- 데이터 변경이 잦은 기능을 다룰 때 많이 사용
- 리더보드, 세션 클러스팅, 캐싱
Redis 설치와 실행
윈도우 기준
wsl 실행하고 apt 저장소 목록에 Redis 저장소를 추가하고 설치하고 redis 서버를 실행한다.
# Redis 저장소 추가
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
# redis 설치
sudo apt-get install redis
#Redis 서버 백그라운드 실행
sudo service redis-server start
Docker를 이용한 Redis 설치
docker-compose.yml
services:
redis-stack:
image: redis/redis-stack
container_name: redis-stack-compose
restart: always
environment:
REDIS_ARGS: "--requirepass systempass"
ports:
- 6379:6379
- 8001:8001
systempass가 비밀번호 역할을 함
터미널에서 docker-compose.yml 파일 위치로 이동 후 명령어 실행
docker compose up -d
docker compose ps
Redis 데이터 타입
-- String
SET user:email alex@example.com
GET user:email
-- 정수가 문자열로 저장된 경우
-- INCR, DECR: ++, --
SET user:count 1
GET user:count
INCR user:count
GET user:count
DECR user:count
-- MSET, MGET (Multi)
-- key value 여러개 한 번에 실행가능
MSET user:name alex user:email alex@example.com
MGET user:name user:email
-- 문자열 -> toCharArray() toByteArray()
-- 문자열 -> 이미지, 음성, 영상, 파일, HTML (512MB)
-- Simple
-- List: Linked List
-- 스택, 큐
-- Push, Pop -> 왼쪽(L)이냐 오른쪽(R)이냐
LPUSH user:list alex
LPUSH user:list brad
RPUSH user:list chad
RPUSH user:list dave
LPOP user:list
RPOP user:list
GET user:list
-- LLEN: 리스트의 크기
LLEN user:list
-- 크기보다 더 큰 숫자
LRANGE user:list 0 3
LRANGE user:list 0 1000000000
-- 음수 index
LRANGE user:list 0 -1
LRANGE user:list 0 -2
-- end < start
LRANGE user:list 1 0
-- Worker Queue: 여러 Worker Application에게 일을 분배하기 위해
-- Timeline: X (구 트위터)dml 타임라인
-- Key에 저장된 자료형이 다를 경우 오류가 발생한다.
GET user:list
-- Set: (문자열의) 집합
-- 중복을 허영하지 않는다.
SADD user:java alex
SADD user:java brad
SADD user:java chad
SREM user:java alex
SISMEMBER user:java brad
SISMEMBER user:java dave
SMEMBERS user:java
SCARD user:java
-- 교집합 합집합
SADD user:python alex
SADD user:python dave
SADD user:java alex
-- 교집합
SINTER user:java user:python
-- 합집합
SUNION user:java user:python
SINTERCARD 2 user:java user:python
-- 중복을 허용하지 않는 방문자 수 세기
-- URL을 키로 만들고 사용자 ID를 넣어준다.
-- 인증 토큰 블랙리스트
-- SISMEMBER: 0(1)
-- Hash
-- Field - Value Pair
HSET user:alex name alex age 25
HSET user:alex major CSE
HGET user:alex name
HGET user:alex age
HMGET user:alex age major
HGETALL user:alex
HKEYS user:alex
HLEN user:alex
-- 장바구니, 세션정보
HSET cart:alex comuter 1 mouse 2 keyboard 10
-- Sorted Set
-- 정렬된 집합: 중복되지 않는 데이터 + 점수
-- ZADD key score value
ZADD user:ranks 10 alex
ZADD user:ranks 9 brad 11 chad
ZADD user:ranks 8 dave
ZADD user:ranks 1 eric
ZINCRBY user:ranks 2 alex
-- 순위
ZRANK user:ranks alex
ZRANK user:ranks eric
ZRANK user:ranks dave
-- 거꾸로 순위
ZREVRANK user:ranks alex
-- 순위표(리더보드), Rate Limiter
-- DEL: key 삭제하기
SET somekey "to be deleted"
DEL somekey
DEL user:list
-- EXPIRE: 만료시간 설정
SET expirekey "to be expired"
EXPIRE expirekey 50
-- EXPIRETIME: 만료될 시간을 UNIX Timestamp로 반환한다.
EXPIRETIME expirekey
-- KEYS: Key를 검색한다.
KEYS *
-- FLUSHDB (DB clear)
FLUSHDB
오늘의 tmi)
NoSQL은 처음이라 어색하지만 앞으로의 실습이 기대된다
강의자료를 그대로 읽지않는 수업방식이라서 좋다
'TIL' 카테고리의 다른 글
[TIL] Spring Boot 프로젝트에 캐싱 적용하기 (0) | 2024.08.09 |
---|---|
[TIL] 양방향 연관관계 매핑 | Feign client Error Decoder (0) | 2024.08.08 |
[TIL] QueryDsl 사용방법 (0) | 2024.08.06 |
[TIL] 인증과 인가 | 컨피그 서버 (Spring Cloud Config) (0) | 2024.08.02 |
[TIL] Java 형변환 | Integer.parseInt와 Integer.valueOf의 차이 | Math.sqrt()와 Math.pow() | 클라이언트 사이드 로드 밸런싱 | 서킷 브레이커 (Resilience4j) | Spring Cloud Gateway (1) | 2024.08.01 |