El uso de sorted_set de Redis es suficiente después de leer este artículo

Queridos amigos, la última vez hablamos sobre las operaciones relacionadas de Set in Redis y algunos escenarios aplicables, como la lotería . El sorted_set vamos a hablar hoy es en realidad una especie de conjunto, y también tiene las características del conjunto de- la duplicación . A diferencia de set, sorted_set está ordenado, lo que se puede ver en el significado literal.

¿Cómo se ordena sorted_set y según qué reglas? Mira abajo.

Veamos primero qué comandos proporciona sorted_set.

127.0.0.1:6379> help @sorted_set
  BZPOPMAX key [key ...] timeout  summary: Remove and return the member with the highest score from one or more sorted sets, or block until one is available  since: 5.0.0
  BZPOPMIN key [key ...] timeout  summary: Remove and return the member with the lowest score from one or more sorted sets, or block until one is available  since: 5.0.0

  ZADD key [NX|XX] [CH] [INCR] score member [score member ...]  summary: Add one or more members to a sorted set, or update its score if it already exists  since: 1.2.0
  ZCARD key  summary: Get the number of members in a sorted set  since: 1.2.0
  ZCOUNT key min max  summary: Count the members in a sorted set with scores within the given values  since: 2.0.0
  ZINCRBY key increment member  summary: Increment the score of a member in a sorted set  since: 1.2.0
  ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]  summary: Intersect multiple sorted sets and store the resulting sorted set in a new key  since: 2.0.0
  ZLEXCOUNT key min max  summary: Count the number of members in a sorted set between a given lexicographical range  since: 2.8.9
  ZPOPMAX key [count]  summary: Remove and return members with the highest scores in a sorted set  since: 5.0.0
  ZPOPMIN key [count]  summary: Remove and return members with the lowest scores in a sorted set  since: 5.0.0
  ZRANGE key start stop [WITHSCORES]  summary: Return a range of members in a sorted set, by index  since: 1.2.0
  ZRANGEBYLEX key min max [LIMIT offset count]  summary: Return a range of members in a sorted set, by lexicographical range  since: 2.8.9
  ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]  summary: Return a range of members in a sorted set, by score  since: 1.0.5
  ZRANK key member  summary: Determine the index of a member in a sorted set  since: 2.0.0
  ZREM key member [member ...]  summary: Remove one or more members from a sorted set  since: 1.2.0
  ZREMRANGEBYLEX key min max  summary: Remove all members in a sorted set between the given lexicographical range  since: 2.8.9
  ZREMRANGEBYRANK key start stop  summary: Remove all members in a sorted set within the given indexes  since: 2.0.0
  ZREMRANGEBYSCORE key min max  summary: Remove all members in a sorted set within the given scores  since: 1.2.0
  ZREVRANGE key start stop [WITHSCORES]  summary: Return a range of members in a sorted set, by index, with scores ordered from high to low  since: 1.2.0
  ZREVRANGEBYLEX key max min [LIMIT offset count]  summary: Return a range of members in a sorted set, by lexicographical range, ordered from higher to lower strings.  since: 2.8.9
  ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]  summary: Return a range of members in a sorted set, by score, with scores ordered from high to low  since: 2.2.0
  ZREVRANK key member  summary: Determine the index of a member in a sorted set, with scores ordered from high to low  since: 2.0.0
  ZSCAN key cursor [MATCH pattern] [COUNT count]  summary: Incrementally iterate sorted sets elements and associated scores  since: 2.8.0
  ZSCORE key member  summary: Get the score associated with the given member in a sorted set  since: 1.2.0
  ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]  summary: Add multiple sorted sets and store the resulting sorted set in a new key  since: 2.0.0

Como puede ver, la mayoría de los comandos en sorted_set comienzan con Z porque set ocupa S. También hay palabras clave REV en algunos comandos, que representan Reverse, es decir, reverso.

Además, hay dos comandos que comienzan con B, donde B significa Bloqueado, es decir, bloqueado, que también se explica en el documento de ayuda anterior (bloquee hasta que haya uno disponible).

Hay muchos comandos, así que vamos a clasificarlos a grandes rasgos.

imagen

 


Uso básico de sorted_set

A continuación, analizamos el uso específico de los comandos de uso común.

1. Operación básica

 Como se puede ver en el comando ZADD, al agregar elementos a la clave, hay una puntuación de parámetro. Así es, sorted_set establece una puntuación para cada elemento y, al agregarlos, los ordena en orden ascendente de acuerdo con esta puntuación.

  ZADD key [NX|XX] [CH] [INCR] score member [score member ...]  summary: Add one or more members to a sorted set, or update its score if it already exists  since: 1.2.0
/* 将笔试成绩(tom-100,jack-60,tony-80)放入名为 writtenTestScore 的有序集合里,返回元素个数3*/127.0.0.1:6379> zadd writtenTestScore 100 tom 60 jack 80 tony(integer) 3/面试成绩*/127.0.0.1:6379> zadd interviewScore 70 tom 80 jack 60 tony(integer) 3/*zrange列出所有元素*/127.0.0.1:6379> zrange writtenTestScore 0 -11) "jack"2) "tony"3) "tom"/*zrange列出所有元素(笔试成绩),带分值*/127.0.0.1:6379> zrange writtenTestScore 0 -1 withscores1) "jack"2) "60"3) "tony"4) "80"5) "tom"6) "100"/*列出面试成绩*/127.0.0.1:6379> zrange interviewScore 0 -1 withscores1) "tony"2) "60"3) "tom"4) "70"5) "jack"6) "80"A continuación se muestran algunas operaciones para eliminar elementos, incluidas 

