Redis 문서를 읽고 http://try.redis-db.com/ 에서 자습서를 시도했습니다 . 지금까지 Redis와 Velocity 또는 Enterprise Library Caching Framework와 같은 캐싱 기술의 차이점을 볼 수 없습니다
고유 키를 사용하여 메모리 내 데이터 저장소에 객체를 효과적으로 추가하는 것입니다. 관계형 의미론이없는 것 같습니다 ...
내가 무엇을 놓치고 있습니까?
Redis 문서를 읽고 http://try.redis-db.com/ 에서 자습서를 시도했습니다 . 지금까지 Redis와 Velocity 또는 Enterprise Library Caching Framework와 같은 캐싱 기술의 차이점을 볼 수 없습니다
고유 키를 사용하여 메모리 내 데이터 저장소에 객체를 효과적으로 추가하는 것입니다. 관계형 의미론이없는 것 같습니다 ...
내가 무엇을 놓치고 있습니까?
답변:
아니요, Redis는 캐시 그 이상입니다.
캐시와 마찬가지로 Redis는 키 = 값 쌍을 저장합니다. 그러나 캐시와 달리 Redis를 사용하면 값을 조작 할 수 있습니다. Redis에는 문자열, 세트, 해시, 목록 및 정렬 된 세트의 5 가지 데이터 유형이 있습니다. 각 데이터 유형은 다양한 작업을 노출합니다.
Redis를 이해하는 가장 좋은 방법은 응용 프로그램을 데이터베이스에 저장하는 방법을 생각하지 않고 응용 프로그램을 모델링하는 것입니다.
StackOverflow.com을 구축한다고 가정하겠습니다. 간단하게 유지하려면 질문, 답변, 태그 및 사용자가 필요합니다.
각 객체는 맵으로 모델링 할 수 있습니다. 예를 들어, 질문은 {id, title, date_asked, votes, ask_by, status} 필드가있는 맵입니다. 마찬가지로 답변은 {id, question_id, answer_text, answers_by, votes, status} 필드가있는지도입니다. 마찬가지로 사용자 객체를 모델링 할 수 있습니다.
이러한 각 객체는 Redis에 직접 해시로 저장할 수 있습니다. 고유 한 ID를 생성하기 위해 atomic incremental 명령을 사용할 수 있습니다. 이 같은 -
$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK
$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK
이제 누군가가 질문이나 답변을지지 할 때마다 이렇게하면됩니다.
$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2
다음으로 가장 최근의 질문을 홈페이지에 표시하려고합니다. .NET 또는 Java 프로그램을 작성하는 경우 질문을 목록에 저장합니다. 이것이 Redis에도 저장하는 가장 좋은 방법입니다.
누군가가 질문을 할 때마다 ID를 목록에 추가합니다.
$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1
이제 홈페이지를 렌더링하고 싶을 때 가장 최근 25 개의 질문을 Redis에 요청합니다.
$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"
이제 ID가 있으므로 파이프 라이닝을 사용하여 Redis에서 항목을 검색하여 사용자에게 표시하십시오.
다음으로 각 태그에 대한 질문을 검색하려고합니다. 그러나 SO를 사용하면 각 태그 아래에서 가장 많이 투표 된 질문, 새로운 질문 또는 답변되지 않은 질문을 볼 수 있습니다.
이를 모델링하기 위해 Redis의 Sorted Set 기능을 사용합니다. 정렬 된 집합을 사용하면 점수를 각 요소와 연결할 수 있습니다. 그런 다음 점수를 기준으로 요소를 검색 할 수 있습니다.
계속해서 Redis 태그에 대해 수행하십시오.
$ zadd questions_by_votes_tagged:redis 2 question:1
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5
1) "question:2"
2) "question:613"
3) "question:1"
우리는 여기서 무엇을 했습니까? 정렬 된 세트에 질문을 추가하고 각 질문에 점수 (득표 수)를 연결했습니다. 질문이 올 때마다 점수가 올라갑니다. 그리고 사용자가 "투표로 분류 된 질문 태그 Redis"를 클릭하면, 우리는 단지 zrevrange
질문을하고 다시 질문을받습니다.
그리고 마지막으로 보너스 기능입니다. 질문 페이지를 열어 놓으면 SO는 새로운 질문이 추가 될 때 알려줍니다. Redis가 어떻게 도와 드릴까요?
Redis에는 pub-sub 모델이 있습니다. 채널을 만들 수 있습니다 (예 : "channel_questions_tagged_redis"). 그런 다음 subscribe
특정 채널을 사용하는 사용자입니다. 새 질문이 추가되면 publish
해당 채널에 메시지가 표시됩니다. 그런 다음 모든 사용자가 메시지를받습니다. 실제로 메시지를 브라우저에 전달하려면 웹 소켓이나 혜성과 같은 웹 기술을 사용해야하지만 Redis는 서버 측의 모든 배관 작업을 도와줍니다.
캐시와 달리 Redis는 하드 디스크의 데이터를 유지합니다. 더 나은 안정성을 제공하기 위해 마스터 슬레이브 설정을 할 수 있습니다. 자세한 내용은 여기 지속성 및 복제 주제를 참조하십시오 -http : //redis.io/documentation
Redis는 초고속 루아 스크립트와 같은 고유 한 기능을 가지고 있습니다. 실행 시간은 C 명령 실행과 같습니다. 또한 잠금 및 세마포어와 같은 많은 고급 객체 작업에 필요한 정교한 Redis 데이터 조작에 원 자성을 제공합니다.
Redisson 이라는 메모리 데이터 그리드에 기반한 Redis가있어 Java에서 분산 애플리케이션 을 쉽게 빌드 할 수 있습니다 . 분산 된 덕분에 Lock
, Semaphore
, ReadWriteLock
, CountDownLatch
, ConcurrentMap
객체 및 많은 다른 사람.
클라우드에서 완벽하게 작동하고 AWS Elasticache , AWS Elasticache Cluster 및 Azure Redis Cache 지원 지원
캐시 서버 외에도 Redis는 특히 데이터 구조 서버입니다. 데이터 구조는 프로그램이나 응용 프로그램의 기본이기 때문에 데이터 구조 서버 형태의 캐시라는 것은 많은 의미가 있습니다 . 스토리지 기술로 SQL 데이터베이스를 사용하고 있으며 목록, 해시 맵, 순위 설정 등을 구성해야한다고 생각하면 목에 통증이 있습니다. Redis는 이러한 기능을 매우 간단한 방법으로 직접 제공 할 수 있으므로 개발을 매우 단순화합니다.
한편, 데이터 구조 서버는 캐시 형태 일 필요는 없습니다. Redis와 호환되는 프로젝트가 있지만 영구 스토리지 엔진이 있습니다.
Redis는 문자열, 해시, 목록, 세트, 범위 쿼리가있는 정렬 된 세트, 비트 맵, 하이퍼 로그, 반경 쿼리 및 스트림이있는 지리 공간 인덱스와 같은 데이터 구조를 지원합니다. Redis는 기본 제공 복제, Lua 스크립팅, LRU 제거, 트랜잭션 및 다양한 디스크 내 지속성을 보유하고 있으며 Redis Sentinel을 통해 고 가용성을 제공하고 Redis Cluster를 사용한 자동 파티셔닝을 제공합니다.
파이썬으로 구현
https://beyondexperiment.com/vijayravichandran06/redis-data-structure-with-python/