RTT del clúster de Redis

RTT del clúster de Redis

Actualmente utilizamos Redis como nuestro almacén de datos. Estoy creando una nueva sección donde necesitamos clasificar y paginar a los usuarios. Así que estoy pensando en utilizar el conjunto ordenado para mantener el rango y el ID de usuario. Y Hash para mantener los datos del perfil del usuario. Un colega me informó que necesitaremos realizar muchas solicitudes de redistribución para recuperar los datos del perfil de los usuarios utilizando HGET. Entonces el tiempo de ida y vuelta será un problema. Estaba planeando usar HMGET pero después de investigar un poco descubrí que puede causar problemas cuando Redis está agrupado porque las claves se almacenan en diferentes nodos de Redis. Estoy usando phpredis y tiene fragmentación del lado del cliente (tengo problemas para entender qué es eso).

Estaba pensando en hacer así:

rango

zadd userRank 1 5
zadd userRank 2 2
zadd userRank 3 4
zadd userRank 4 3

perfil del usuario

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 funcionará normalmente en Redis agrupados?

2) si no, ¿qué puedo hacer?

3) ¿Existe alguna forma mejor de implementar esto?

Respuesta1

  1. HMGET debería funcionar en Redis agrupado porque solo está relacionado con una única clave. Cada HMGET se reenviará al nodo que contiene la clave
  2. /
  3. No es una buena idea almacenar cada usuario serializado en un hash; perderá la capacidad de solicitar/inc/dec algunos campos.

Preferir:

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

Su esquema de clasificación está bien. Para recuperar y paginar entre los usuarios mejor clasificados, simplemente haga unZREVRANGEBYSCOREy luego solicitar a cada usuario.

Nota:agrupamientono es lo mismo quefragmentación.

información relacionada