SlideShare a Scribd company logo
Redis 기능의 변화
- 2.8 부터 최근까지
글로벌 오픈 프론티어 4기 파트, 강대명
발표자 소개
• 강대명
• Redis Contributor
• RedisConf 2016 Speaker
오늘 할 이야기들
• Redis 3.x 부터 최근까지(2.8도 조금)
• 가볍게 살펴보고 깊게 들어가지 않습니다.
버전 추가된 기능
2.8 HyperLogLog
3.0 Redis Cluster
3.2 GeoHash
4.0 Redis Module
HyperLogLog #1
• From 2.8
• 원리는 논문을 참고하세요. 키워드로 검색하면 바로 나옵니다.
• 화장품 광고의 타켓 두 그룹
• A: 20대 후반 여성(50만명)
• B: 서울의 여성(100만명)
• A+B의 Unique 한 광고 타겟은 몇 명일까?
• 50만명 + 100만명 = 150만명?
• 유니크한 유저를 다시 구해야 할까요?
HyperLogLog #2
• 유니크 유저는 어떻게 구해야 하나요?
• A그룹을 로딩해서, B그룹에 존재하는지 일일이 찾아야 합니다.
• 유저 수가 클 수록 시간이 많이 걸리게 됩니다.
• 그렇다면 HyperLogLog는…
• 확률적 자료구조
• 정확도가 떨어지는 대신, 메모리를 적게 먹고, 속도가 빠릅니다.
• 즉 유니크한 원소의 정확한 값이 아닌 근사치 값을 보여줍니다.
• 버킷 사이즈에 따라서 달라지는데, 15%에서 20% 까지의 차이가 있을 수 있습니다.
• 이러면 써야되? 라는 생각이 드실 수도 있는데, 들어가는 비용이 정말 작아서…
HyperLogLog #3
• PFADD, PFCOUNT, PFMERGE 의 세 가지 명령이 있습니다.
명령어 내용
PFADD HyperLogLog 를 생성한다.
PFCOUNT HyperLogLog 내의 Unique한 값을 보여준다.
PFMERGE HyperLogLog 그룹을 하나로 합쳐준다.
HyperLogLog #4
• PFADD pf1 a b c d e f g
• PFCOUNT pf1
• 7
• PFADD pf1 a b c z
• PFCOUNT pf1
• 8
• PFADD pf2 e1 e2 e3 e4 a b
• PFCOUNT pf2
• 6
• PFMERGE pf3 pf1 pf2
• PFCOUNT pf3
• 12
Redis Cluster #1
• From 3.0
• 모두가 기다리던 Redis Cluster
• 그런데 결과적으로는 좋아하는 곳도 있고,
• 아닌곳도 많습니다.
Redis Cluster #2
• 동작원리
• 미리 16384 개의 Hash Slot을 정의해두고 주어진 노드들에게 할당한다.
• Node #1 : 0 ~ 5461
• Node #2: 5462 ~ 10922
• Node #3: 10923 ~ 16384
• crc16(key) % 16384 = 0 면, 0가 속하는 노드에 저장됨.
Node #1
Master
Node #2
Master
Node #3
Master
Node #1
Slave
Node #2
Slave
Node #3
Slave
Client
crc16(“kosslab”) % 16384 = 0
저장
Redis Cluster #3
• Slave 노드는 자신의 Master의 내용만 들고 있음.
• 즉 Node #2의 Master, Slave 가 모두 장애가 났을 때는 그냥 데이터 유실.
• Slot의 재분배를 통해서 데이터의 이동이 가능함.
• Migration 중인 Slot은 잠시 사용 불가.
Redis Cluster #4
• Redirection
Node #1
Master
Node #2
Master
Node #3
Master
Client
set kosslab 123
<- MOVED 0 127.0.0.1:7002
Redis Cluster #5
• No Redirection
Node #1
Master
Node #2
Master
Node #3
Master
Client
set kosslab 123
저장
Redis Cluster #6 – no cli cluster mode
• cli> set kosslab 123
• -> (error) MOVED 0 127.0.0.1:7002
• cli> set openfrontier 123
• -> (error) MOVED 13000 located at 127.0.0.1:7000
• cli> get kosslab
• -> (error) MOVED 0 127.0.0.1:7002
• cli> get openfrontier
• -> (error) MOVED 0 127.0.0.1:7000
Redis Cluster #6 – cli cluster mode
• cli:7001> set kosslab 123
• -> Redirected to slot [0] located at 127.0.0.1:7002
• OK
• cli:7002> set openfrontier 123
• -> Redirected to slot [0] located at 127.0.0.1:7000
• OK
• cli:7000> get kosslab
• Redirected to slot [0] located at 127.0.0.1:7002
• “123”
• cli:7002> get openfrontier
• Redirected to slot [0] located at 127.0.0.1:7000
• “123”
GeoHash #1
• From 3.2
• Redis 도 GeoHash가 지원됩니다.
• 우버 같은 서비스를 만든다면?
• 각 우버드라이버의 위치 정보가 존재(지속적 업데이트)
• 우버사용자의 위치가 존재
• 현재 사용자의 위치에서 반경 K 킬로미터에 있는 우버드라이버의 리스트를 가져온다면?
GeoHash #2
명령어 내용
GEOADD GEO Location 정보를 추가한다.
GEOHASH 해당 위치 정보에 대한 해식밧을 출력한다.
GEOPOS 해당 유저의 지역정보를 출력한다.
GEODIST 두 지역간의 거리를 출력한다.
GEORADIUS 특정 지역 반경에 존재하는 객체를 조회한다.
GEORADIUSBYMEMBER 특정 객체 반경에 존재하는 객체를 조회한다.
GeoHash #3
• cli> GEOADD coex 127.0590198 37.5119854 bugerking 127.0588857
37.5127556 coex_sb 127.0601088 37.5153427 bong_sb
• cli> GEORADIUSBYMEMBER coex bugerking 1 km
• 1) "bugerking"
• 2) "coex_sb"
• 3) "bong_sb"
• cli> GEORADIUSBYMEMBER coex bugerking 100 m
• 1) "bugerking"
• 2) "coex_sb"
• cli> GEORADIUSBYMEMBER coex bugerking 10 m
• 1) "bugerking"
Redis Module #1
• From 4.0
• Redis는 lua script를 지원함.
• lua script 사용의 단점
• 성능이 느리다.(네이티브로 돌았으면 좋겠다.)
• 그러면서 다양한 기능을 커버했으면 좋겠다.
• Redis PR의 대부분은 기능 추가
• 기존에 잘 받아들여지지 않음.(가벼운(?) 서버를 지향.)
Redis Module #2
• Redis Module
• Dynamic Loading Library(.so)
• 플러그인 방식으로 Redis Command를 동적으로 등록할 수 있다.
• 기존 명령을 바꿀 수는 없지만, 내부적으로 사용이 가능
• 새로운 명령을 등록함으로써, 자료구조를 추가할 수 있다.
Redis Module #3
• RedisLabs Module Repository
• https://github.com/RedisLabsModules
• bloomfilter, Full-Text Search 같은 모듈이 이미 만들어져 있음
Redis Module #4
• 모듈 작성시 주의 사항
• Redis는 Single Threaded 이므로, 모듈에서 긴 시간 처리하는 경우 Redis 자체가 블
럭되어 버림.
• 모듈에서 장애가 날 경우, Redis 서버 자체가 종료됨.
• Master/Slave 형태일 경우는, 장애를 대비해서 Slave 들도 해당 모듈을 다 로드해야
함.
• Redis 코드 자체가 익숙할 경우는 모듈 개발이 어렵지는 않음.
Thanks you!

