Jin's rambling

Redis best practice

Redis에 대해 예전 회사에서 팀내 발표를 할 때 작성한 자료.

주위에서 Redis를 잘못 사용해서 문제가 생겼던 경우를 몇 번 보았다. Best practice를 알고 시작하는게 참 중요하다.

Redis Best Practice

레디스는 뭔가요?


Why 레디스?


Spec:


결론부터 시작:


헷갈리는 부분들… Single Threaded? / async? / eventloop?


메모리가 부족하면 어떻게 되나요?

메모리가 부족하면,

  1. Linux 커널 OOM killer가 Redis를 죽이거나
  2. Redis가 crash하거나,
  3. 서버가 swapping을 하기 시작하면서 Redis가 극심한 성능저하를 겪음

따라서, Redis의 maxmemory와 eviction policy를 같이 설정이 중요함


메모리 사용량을 줄이려면?


Key name은 어떻게 지어야 하나요?


하지 말아야 할 것 / 해야 할 것:


KEY vs SCAN


Expiration



Hash 사용 권장

> SET user:123:follower 5
> SET user:123:likes 20
> SET user:123:comments 30
> KEYS * // !!!! KEYS * only for debugging!
1) "user:123:likes"
2) "user:123:comments"
3) "user:123:follower"
4) "user:123"
> HSET user:123 follower 5
> HSET user:123 likes 20
> HSET user:123 comments 30
> HKEYS user:123
1) "follower"
2) "likes"
3) "comments"

컨넥션 재사용








상용에서는…:


생소하지만 쓸만한 Redis 기능 & 데이터 타입:

> zadd hackers 0 "Alan Kay" 0 "Sophie Wilson" 0 "Richard Stallman" 0 "Anita Borg" 0 "Yukihiro Matsumoto" 0 "Hedy Lamarr" 0 "Claude Shannon" 0 "Linus Torvalds" 0 "Alan Turing"
> zrange hackers 0 -1

1) "Alan Kay"

2) "Alan Turing"

3) "Anita Borg"

4) "Claude Shannon"

5) "Hedy Lamarr"

6) "Linus Torvalds"

7) "Richard Stallman"

8) "Sophie Wilson"










> PFADD alphabets A B C D E
> PFCOUNT alphabets
(integer) 5

Data structure # of keys Time to add Time to count memory cardinality error margin
Hyperloglog 1 million 45s 95.493µs 12KB 1009839 0.9839%
Set 1 million 44s 51.112µs 56.74M 1 million 0%
Hyperloglog 2 million 85s 77.731µs 12KB 2015119 0.7%
Set 2 million 90s 45.831µs 113.48M 2 million 0%

결론