Redis
- In-Memory Data Structure Store
- Open Source(BSD 3 License)
- Support Data Structures
- String, Set, Sorted-Set, Hashes, List
- HyperLogLog, Bitmap, Geospatial Index
- Stream
Cache is
결과를 저장해 두었다가 Data를 제공하는 서비스
Look aside cache
Client가 Database에서 Data를 읽기 전 Cache를 먼저 조회하여 Data가 있으면 읽어 오는 것을 Look aside cache라고 하며 Spring Cache 등에서 사용하는
Architecture 입니다. 읽는 속도가 중요한 서비스에서 이용하면 좋을 것 같습니다.
Write Back
Client가 Database에 쓰기 전에 Cash에 적재해 두었다가 한번에 Batch Insert 할때 사용하면 좋은 Architecture입니다. Log 등 모아 두었다가 Insert 하거나
Cache가 장애가 나도 다시 복구 할 수 있는 Data를 처리 할 때 사용하면 좋을 것 같습니다.
Race Condition
공유 자원에 대해 여러 개의 프로세스가 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말합니다.
동시에 접근할 때 자료의 일관성을 해치는 결과가 나타날 수 있습니다. 그래서 Redis에서는 Distributed locking{:target="_blank"}을 제공하고 있습니다.
Redis use case
- Session Cache
- Ranking Board
- Queues
- Look aside cache
- Pub/Sub
Redis Collections
String
- 단일 Key
- set
<key>
<value>
- get
<key>
- set
- 멀티 Key
- mset
<key1>
<value1>
<key2>
<value2>
<keyN>
<valueN>
- mget
<key1>
<key2>
<keyN>
- mset
List
- insert
- Lpush
<key>
<value>
- Rpush
<key>
<value>
- Lpush
- pop
- Lpop
<key>
- BLpop
<key>
- Rpop
<key>
- BRpop
<key>
- Lpop
Set
- SADD
<key>
<value>
<value>
가 있으면 추가 되지 않음
- SMEMBERS
<key>
- 모든
<value>
를 리턴
- 모든
- SISMEMBER
<key>
<value>
<value>
가 있으면 1, 없으면 0Sorted Set
- ZADD
<key>
<score>
<value>
<value>
가 있으면 해당<value>
로 변경
- ZRANGE
<key>
<startindex>
<endindex>
- index 범위의 값을 리턴Hash
Redis manage
Memory manage
- physical memory 이상 사용하지 않게 모니터링
- maxmemory 설정해도 그 이상 사용하게 될 수 있음
- RSS 모니터링
- swap을 사용하는 memory를 접근할 경우 느림
- 하나의 instance memory를 사용하는 것보다 적은 용량의 여러개 instance를 사용하는 것이 안전함
- 용량이 부족할때
- Memory를 70% 이상 사용할 경우 장비 Scale up
- 데이터 정리 하기
- ziplist
- collection은 memory를 많이 사용함
- Hash + HashTable
- Sorted Set + Skiplist + HashTable
- Set + HashTable
- collection은 memory를 많이 사용함
O(N)
- Redis는 Single Threaded이므로 한번에 하나의 명령어만 실행
- 전체 데이터를 리턴하는 명령어는 사용을 자제해야 함
- KEYS
- Scan 명령어로 대체 가능
- FLUSHALL, FLUSHDB
- Delete Collection
- Get All Collection
- KEYS
Replication
- Replication 실행 시 fork가 발생하므로 메모리 부족현상이 발생할수 있음
- Redis-cli --rdb 명령은 현재상태 메모리 스냅샷 메모리 부족현상이 발생할수 있음
Redis Cluster
- Slot 16384
- Hash 알고리즘 crc16
장점
- 자체적인 primary, Secondary Failover
- Slot 단위 데이터 관리
단점
- 메모리 사용량 많음
- migration 시점은 관리자가 결정
Redis Failover
- Coordinator 기반 Failover
- VIP/DNS 기반 Failover
- Redis Cluster의 사용
Monitoring Factor
Redis info
- Rss
- Use Memory
- Connection 수
- 초당 처리 요청 수System
- CPU
- Disk
- Netword rx/tx
댓글