More Related Content

PDF
Redis From 2.8 to 4.x(unstable)
PDF
Redis basicandroadmap
PDF
Redis acc 2015
PDF
Redis 2017
PDF
Techplanetreview redis
PDF
Redis edu 3
PPT
Redis Overview
PDF
Redis trouble shooting
Redis From 2.8 to 4.x(unstable)
Redis basicandroadmap
Redis acc 2015
Redis 2017
Techplanetreview redis
Redis edu 3
Redis Overview
Redis trouble shooting

What's hot (20)

PPTX
이것이 레디스다.
PDF
[234]멀티테넌트 하둡 클러스터 운영 경험기
PDF
PDF
[2B5]nBase-ARC Redis Cluster
PDF
Redis edu 1
PDF
How to use redis well
PDF
Redis on AWS
PPTX
Redis
PPTX
Node Js와 Redis를 사용한 구조화된 데이터
PDF
Cache governance
PPTX
분산저장시스템 개발에 대한 12가지 이야기
PDF
Mongodb 특징 분석
PDF
Massive service basic
PDF
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
PDF
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
PDF
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
PDF
Redis edu 4
PDF
[252] 증분 처리 플랫폼 cana 개발기
PDF
[142]편광을 활용한6 dof 전현기
PPTX
Cassandra education material
이것이 레디스다.
[234]멀티테넌트 하둡 클러스터 운영 경험기
[2B5]nBase-ARC Redis Cluster
Redis edu 1
How to use redis well
Redis on AWS
Redis
Node Js와 Redis를 사용한 구조화된 데이터
Cache governance
분산저장시스템 개발에 대한 12가지 이야기
Mongodb 특징 분석
Massive service basic
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[OpenInfra Days Korea 2018] Day 2 - CEPH 운영자를 위한 Object Storage Performance T...
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
Redis edu 4
[252] 증분 처리 플랫폼 cana 개발기
[142]편광을 활용한6 dof 전현기
Cassandra education material
Ad

