O uso de Sort_set do Redis é suficiente depois de ler este artigo

Caros amigos, conversamos sobre as operações relacionadas de Set no Redis da última vez e alguns cenários aplicáveis, como loteria . O sorted_set vamos falar hoje é na verdade uma espécie de conjunto, e também tem as características de conjunto de- duplicação . Ao contrário de set, Sort_set é ordenado, o que pode ser visto no significado literal.

Como o Sort_set é classificado e de acordo com quais regras? Olhar para baixo.

Vamos primeiro ver quais comandos são fornecidos por Sort_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 você pode ver, a maioria dos comandos em Sort_set começa com Z porque set ocupa S. Existem também palavras-chave REV em alguns comandos, representando Reverse, que significa reverso.

Além disso, existem dois comandos que começam com B, onde B significa Bloqueado, ou seja, bloqueado, o que também é explicado no documento de ajuda acima (bloquear até que um esteja disponível).

Existem muitos comandos, então vamos classificá-los aproximadamente.

imagem

 


Uso básico de Sort_set

Abaixo, examinamos o uso específico dos comandos comumente usados.

1. Operação básica

 Como pode ser visto no comando ZADD, ao adicionar elementos à chave, há uma pontuação de parâmetro. Isso mesmo, Sort_set define uma pontuação para cada elemento e, ao adicioná-los, ordena-os em ordem crescente de acordo com esta pontuação.

  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"Aqui estão algumas operações para excluir elementos, incluindo 

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"

Dois, operações estatísticas

As operações estatísticas geralmente incluem dois tipos: um é para obter o número ou classificação dos elementos e o outro é para obter uma 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"

Três, operações aritméticas

127.0.0.1:6379> ZRANGE writtenTestScore 0 -1 withscores1) "jack"2) "60"3) "tony"4) "80"5) "tom"6) "100"
Depois de adicionar os pontos de jack, jack ficou em 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"

Em outras palavras, cada mudança de Sort_set para o conjunto mantém uma ordem de classificação por pontuação a qualquer momento.

Vejamos a operação de união e interseção.

Para facilitar a compreensão da interseção e união, definimos, respectivamente, writeTestScore e

Interview_Score realiza a operação de adição de elementos. Ou seja, Polly participou apenas da prova escrita e Lucy apenas da 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"
Suponha que você queira classificar pelas pontuações totais do teste escrito (peso 0,6) e entrevista (peso 0,4), você pode usar ZUNIONSTORE para alcançar.
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"

Partindo do pressuposto de que há mudanças de requisitos, as condições são aumentadas: são realizadas entrevistas e exames escritos. Neste caso, você pode usar a operação de definição de interseção 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"

 

Sobre o algoritmo de classificação sort_set

Sorted_set mantém uma classificação a qualquer momento para operações em mudanças de conjunto, como zadd, zrem, zpop, zincrby, etc.

Simplesmente entenda, o algoritmo de classificação aqui é implementado com skipList (lista de pular). Por exemplo, o algoritmo para pular a tabela é semelhante ao que quando procuramos uma determinada página em um livro, encontraremos primeiro o índice analítico. Claro, pode haver mais de um nível de "diretório" da tabela de salto.


Resumindo

Para resumir um pouco, desta vez eu compartilhei os três tipos de operações de Sort_set, que são operações básicas (incluindo adição e exclusão), operações estatísticas (número de elementos no conjunto que atendem a certas condições, classificação e lista de elementos) operações, e operações (interseção, união, adição) operações.

Sort_set é geralmente adequado para classificações, por exemplo, de acordo com o número dinâmico de curtidas (como o valor da chave no conjunto), a classificação da taxa de cliques de postagens, etc.

Entendimento simples, Sort_set é implementado usando uma tabela de salto.

Bem, este é o caso desse compartilhamento, até a próxima.

 

Preste atenção em mim e continue a exportar produtos secos técnicos.

Acho que você gosta

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