2. [série] Redis Redis subjacente estruturas de dados

Originais: 2. [da série] estruturas de dados subjacentes Redis Redis

A viagem de mil milhas começa com um único passo, vamos dar uma olhada no básico de Redis.

Redis tem 5 tipos básicos de dados: String (String), uma lista (lista), conjunto (set), conjunto ordenado (zset), dicionário (Hash). Dominar estes cinco estrutura de dados básica é a parte mais fundamental e mais importante.

(String)

corda Redis é a estrutura de dados simples maioria, o Redis todas as estruturas de dados são baseados em um nome exclusivo como uma chave, e adquire os dados correspondentes Redis chave única. Diferentes tipos de estrutura de dados de diferença é que uma configuração não é o mesmo valor.

String é amplamente utilizado, o mais comum é as informações do usuário cache, as informações do usuário, geralmente usaremos JSON serializado corda, então a string serializada em Redis, também, o usuário tomar o tempo para fazer outra informação Anti da sequência de processos.

Redis cadeia dinâmica é uma cadeia, semelhante à estrutura interna do ArrayList java. O uso freqüente da distribuição espacial dos ombros e a alocação de memória caminho. capacidade de espaço interno realmente alocada para as cordas atuais quando a corda é menos de 1M, a expansão está dobrando o espaço existente, quando mais de 1M, a expansão 1M única mais espaço para expandir, é necessário notar que a maior série de espaço é 512M.

Pares de valor-chave
>set name QQsir
ok
>get name
"QQsir"
>exists name
(integer) 1
>del name
(integer) 1
>get name
(nil)
pares chave-valor em lote
>mset name1 QQ name2 wx 
>mget name1 name2
1)"QQ"
2)"wx"
extensões de comando de validade e definir
>set name QQsir
>get name
"QQsir"
>expire name 5 #5秒后过期
...wait 5s
>get name
(nil)
contar

Se o valor for um número inteiro, você pode incrementar operador

>set age 30
ok
>incr age
(integer)31
>incrby age 5
(integer)36
>incrby age -5
(integer)31

list (lista)

Redis é equivalente a uma lista de linguagem java dentro LinkedList, nota que é uma lista ligada em vez de uma matriz. Isso significa que a lista de inserção e eliminação é muito rápido, a complexidade de tempo de O (1), mas o índice de posição é muito lenta, a complexidade de tempo de O (n).

Quando a lista de pop-up do último elemento, os dados do resultado é automaticamente eliminado, recuperação da memória.

Redis estrutura lista pode ser utilizada para a fila assíncrona, a tarefa retardada manuseamento estrutura na sequência em cadeias de lista Redis. Outro segmento em rotação a partir da lista para obter dados para o processamento.

À esquerda para a esquerda
> rpush books python java golang
(integer) 3
> llen books
(integer) 3
> lpop books
"python"
> lpop books
"java"
> lpop books
"golang"
> lpop books
(nil)
No lado direito da direita: Pilha
> rpush books python java golang
(integer) 3
> rpop books
"golang"
> rpop books
"java"
> rpop books
"python"
> rpop books
(nil)
Lista rápida
ziplist.png

Se mais aprofundada alguns da lista subjacente é uma lista de lista rápida de estruturas de dados quicklist.
Ao menos elementos de armazenamento quando vai atribuir uma memória contígua, esta estrutura é comprimido lista ziplist, quando muitos elementos, você precisa usar quicklist, porque a lista de média usando muito espaço, aumentando a fragmentação da memória, como uma memória tipo int, você precisa de duas mãos para aumentar o consumo de memória. listas Portanto, use ligados e combinação ziplist de seta dupla vai ziplist ligada, de modo que é para atender as rápidas inserções e deleções, mas não ocupam muito espaço.

de hash (dicionário)

Redis dicionário correspondente para o interior do hashmap Java, que é dicionário desordenada, hashmap mesma estrutura interna, a utilização de uma matriz mais lista ligada, uma matriz de primeira colisão dimensão de hash, uma colisão usará uma lista de elementos ligados em série.


hash.png

A diferença é que o armazenamento Redis só pode ser uma string, um outro rehash seu caminho não é o mesmo, java hashmap é uma repetição de uma só vez, no momento em que uma série de elementos, é muito demorado operação, a fim de não obstruir Redis serviço, melhorar o desempenho , ele usa uma estratégia de repetição progressiva.

Redis quando a estrutura de dois de hash permanecerá repetição de consultas antigos e novos, de duas estruturas na consulta, a um pouco de acompanhamento para migrar o conteúdo do antigo para o novo hash de hash, quando o último elemento da migração é completa, substitua o hash de idade, a memória ele é reciclado.

estruturas de hash pode ser usado para armazenar informações de usuário diferente da cadeia de caracteres a ser serialize completamente descartável todo o objeto, hash do usuário podem ser armazenadas individualmente para cada campo na estrutura. De modo que quando precisamos de obter as informações do usuário pode ser parte da aquisição. A forma de toda a cadeia para armazenar informações de usuário, então só pode ser lido uma vez por todas, este será mais um desperdício de tráfego de rede.

Conjunto (recolha)

Redis é equivalente a um conjunto de hashset linguagem java, pares chave-valor internos não são ordenadas apenas a sua implementação interna é equivalente a um dicionário especial, um dicionário de todo o valor é nulo.

conjunto no conjunto pode ser usado para armazenar o utilizador, garantindo, assim, não ser repetido.

zset (conjunto ordenado)

conjunto ordenado de dados é a estrutura mais distintiva, semelhante ao SortedSet e combinação java hashmap. Na mão um é a única garantia de um conjunto de valor interno, por outro lado, dá uma pontuação para cada valor, o que representa o valor da direita para reordenar. uso interno é chamado de uma estrutura de lista de dados salto.

Após o último elemento zset é removido, excluir automaticamente a estrutura de dados, a memória é recuperada.

Estes são os tipos de estrutura de dados básicos Redis, seguido por redis de compartilhar com vocês o uso avançado.

Acho que você gosta

Origin www.cnblogs.com/lonelyxmas/p/12515044.html
Recomendado
Clasificación