====== Redis ======
* [[nosql:redis:stream|Redis Stream]]
* [[http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/|Fast, easy, realtime metrics using Redis bitmaps]]
* [[http://architects.dzone.com/articles/couple-redis-gotchas-focus|A Couple Redis Gotchas with a Focus on Concurrency]]
* [[http://www.javacodegeeks.com/2012/06/using-redis-with-spring.html|Using Redis with Spring]]
* [[http://blog.iamdenny.com/play/translation/redis-cluster|Redis Cluster]]
* [[http://www.javacodegeeks.com/2012/10/redis-pubsub-using-spring.html|Redis pub/sub using Spring - Java Code Geeks]]
* [[http://www.javacodegeeks.com/2015/09/redis-a-nosql-key-value-store.html|Redis Tutorial: NoSQL key-value store | Java Code Geeks]]
* [[https://github.com/ozimov/embedded-redis|Embedded-Redis]] : embedded-redis 는 매우 여러 곳에서 만들었다. redis 바이너리를 jar 안에 묶어 놓고 있으며, 이를 각 운영체제에서 실행하는 형식
* [[nosql:garnet|Garnet]]
===== 기본 명령 =====
* [[https://redis.io/commands/|Redis commands]] : ''Examples'' 에서 명령어 테스트도 가능함.
* [[http://lzone.de/cheat-sheet/Redis|Redis CheatSheet]]
* [[https://developer.mozilla.org/en-US/docs/Mozilla/Redis_Tips|Redis Tips - Mozilla | MDN]]
===== Ubuntu 설치 =====
sudo apt-get install build-essential
# 버전은 알아서
wget http://download.redis.io/releases/redis-3.0.0.tar.gz
tar xzf redis-3.0.0.tar.gz
cd redis-3.0.0
make
===== 실행 =====
# 실행
src/redis-server
# 간단한 테스트
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
===== Lettuce =====
* Java 에서는 Jedis 보다는 Lettuce를 사용하는게 나은 듯. 2019현재 Lettuce만 replica를 지원함. 성능도 더 좋음.
* [[https://jojoldu.tistory.com/418|Jedis 보다 Lettuce 를 쓰자]]
===== Redis를 통한 대기열(Queue) 구현 =====
* [[https://www.youtube.com/watch?v=MTSn93rNPPE&feature=youtu.be|[우아한테크토크] 선착순 이벤트 서버 생존기! 47만 RPM에서 살아남다?! - YouTube]]
* Sorted Set 을 사용한다.
* ''ZADD'' : 데이터 추가시 부여한 스코어에 따라 정렬
* ''ZRANK'' : 현재 순위 조회
* ''ZRANGE'' : 일정한 수만큼 리스트 조회
===== 주의사항 =====
* Jedis Connection Pool을 사용할 경우 maxIdle, minIdle, maxActive 값을 통일 시키는 것이 성능에 더 유리했다. 잠시의 idle 상태일 때 커넥션을 끊었다가 다시 맺을 때의 부하가 매우 심했고, ''connect time out''이 매우 많이 발생했다.
* [[http://charsyam.wordpress.com/2013/04/22/%ec%9e%85-%ea%b0%9c%eb%b0%9c-redis-masterslave-%ec%97%b0%ea%b2%b0%ec%9d%b4-%ea%b3%84%ec%86%8d-%eb%81%8a%ec%96%b4%ec%a7%91%eb%8b%88%eb%8b%a4/|[입 개발] Redis Master/Slave 연결이 계속 끊어집니다.]]
* [[http://charsyam.wordpress.com/2013/05/19/%EC%9E%85-%EA%B0%9C%EB%B0%9C-redis-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81%EC%8B%9C%EC%97%90-%EC%A3%BC%EC%9D%98%ED%95%A0%EC%A0%90/|[입 개발] Redis 데이터 모델링시에 주의할점]] - 한 번에 너무 많은 데이터를 한 set/list 등에 넣지 말고 몇 천개 단위로 잘라라.
* [[http://charsyam.wordpress.com/2013/07/25/%ec%9e%85-%ea%b0%9c%eb%b0%9c-redis-%ec%9e%a5%ec%95%a0-twilio-%ec%9d%98-redis-%ec%9e%a5%ec%95%a0%ec%9d%98-%ec%9b%90%ec%9d%b8%ea%b3%bc-%ed%95%b4%ea%b2%b0%ec%b1%85/|[입 개발: Redis 장애] twilio 의 Redis 장애의 원인과 해결책]]
* 설정에 대한 검증을 강화해야 합니다. 처음부터 aof를 안쓴느데, aof 관련 설정이 켜져있었다는 것은 뭔가 실수가 있었다는 것입니다.
* slave 가 sync 해야할때의 rdb는 옵션을 끄더라도 무조건 발생합니다. 이것이 메모리를 적당히 나눠서 rdb 관련 이슈를 줄여야 하는 이유중에 하나입니다.
* [[http://charsyam.wordpress.com/2013/10/09/%ec%9e%85-%ea%b0%9c%eb%b0%9c-redis-sentinel%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%98%eb%a9%b4%ec%84%9c-%ea%b2%aa%ea%b2%8c-%eb%90%98%eb%8a%94-%eb%ac%b8%ec%a0%9c-%ed%95%98%eb%82%98%ec%99%80-%ed%95%b4/|[입 개발] Redis Sentinel을 이용하면서 겪게 되는 문제 하나와 해결책 | Charsyam's Blog]]
* [[http://www.slideshare.net/charsyam2/redis-trouble-shooting|Redis trouble shooting]]
* [[http://www.redisgate.com/redis/cluster/cluster.php|Redis Cluster]]
* [[https://github.com/antirez/redis/pull/4494| dict & quicklist int problem]] ''dict'',''quicklist''가 키 값을 ''int''로 다루는 버그. Redis **4.0.6** 이상 버전을 사용해야함.
===== Cache =====
* Redis는 가급적 캐시 용도로는 사용하지 말자.
* [[https://charsyam.wordpress.com/2013/02/05/%EC%9E%85-%EA%B0%9C%EB%B0%9C-memcached-%EB%8A%94-predictable-%ED%95%98%EA%B3%A0-redis%EB%8A%94-unpredictable-%ED%95%98%EB%8B%A4/|[입 개발] memcached 는 predictable 하고 Redis는 unpredictable 하다. | Charsyam's Blog]]
===== Client Size Cache =====
* [[https://redis.io/docs/manual/client-side-caching/|Client-side caching in Redis | Redis]]
* [[https://medium.com/garimoo/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%82%AC%EC%9D%B4%EB%93%9C-%EC%BA%90%EC%8B%B1-71a3ca7727ff|클라이언트 사이드 캐싱. Redis 6 New-Feature🎉 | by GARIMOO | garimoo | Medium]] : Redis 6 부터 client side 캐싱지원.
===== GUI =====
* [[https://github.com/erikdubbelboer/phpRedisAdmin|PHP Redis Admin]]
* [[https://redislabs.com/blog/so-youre-looking-for-the-redis-gui/|So, You're Looking for the Redis GUI? | Redis Labs]]
===== Multi threaded IO =====
* [[https://itnext.io/benchmarking-the-experimental-redis-multi-threaded-i-o-1bb28b69a314|Benchmarking the experimental Redis Multi-Threaded I/O | by Filipe Oliveira | ITNEXT]]
* [[https://www.alibabacloud.com/blog/improving-redis-performance-through-multi-thread-processing_594150|Improving Redis Performance through Multi-Thread Processing - Alibaba Cloud Community]]
===== 참조 =====
* [[https://engineering.linecorp.com/ko/blog/detail/306|RedisConf18 발표 후기 : LINE Engineering Blog]]
* [[https://dzone.com/articles/distributed-java-locks-with-redis|Distributed Java Locks With Redis - DZone Java]]
* [[https://charsyam.wordpress.com/2019/10/07/%ec%9e%85-%ea%b0%9c%eb%b0%9c-redis-cli-%ec%97%90%ec%84%9c-rdb%eb%8a%94-%ec%a3%bc%ec%9d%98%ed%95%b4%ec%84%9c-%ec%82%ac%ec%9a%a9%ed%95%98%ec%85%94%ec%95%bc-%ed%95%a9%eb%8b%88%eb%8b%a4/|[입 개발] redis-cli 에서 –rdb는 주의해서 사용하셔야 합니다. | Charsyam's Blog]]
* [[https://charsyam.wordpress.com/2020/11/20/%ec%9e%85-%ea%b0%9c%eb%b0%9c-redis-%ec%9e%a5%ec%95%a0-%ec%a2%85%eb%a5%98-%ec%a0%95%eb%a6%ac/|[입 개발] Redis 장애 종류 정리 | Charsyam's Blog]]
* [[https://redislabs.com/blog/7-redis-worst-practices/|7 Redis Worst Practices | Redis Labs]]
* [[https://redis.io/topics/problems|Problems with Redis? This is a good starting point. – Redis]]
* [[https://charsyam.wordpress.com/2021/10/03/%ec%9e%85-%ea%b0%9c%eb%b0%9c-redis-%ec%97%90%ec%84%9c-redis-cluster-%eb%a1%9c-%ea%b0%88-%eb%95%8c-%ec%a3%bc%ec%9d%98%ed%95%b4%ec%95%bc%ed%95%a0-%eb%b6%80%eb%b6%84%eb%93%a4/|[입 개발] Redis 에서 Redis Cluster 로 갈 때 주의해야할 부분들 | Charsyam's Blog]]
* [[https://tech.kakao.com/2022/02/09/k8s-redis/|쿠버네티스에 레디스 캐시 클러스터 구축기 – tech.kakao.com]]
* [[https://devs0n.tistory.com/92|Redis를 활용한 다양한 시스템 설계]]
* [[https://pompitzz.github.io/blog/Redis/LocalCacheSyncWithRedisPubSub.html#publihser-subscriber-%E1%84%8F%E1%85%A5%E1%84%82%E1%85%A6%E1%86%A8%E1%84%89%E1%85%A7%E1%86%AB-%E1%84%87%E1%85%AE%E1%86%AB%E1%84%85%E1%85%B5|Redis(Pub/Sub)로 로컬 캐시 동기화하기 | BLOG]]
* [[https://www.vinsguru.com/redis-master-slave-with-spring-boot/|Redis Master Slave With Spring Boot | Vinsguru]]
* [[https://blog.leocat.kr/notes/2021/08/10/redis-read-from-replica|[Redis] Master 이외의 Replica(slave)로 부터 읽기]]