
현재 Redis를 데이터 저장소로 사용하고 있습니다. 사용자 순위를 지정하고 페이지를 매겨야 하는 새 섹션을 만들고 있습니다. 그래서 순위와 사용자 ID를 유지하기 위해 Sorted 세트를 사용할 생각입니다. 그리고 사용자의 프로필 데이터를 유지하기 위한 해시입니다. HGET를 사용하여 사용자 프로필 데이터를 가져오려면 Redis에 많은 요청을 해야 한다는 사실을 동료로부터 알게 되었습니다. 그래서 왕복 시간이 문제가 될 것입니다. HMGET을 사용할 계획이었지만 몇 가지 조사를 한 후에 키가 다른 Redis 노드에 저장되기 때문에 Redis가 클러스터링될 때 문제가 발생할 수 있다는 것을 발견했습니다. 저는 클라이언트 측 샤딩이 있는 phpredis를 사용하고 있습니다(이것이 무엇인지 이해하는 데 어려움을 겪고 있습니다).
나는 이렇게 하려고 생각했어요:
계급
zadd userRank 1 5
zadd userRank 2 2
zadd userRank 3 4
zadd userRank 4 3
유저 프로필
hset userProfile user:5 "{'userId':'5','name':'usera'}"
hset userProfile user:4 "{'userId':'4','name':'userb'}"
hset userProfile user:3 "{'userId':'3','name':'userc'}"
hset userProfile user:2 "{'userId':'2','name':'userb'}"
1) HMGET은 클러스터링된 Redis에서 정상적으로 작동합니까?
2) 그렇지 않다면 어떻게 해야 합니까?
3) 이것을 구현하는 더 좋은 방법이 있습니까?
답변1
- HMGET은 단일 키에만 관련되므로 클러스터형 Redis에서 작동해야 합니다. 각 HMGET은 키가 포함된 노드로 전달됩니다.
- /
- 직렬화된 모든 사용자를 해시에 저장하는 것은 좋은 생각이 아니며 일부 필드를 요청/증가/삭제하는 기능을 잃게 됩니다.
선호하다:
hmset user:5 userId 5 name usera
hmset user:4 userId 4 name userb
hmset user:3 userId 3 name userc
hmset user:2 userId 2 name userb
순위 스키마는 괜찮습니다. 상위 순위 사용자를 검색하고 페이지를 매기려면 다음을 수행하십시오.ZREVRANGEBYSCORE그런 다음 각 사용자에게 요청합니다.