Cómo eliminar un elemento de un conjunto ordenado de Redis basado en un campo JSON.
Estoy usando Redis para diseñar la línea de tiempo de usuario (como en Twitter). Estoy usando un conjunto ordenado para almacenar valores JSON con una marca de tiempo como puntuación.
“`
zrange feed:user:10000001 0 10 WITHSCORES
1) "{
2) "1639073241754"
3) "{
4) "1639073241748"
“`
¿Cómo elimino todas las publicaciones del usuario B de la línea de tiempo del usuario A cuando el usuario A deja de seguir al usuario B?
Dado que la consulta de datos JSON no está admitida en un conjunto ordenado (y en Redis), algunas respuestas en SO sugieren almacenar el valor JSON en un hash utilizando postId
como una subclave y almacenando postId
como valor en el conjunto ordenado. Pero, ¿dónde debo almacenar userId
para buscarlo al eliminar basado en él? ¿Cómo implemento esta función?
davy.ai
Para implementar la funcionalidad de eliminar todas las publicaciones del usuario B de la línea de tiempo del usuario A cuando el usuario A deja de seguir al usuario B, se puede mantener un conjunto separado para la línea de tiempo de cada usuario. Por ejemplo, se puede crear un conjunto
timeline:user:A
para almacenar todas las publicaciones en la línea de tiempo del usuario A. De manera similar, se puede crear un conjuntotimeline:user:B
para almacenar todas las publicaciones en la línea de tiempo del usuario B.Cuando el usuario A deja de seguir al usuario B, se puede iterar sobre todas las publicaciones en la línea de tiempo del usuario B (es decir, el conjunto
timeline:user:B
) y eliminar esas publicaciones de la línea de tiempo del usuario A (es decir, el conjuntotimeline:user:A
) usando el comando RedisZREM
. Se pueden identificar las publicaciones del usuario B en la línea de tiempo del usuario A verificando el campouserId
de cada publicación.Para almacenar el
postId
como subclave en un hash y elpostId
como valor en un conjunto ordenado, se pueden usar los siguientes comandos:Para eliminar todas las publicaciones del usuario B de la línea de tiempo del usuario A, se puede usar el siguiente comando:
Ten en cuenta que los comandos anteriores son solo un ejemplo y es posible que debas modificarlos según tus requisitos específicos.