Viewers also liked (6)

PDF
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
PPTX
How to study
PDF
인프런 - 스타트업 인프랩 시작 사례
PDF
Soma search
PPTX
소프트웨어 공부하는법
PDF
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
How to study
인프런 - 스타트업 인프랩 시작 사례
Soma search
소프트웨어 공부하는법
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
Ad

Similar to Redis From 2.8 to 4.x (20)

PPTX
Backend Master | 2.1.4 Cache - Redis Clustering part.1
PPTX
Hanghae99 FinalProject Moyeora!
PDF
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
PDF
Redis Active 전환 조사를 위한 자료 조사 및 상용화 방안 확인
PPTX
Python qgis advanced
PDF
redis 소개자료 - 네오클로바
PDF
닷넷프레임워크에서 Redis 사용하기
PPTX
Redis data design by usecase
PDF
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
PDF
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
PPTX
Mongodb and spatial
PDF
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
PDF
스프링 데이터 레디스 엘라스틱 발표자료
PDF
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)
PDF
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
PPTX
Collo -02 , kr
PPTX
공간정보거점대학 PostGIS 고급과정
PDF
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
PDF
[215]네이버콘텐츠통계서비스소개 김기영
PDF
GDG on Campus KHU : 1~7 sprint Challenge.pdf
Backend Master | 2.1.4 Cache - Redis Clustering part.1
Hanghae99 FinalProject Moyeora!
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
Redis Active 전환 조사를 위한 자료 조사 및 상용화 방안 확인
Python qgis advanced
redis 소개자료 - 네오클로바
닷넷프레임워크에서 Redis 사용하기
Redis data design by usecase
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Mongodb and spatial
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
스프링 데이터 레디스 엘라스틱 발표자료
20140806 AWS Meister BlackBelt - Amazon Redshift (Korean)
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
Collo -02 , kr
공간정보거점대학 PostGIS 고급과정
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[215]네이버콘텐츠통계서비스소개 김기영
GDG on Campus KHU : 1~7 sprint Challenge.pdf

More from DaeMyung Kang (20)

PPTX
Count min sketch
PDF
Ansible
PDF
Why GUID is needed
PPTX
The easiest consistent hashing
PDF
How to name a cache key
PDF
Integration between Filebeat and logstash
PDF
How to build massive service for advance
PDF
Data Engineering 101
PDF
How To Become Better Engineer
PPTX
Kafka timestamp offset_final
PPTX
Kafka timestamp offset
PPTX
Data pipeline and data lake
PDF
Redis acl
PDF
Coffee store
PDF
Scalable webservice
PDF
Number system
PDF
webservice scaling for newbie
PDF
Internet Scale Service Arichitecture
PDF
Bloomfilter
PDF
Using spark data frame for sql
Count min sketch
Ansible
Why GUID is needed
The easiest consistent hashing
How to name a cache key
Integration between Filebeat and logstash
How to build massive service for advance
Data Engineering 101
How To Become Better Engineer
Kafka timestamp offset_final
Kafka timestamp offset
Data pipeline and data lake
Redis acl
Coffee store
Scalable webservice
Number system
webservice scaling for newbie
Internet Scale Service Arichitecture
Bloomfilter
Using spark data frame for sql