ZPOPMAX / BZPOPMAX, ZPOPMIN / BZPOPMIN 、 ZREM 等。

127.0.0.1:6379> ZADD testREM 1 a 2 b 3 c 4 d(integer) 4127.0.0.1:6379> zpopmax testREM 1) "d"2) "4"127.0.0.1:6379> zrem testREM a(integer) 1/*删除10个最大的元素并返回*/127.0.0.1:6379> zpopmax testREM 101) "c"2) "3"3) "b"4) "2"/*元素为空,阻塞1s后,返回空*/127.0.0.1:6379> BZPOPMAX testREM 1(nil)(1.01s/*取某个元素的分值*/127.0.0.1:6379> ZSCORE interviewScore tony"60"

Dos, operaciones estadísticas

Las operaciones estadísticas generalmente incluyen dos tipos, uno es tomar el número o rango de elementos y el otro es tomar una lista de elementos.

/*列出80-100分数段的元素个数*/127.0.0.1:6379> zcount writtenTestScore 80 100(integer) 2/*返回集合中元素个数*/127.0.0.1:6379> zcard writtenTestScore (integer) 3/*取jack的排名*/127.0.0.1:6379> ZRANK writtenTestScore jack(integer) 0
/*取出80-100分数段的元素*/127.0.0.1:6379> ZRANGEBYSCORE writtenTestScore 80 100 withscores1) "tony"2) "80"3) "tom"4) "100"/*取笔试分数最高的前两名*/127.0.0.1:6379> ZREVRANGE writtenTestScore 0 1 withscores1) "tom"2) "100"3) "tony"4) "80"

Tres, operaciones aritméticas

127.0.0.1:6379> ZRANGE writtenTestScore 0 -1 withscores1) "jack"2) "60"3) "tony"4) "80"5) "tom"6) "100"
Después de sumar los puntos de Jack, Jack ocupó el segundo lugar.
127.0.0.1:6379> ZINCRBY writtenTestScore 30 jack"90"127.0.0.1:6379> ZRANGE writtenTestScore 0 -1 withscores1) "tony"2) "80"3) "jack"4) "90"5) "tom"6) "100"

En otras palabras, cada cambio de sorted_set al conjunto mantiene un orden ordenado por puntuación en cualquier momento.

Veamos la operación de unión e intersección.

Con el fin de facilitar la comprensión de la intersección y la unión, establecimos escritoTestScore y respectivamente

Interview_Score realiza la operación de agregar elementos. Es decir, Polly solo participó en la prueba escrita y Lucy solo participó en la entrevista.

127.0.0.1:6379> zadd writtenTestScore 50 polly (integer) 1127.0.0.1:6379> ZRANGE writtenTestScore 0 -1 withscores1) "polly"2) "50"3) "tony"4) "80"5) "jack"6) "90"7) "tom"8) "100"127.0.0.1:6379> zadd interviewScore 50 lucy(integer) 1127.0.0.1:6379> ZRANGE interviewScore 0 -1 withscores1) "lucy"2) "50"3) "tony"4) "60"5) "tom"6) "70"7) "jack"8) "80"
Suponga que desea ordenar por las puntuaciones totales de la prueba escrita (ponderación 0,6) y la entrevista (ponderación 0,4), puede utilizar ZUNIONSTORE para lograrlo.
127.0.0.1:6379> ZUNIONSTORE result 2 writtenTestScore interviewScore weights 0.6 0.4 aggregate sum(integer) 5/*lucy只参加了面试,50*0.4=20; tony笔试80*0.6+面试60*0.4=72*/127.0.0.1:6379> ZRANGE result 0 -1 withscores 1) "lucy" 2) "20" 3) "polly" 4) "30" 5) "tony" 6) "72" 7) "jack" 8) "86" 9) "tom"10) "88"

Suponiendo que haya cambios en los requisitos, las condiciones se incrementan: se asiste a entrevistas y exámenes escritos. En este caso, puede utilizar la operación de intersección establecida ZINTERSTORE.

127.0.0.1:6379> ZINTERSTORE result 2  writtenTestScore interviewScore weights 0.6 0.4 aggregate sum(integer) 3127.0.0.1:6379> ZRANGE result 0 -1 withscores1) "tony"2) "72"3) "jack"4) "86"5) "tom"6) "88"

 

Acerca del algoritmo de clasificación sorted_set

Sorted_set mantiene una ordenación en cualquier momento para las operaciones de cambios de conjuntos, como zadd, zrem, zpop, zincrby, etc.

Simplemente comprenda, el algoritmo de clasificación aquí se implementa con skipList (lista de omisión). Por ejemplo, el algoritmo para saltar la tabla es similar a cuando buscamos una determinada página en un libro, primero encontraremos la tabla de contenido. Por supuesto, puede haber más de un nivel de "directorio" de la tabla de salto.


para resumir

Para resumir un poco, esta vez compartí los tres tipos de operaciones de sorted_set, que son operaciones básicas (que incluyen agregar y eliminar), operaciones estadísticas (número de elementos en el conjunto que cumplen con ciertas condiciones, clasificación y lista de elementos) operaciones, y operaciones (intersección, unión, adición) operaciones.

sorted_set generalmente es adecuado para clasificaciones, por ejemplo, de acuerdo con el número dinámico de me gusta (como el valor de la clave en el conjunto), la clasificación de la tasa de clics de las publicaciones, etc.

Comprensión simple, sorted_set se implementa mediante una tabla de salto.

Bueno, este es el caso de este intercambio, nos vemos la próxima vez.

 

Préstame atención y sigue exportando productos secos técnicos.

Supongo que te gusta

Origin blog.csdn.net/H517604180/article/details/111601194
Recomendado
Clasificación