1 / 31

Using Redis

Using Redis. 2019-01-08, KISTI, Yeonghun Chae. Redis. In-memory Database. 디스크가 아닌 주 메모리 (RAM) 에 모든 데이터를 보유하는 데이터베이스 장점 ? 디스크 기반 데이터베이스에 비해 검색 속도가 빠름 단점 ? DB 서버가 예측되지 못한 오류가 발생하면 데이터가 삭제됨. In-memory Database Software. Redis 특징. In-memory Database 클러스터 지원 Key-Value 데이터 모델

pauli
Download Presentation

Using Redis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Using Redis 2019-01-08, KISTI, YeonghunChae

  2. Redis

  3. In-memory Database • 디스크가 아닌 주 메모리(RAM)에 모든 데이터를 보유하는 데이터베이스 • 장점? • 디스크 기반 데이터베이스에 비해 검색 속도가 빠름 • 단점? • DB 서버가 예측되지 못한 오류가 발생하면 데이터가 삭제됨

  4. In-memory DatabaseSoftware

  5. Redis 특징 • In-memory Database • 클러스터 지원 • Key-Value 데이터 모델 • Publish-Subscribe Pattern 지원 • 데이터에 대한 만료 시간 설정 가능 • 메모리 데이터에 대한 백업 복구 기능

  6. Key-Value Storage • 특정 키 값에 값을 저장하는 구조 • Put / Get 을 통해 데이터 접근 • 쉽게 생각하면 HashMap과 같은 형태의 데이터베이스

  7. Redisvs Memcached • Memcached • 구조가 단순해서 Redis에 비해 적은 메모리 사용 • String 데이터 타입만 지원함 • 주로 HTML 캐싱에 사용됨 • 서버가 재실행되면 데이터가 삭제됨 (메모리만 사용하여 데이터 관리) • Redis • 다양한 데이터 타입 지원 • Pub-Sub 등 다양한 기능 지원 • Session 관리, Message Queuing 등 다양한 응용 • 서버가 재실행되더라도 데이터가 보존됨 (디스크 활용)

  8. Redis Data Type

  9. Redis Failover • Snapshotting 방식 • 순간적으로 메모리에 있는 내용을 디스크로 백업 • 백업을 할 때 시간이 오래 걸림 • 주기적으로 백업하기 때문에 예기치 못한 오류 발생시 일부 데이터가 유실될 위험 • AOF(Append On File) 방식 • Get, Put 등 모든 상태 변화가 발생할 때 상태를 디스크에 기록함 • 상태 변화에 따른 로그를 파일로 저장하여 순차적으로 실행하는 방식 • 재실행 시 속도가 느림

  10. Pub-Sub 모델 • 쉽게 생각하면 채팅 • 특정 클라이언트가 Redis로 Publish(데이터 추가)를 하면 Subscribe 하고있는 모든 클라이언트에 전달 (Broadcast) • Pub-Sub을 활용하여 Message Queuing 시스템으로 사용 가능

  11. Redis 사용시 주의사항 • 메모리 용량을 초과하는 데이터를 보관 • Disk Swap 영역을 사용하게 되기 때문에속도가 느려짐 • 기본적으로 자주 사용되는 메모리가 우선적으로 메모리에 남아있기 때문에 사용시 큰 문제가 되지는 않지만, 과도하게 용량이 초과되는 경우에는 조치가 필요함 • 충분한 메모리 확보가 필요 • 데이터 백업 • 데이터에 대해 100% 안전하게 보관이 불가능하기 때문에 휘발성 데이터에 대해서만 주로 사용 권장 • 보안 • 기본적으로 별도의 보안 옵션을 제공하지 않기 때문에 방화벽 설정이 필요함

  12. Redis 활용 예시 • 웹 서버에서 HTML 캐싱 • 사용자 로그인 Session 관리 • 채팅 어플리케이션 서버 • Message Broker 시스템

  13. Redis 활용

  14. Redis 명령어 • Redis 접속 및 Get / Set • redis-cli -h 127.0.0.1 • get testkey • set testkey testvalue • set testint 1 • INCR testint • INCRBY testint 10 • mget testkey testint

  15. Redis 명령어 • List & Hash • rpush testlist test1 test2 test3 • lrange testlist 0 -1 • rpop testlist • hmset testhash name user1 birth 2000 • hget testhash name • hgetall testhash

  16. Redis 명령어 • Set & Sorted Set • sadd testset v1 v2 v3 • smembers testset • zadd testsortedset 1 v3 • zadd testsortedset 3 v1 • zadd testsortedset 2 v2 • zrange testsortedset 0 -1

  17. Redis 명령어 • 데이터 삭제 • keys * • del testlist • flushall

  18. Redis 명령어 • Pub-Sub • subscribe ch1 ch2 • publish ch1 hello,world!

  19. Redis 응용 -Session

  20. Session 이란? • 웹 서버에서 사용자에 대한 상태를 저장하기 위한 데이터 구조 • 브라우저의 쿠키와 서버에서 동일한 키 값(세션키)을 가지고 있음 • 세션키에 대한 데이터를 서버에서 보관함 (Key-Value 타입)

  21. 기존 Session 관리 방식 • PHP는 세션 값을 파일 시스템의 특정 공간에 저장하여 활용 • 디스크 I/O로 인해 성능 저하가 발생 할 수 있음 • Java 기반의 WAS(Tomcat 등)에서는 코드상에서 메모리에 저장하여 관리 • WAS를 재실행 하는 경우 세션이 유지되지 않음 • Node.js Express의 경우 별도 설정을 하지 않으면 메모리에 세션 정보를 저장 • Java WAS와 마찬가지로 재실행시 세션이 유지되지 않음

  22. 기존 Session 관리 방식의 한계 • Load Balancer 등을 사용하여 웹 서버를 분산하는 경우 • 접근하는 서버에 따라 세션 동기화가 되지 않음 • Load Balancer가 사용자의 접근을 어느정도 관리하기 때문에 큰 문제는 없지만, 간혹 부하가 몰리는 경우 다른 서버로 할당되기 때문에 로그인이 풀리는 경우가 있음

  23. Redis를 활용하는 경우 장점 • Load Balancer를 사용하여 분산하더라도 세션 정보를 항상 동기화 할 수 있음 • 메모리 상에 데이터를 보관하기 때문에 속도가 빠름 • 서버를 재실행해도 세션 상태를 유지 할 수 있음

  24. app.js • npm install express express-session connect-redis ioredis • node app.js

  25. Redis 응용 - 채팅

  26. Example Redis Node.js/Socket.io WebServer

  27. ioredis const Redis = require("ioredis") let redis = new Redis({ host: "127.0.0.1", port: 6379 }) redis.subscribe("channel") redis.on("message", (channel, message)=> { console.log(message) }) • npm install ioredis const Redis = require("ioredis") let redis = new Redis({ host: "127.0.0.1", port: 6379 }) redis.publish("channel", "Hello, World!")

  28. Redis 응용 -Message Brocker

  29. Message Broker • 송신자의 이전 메시지 프로토콜로부터의 메시지를 수신자의 이전 메시지 프로토콜로 변환하는 중간 컴퓨터 프로그램 모듈 • IoT에서 데이터를 수집할 때 안정성을 위해 Message Broker를 사용함 • IoT에서의 Message Broker로 Mosca가 있음 • https://github.com/mcollina/mosca • MQTT 프로토콜의 데이터를 변환하기 위해 사용됨 • 센서로부터 전송받은 데이터를 서버에 저장하기 전 단계에서 사용됨

  30. const mosca = require("mosca") let ascoltatore = { type: "redis", redis: require("redis"), db: 12, port: 6379, return_buffers: true, host: "127.0.0.1" } let moscaSettings = { port: 1883, backend: ascoltatore, persistence: { factory: mosca.persistence.Redis } } let server = new mosca.Server(moscaSettings) server.on("ready", ()=> console.log("Server Running")) server.on("clientConnected", (client)=> console.log(client.id)) server.on("publish", (packet, client)=> console.log(client.topic, client.payload) ) Mosca • npm install mosca --save • https://github.com/mcollina/mosca

  31. THANK YOU proin@kisti.re.kr

More Related