Redis From 2.8 to 4.x

  • 1. Redis 기능의 변화 - 2.8 부터 최근까지 글로벌 오픈 프론티어 4기 파트, 강대명
  • 2. 발표자 소개 • 강대명 • Redis Contributor • RedisConf 2016 Speaker
  • 3. 오늘 할 이야기들 • Redis 3.x 부터 최근까지(2.8도 조금) • 가볍게 살펴보고 깊게 들어가지 않습니다. 버전 추가된 기능 2.8 HyperLogLog 3.0 Redis Cluster 3.2 GeoHash 4.0 Redis Module
  • 4. HyperLogLog #1 • From 2.8 • 원리는 논문을 참고하세요. 키워드로 검색하면 바로 나옵니다. • 화장품 광고의 타켓 두 그룹 • A: 20대 후반 여성(50만명) • B: 서울의 여성(100만명) • A+B의 Unique 한 광고 타겟은 몇 명일까? • 50만명 + 100만명 = 150만명? • 유니크한 유저를 다시 구해야 할까요?
  • 5. HyperLogLog #2 • 유니크 유저는 어떻게 구해야 하나요? • A그룹을 로딩해서, B그룹에 존재하는지 일일이 찾아야 합니다. • 유저 수가 클 수록 시간이 많이 걸리게 됩니다. • 그렇다면 HyperLogLog는… • 확률적 자료구조 • 정확도가 떨어지는 대신, 메모리를 적게 먹고, 속도가 빠릅니다. • 즉 유니크한 원소의 정확한 값이 아닌 근사치 값을 보여줍니다. • 버킷 사이즈에 따라서 달라지는데, 15%에서 20% 까지의 차이가 있을 수 있습니다. • 이러면 써야되? 라는 생각이 드실 수도 있는데, 들어가는 비용이 정말 작아서…
  • 6. HyperLogLog #3 • PFADD, PFCOUNT, PFMERGE 의 세 가지 명령이 있습니다. 명령어 내용 PFADD HyperLogLog 를 생성한다. PFCOUNT HyperLogLog 내의 Unique한 값을 보여준다. PFMERGE HyperLogLog 그룹을 하나로 합쳐준다.
  • 7. HyperLogLog #4 • PFADD pf1 a b c d e f g • PFCOUNT pf1 • 7 • PFADD pf1 a b c z • PFCOUNT pf1 • 8 • PFADD pf2 e1 e2 e3 e4 a b • PFCOUNT pf2 • 6 • PFMERGE pf3 pf1 pf2 • PFCOUNT pf3 • 12
  • 8. Redis Cluster #1 • From 3.0 • 모두가 기다리던 Redis Cluster • 그런데 결과적으로는 좋아하는 곳도 있고, • 아닌곳도 많습니다.
  • 9. Redis Cluster #2 • 동작원리 • 미리 16384 개의 Hash Slot을 정의해두고 주어진 노드들에게 할당한다. • Node #1 : 0 ~ 5461 • Node #2: 5462 ~ 10922 • Node #3: 10923 ~ 16384 • crc16(key) % 16384 = 0 면, 0가 속하는 노드에 저장됨. Node #1 Master Node #2 Master Node #3 Master Node #1 Slave Node #2 Slave Node #3 Slave Client crc16(“kosslab”) % 16384 = 0 저장
  • 10. Redis Cluster #3 • Slave 노드는 자신의 Master의 내용만 들고 있음. • 즉 Node #2의 Master, Slave 가 모두 장애가 났을 때는 그냥 데이터 유실. • Slot의 재분배를 통해서 데이터의 이동이 가능함. • Migration 중인 Slot은 잠시 사용 불가.
  • 11. Redis Cluster #4 • Redirection Node #1 Master Node #2 Master Node #3 Master Client set kosslab 123 <- MOVED 0 127.0.0.1:7002
  • 12. Redis Cluster #5 • No Redirection Node #1 Master Node #2 Master Node #3 Master Client set kosslab 123 저장
  • 13. Redis Cluster #6 – no cli cluster mode • cli> set kosslab 123 • -> (error) MOVED 0 127.0.0.1:7002 • cli> set openfrontier 123 • -> (error) MOVED 13000 located at 127.0.0.1:7000 • cli> get kosslab • -> (error) MOVED 0 127.0.0.1:7002 • cli> get openfrontier • -> (error) MOVED 0 127.0.0.1:7000
  • 14. Redis Cluster #6 – cli cluster mode • cli:7001> set kosslab 123 • -> Redirected to slot [0] located at 127.0.0.1:7002 • OK • cli:7002> set openfrontier 123 • -> Redirected to slot [0] located at 127.0.0.1:7000 • OK • cli:7000> get kosslab • Redirected to slot [0] located at 127.0.0.1:7002 • “123” • cli:7002> get openfrontier • Redirected to slot [0] located at 127.0.0.1:7000 • “123”
  • 15. GeoHash #1 • From 3.2 • Redis 도 GeoHash가 지원됩니다. • 우버 같은 서비스를 만든다면? • 각 우버드라이버의 위치 정보가 존재(지속적 업데이트) • 우버사용자의 위치가 존재 • 현재 사용자의 위치에서 반경 K 킬로미터에 있는 우버드라이버의 리스트를 가져온다면?
  • 16. GeoHash #2 명령어 내용 GEOADD GEO Location 정보를 추가한다. GEOHASH 해당 위치 정보에 대한 해식밧을 출력한다. GEOPOS 해당 유저의 지역정보를 출력한다. GEODIST 두 지역간의 거리를 출력한다. GEORADIUS 특정 지역 반경에 존재하는 객체를 조회한다. GEORADIUSBYMEMBER 특정 객체 반경에 존재하는 객체를 조회한다.
  • 17. GeoHash #3 • cli> GEOADD coex 127.0590198 37.5119854 bugerking 127.0588857 37.5127556 coex_sb 127.0601088 37.5153427 bong_sb • cli> GEORADIUSBYMEMBER coex bugerking 1 km • 1) "bugerking" • 2) "coex_sb" • 3) "bong_sb" • cli> GEORADIUSBYMEMBER coex bugerking 100 m • 1) "bugerking" • 2) "coex_sb" • cli> GEORADIUSBYMEMBER coex bugerking 10 m • 1) "bugerking"
  • 18. Redis Module #1 • From 4.0 • Redis는 lua script를 지원함. • lua script 사용의 단점 • 성능이 느리다.(네이티브로 돌았으면 좋겠다.) • 그러면서 다양한 기능을 커버했으면 좋겠다. • Redis PR의 대부분은 기능 추가 • 기존에 잘 받아들여지지 않음.(가벼운(?) 서버를 지향.)
  • 19. Redis Module #2 • Redis Module • Dynamic Loading Library(.so) • 플러그인 방식으로 Redis Command를 동적으로 등록할 수 있다. • 기존 명령을 바꿀 수는 없지만, 내부적으로 사용이 가능 • 새로운 명령을 등록함으로써, 자료구조를 추가할 수 있다.
  • 20. Redis Module #3 • RedisLabs Module Repository • https://github.com/RedisLabsModules • bloomfilter, Full-Text Search 같은 모듈이 이미 만들어져 있음
  • 21. Redis Module #4 • 모듈 작성시 주의 사항 • Redis는 Single Threaded 이므로, 모듈에서 긴 시간 처리하는 경우 Redis 자체가 블 럭되어 버림. • 모듈에서 장애가 날 경우, Redis 서버 자체가 종료됨. • Master/Slave 형태일 경우는, 장애를 대비해서 Slave 들도 해당 모듈을 다 로드해야 함. • Redis 코드 자체가 익숙할 경우는 모듈 개발이 어렵지는 않음.