1. Quais tipos de dados o Redis suporta?
Cadeia _
Hash _
Lista (lista)
Definir _
zset (conjunto classificado: coleção ordenada)
1. Corda (corda)
Formatar: set key value
O tipo string é binário seguro, o que significa redis
A string pode conter qualquer dado, como jpg
fatia ou objeto serializado
O tipo string é o tipo de dados mais básico do Redis,
Uma chave pode armazenar até 512 MB
2. Hash
Formatar: hmset name key1 value1 key2 value2
Hash Redis é um conjunto de pares chave-valor (chave => valor)
combinar
Hash Redis é um campo do tipo string e
Tabela de mapeamento de valor, hash é especialmente adequado para armazenamento
objeto
3. Lista (lista)
As listas Redis são simplesmente listas de strings,
Para classificar, você pode adicionar um elemento à lista
cabeça (esquerda) ou cauda (direita)
Formatar: lpush name value
Adicione um elemento string no topo da lista correspondente à chave
Formatar: rpush name value
Adicione um elemento string no final da lista correspondente à chave
Formatar: lrem name index
chave corresponde à contagem e valor de exclusão na lista
mesmo elemento
Formatar: llen name
Retorna o comprimento da lista correspondente à chave
4. Conjunto (coleção)
Formatar: sadd name value
O conjunto do Redis é uma coleção não ordenada de tipos de string
Os conjuntos são implementados com tabelas hash , portanto, adicionando,
A complexidade de exclusão e pesquisa é O(1)
5. ZSet (conjunto classificado: coleção ordenada)
Formatar: zadd name score value
Redis zset também é um tipo de string como set
Uma coleção de elementos que não permitem membros duplicados
A diferença é que cada elemento estará associado a um duplo
O tipo de pontuação, redis, é definido para o conjunto por meio da pontuação
Os membros da combinação são classificados de pequenos a grandes
Os membros do zset são únicos, mas a pontuação (pontuação) pode ser
repetir
2. O que é persistência do Redis ? Que tipos de métodos de persistência o Redis possui? Quais são os prós e contras?
Persistência é gravar os dados da memória no disco.
Evite o tempo de inatividade do serviço devido à perda de dados de memória
Redis fornece dois métodos de persistência:
RDB (padrão)
AOF
1. RDB:
rdb é a abreviatura de Redis DataBase
Função principal da função rdbSave (gerar arquivo RDB)
e rdbLoad (carregar memória do arquivo) duas funções
2. AOF:
Aof é a abreviatura de arquivo somente anexado
Sempre que uma tarefa ou função do servidor (agendada) é executada
A função flushAppendOnlyFile será chamada,
Esta função executa as duas tarefas a seguir
aof escrever salvar:
WRITE : De acordo com as condições, o cache em aof_buf
Gravar no arquivo AOF
SAVE : Dependendo da condição, chame fsync ou fdatasync
Função para salvar arquivo AOF no disco
Estrutura de armazenamento:
O conteúdo é um comando no formato redis Communication Protocol (RESP)
armazenamento de texto
Comparar:
① A frequência de atualização do arquivo aof é maior que a do rdb, portanto deve ser usado primeiro
aof restaurar dados
② aof é mais seguro e maior que rdb
③ o desempenho do rdb é melhor que o aof
④ Se ambos estiverem equipados com carregamento prioritário AOF
RESP é usado pelo cliente e servidor redis antes
um protocolo de comunicação ;
Recursos do RESP: implementação simples, análise rápida, boa legibilidade
Para Strings Simples o primeiro byte da resposta é "+" 回复
Para Erros o primeiro byte da resposta é "-" 错误
Para Inteiros o primeiro byte da resposta é ":" 整数
Para Strings em Massa o primeiro byte da resposta é "$" 字符串
Para Arrays o primeiro byte da resposta é "*" 数组
3. Quais padrões de arquitetura o Redis possui? fale sobre suas características
② Modo mestre-escravo
③ Modo Sentinela
④ modo cluster
1. Modo autônomo
Características:
Simples
pergunta:
① Capacidade de memória limitada
② capacidade de processamento limitada
③ Não pode estar altamente disponível
2. Modo mestre-escravo
A função de replicação do Redis permite ao usuário root
De acordo com um servidor Redis para criar qualquer número do servidor
réplica do servidor, onde o servidor replicado é o mestre
Servidor (mestre) e criado por replicação
A réplica do servidor é o servidor escravo (escravo)
Contanto que a conexão de rede entre os servidores mestre e escravo seja normal, o mestre
Ambos os servidores escravos terão os mesmos dados, o servidor mestre
O dispositivo sempre atualizará os dados que aconteceram com ele mesmo
Sincronize com o servidor escravo, para que o serviço mestre-escravo seja sempre garantido
Os dados do dispositivo são os mesmos
Características:
① função mestre/escravo
② Os dados mestre/escravo são iguais
③ Reduza a pressão de leitura mestre e transfira-a para a biblioteca escrava
pergunta:
① A alta disponibilidade não pode ser garantida
② Não resolveu a pressão da escrita mestre
3. Modo Sentinela
Redis sentinela é um monitoramento de sistema distribuído
Servidor mestre-escravo Redis e quando o servidor mestre fica offline
Failover automático
Três dessas propriedades:
Monitoramento : o Sentinel verificará constantemente
Verifique se seu mestre e escravo estão funcionando
muitas vezes
Notificação : Quando um monitorado
Quando há um problema com o servidor Redis, o Sentinel
Pode ser enviado ao administrador ou outros aplicativos através da API
Programa envia notificação
Failover automático :
Quando um servidor primário não funciona corretamente,
O Sentinel iniciará uma operação de failover automático
Características:
① Garanta alta disponibilidade
② Monitore cada nó
③ Migração automática de falhas
deficiência:
① Modo mestre-escravo, a troca leva tempo para perder dados
② Não resolveu a pressão da escrita mestre
4. Modo cluster
(1) Cluster (tipo de proxy)
Twemproxy é um redis de código aberto do Twitter
e servidor proxy memcache rápido/leve;
Twemproxy é um proxy rápido e de thread único que
Suporta protocolo Memcached ASCII e protocolo redis
Características:
① Vários algoritmos de hash: MD5, CRC16, CRC32,
CRC32a、hsieh、murmúrio、Jenkins
② Suporte à exclusão automática de nós com falha
③ A lógica de fragmentação de back-end é transparente para negócios, negócios
O método de leitura e escrita da parte é consistente com a operação de um único Redis
deficiência:
① Um novo proxy foi adicionado e sua alta disponibilidade precisa ser mantida
② A lógica de failover precisa ser implementada por si só, o que não pode ser suportado por si só
A escalabilidade da transferência automática da falha de suporte é fraca, e a expansão e contração são realizadas
ambos requerem intervenção manual
(2) Cluster (tipo de conexão direta):
Clusters de cluster Redis são suportados em versões posteriores ao redis 3.0,
Redis-Cluster adota uma estrutura sem centro e cada nó mantém
Armazene dados e todo o estado do cluster, cada nó e outros
Todos os nós estão conectados
Características:
① Arquitetura descentralizada (não há nó que afete gargalos de desempenho),
Menos camada de proxy
② Os dados são distribuídos entre vários nós de acordo com o armazenamento de slot e entre nós
Compartilhamento de dados, que pode ajustar dinamicamente a distribuição de dados
③ Escalabilidade, pode ser expandida linearmente para 1000 nós,
Os pontos podem ser adicionados ou removidos dinamicamente.
④ Alta disponibilidade, quando alguns nós não estão disponíveis, o cluster ainda está disponível
Adicionando Slave como uma cópia de backup de dados para obter falha automática
Failover dinâmico, troca entre nós por meio de protocolo de fofoca
Informações de status, use o mecanismo de votação para completar Slave to Master
O papel de
deficiência:
Fraco isolamento de recursos, propenso à influência mútua
Os dados são replicados de forma assíncrona, o que não garante a forte consistência dos dados
4. Você já usou bloqueios distribuídos Redis e como isso é implementado?
Primeiro use setnx para competir pelo bloqueio e depois use expire
Adicione um tempo de expiração ao bloqueio para evitar que ele se esqueça de liberar
1. Se o processo for inesperado antes da execução expirar após setnx
Travar ou reiniciar a manutenção, o que acontecerá?
O comando set possui parâmetros muito complexos, isso deve ser possível
Ao mesmo tempo, setnx e expire são combinados em uma instrução de uso!
5. Você já usou o Redis como uma fila assíncrona? Como você o usou? Quais são as desvantagens?
Geralmente use a estrutura da lista como uma fila, rpush produz mensagens,
mensagem de consumo lpop
Quando não há notícias do lpop, é preciso dormir um pouco
tente novamente
No caso dos consumidores ficarem offline, as mensagens produzidas serão perdidas,
Você deve usar uma fila de mensagens profissional, como RabbitMQ, etc.
Pode ser produzido uma vez e consumido várias vezes?
Usando o padrão de assinante de tópico pub/sub, você pode conseguir
Fila de mensagens 1:N
6. O que é penetração de cache? Como evitá-lo? O que é avalanche de cache? Como evitá-lo?
1. Penetração de cache
O sistema de cache geral consiste em armazenar em cache e consultar de acordo com a chave.
Consulta, caso não haja valor correspondente, deverá ir para
Pesquisa de sistema de back-end (como banco de dados)
Algumas solicitações maliciosas consultarão intencionalmente chaves que não existem,
Uma grande quantidade de solicitações causará um grande impacto no sistema back-end
Pressão, isso é chamado de penetração de cache
Como evitá-lo?
① Armazene em cache mesmo quando o resultado da consulta estiver vazio
Defina o tempo de armazenamento para ser menor ou a chave correspondente a
Limpe o cache após a inserção dos dados
② Para filtrar as chaves que não devem existir, você pode colocar
Todas as chaves possíveis são colocadas em um grande
Em Bitmap , filtre esse bitmap ao consultar
2. Avalanche de cache
Quando o servidor de cache é reiniciado ou um grande número de caches está concentrado em um determinado
Um período de tempo expira , de modo que, quando expirar, será
Coloque muita pressão no sistema back-end, fazendo com que o sistema trave
Como evitá-lo?
① Depois que o cache for invalidado, controle o cache bloqueando ou enfileirando
Limite o número de threads para leitura e gravação no cache do banco de dados
Por exemplo, apenas um thread pode consultar uma determinada chave
Cache de dados e gravação, outros threads aguardam
② Faça o cache secundário , A1 é o cache original, A2 é a cópia
Bay cache, quando A1 falha, você pode acessar A2, A1
O tempo de expiração do cache está definido como curto e A2 está definido como longo
Esperar
③ Para chaves diferentes, defina tempos de expiração diferentes , para que
O momento da invalidação do cache deve ser o mais uniforme possível
Sete, comandos comuns do Redis
1. Comandos de gerenciamento
# dbsize 返回当前数据库 key 的数量。
# info 返回当前 redis 服务器状态和一些统计信息。
# monitor 实时监听并返回redis服务器接收到的所有请求信息。
# shutdown 把数据同步保存到磁盘上,并关闭redis服务。
# config get parameter 获取一个 redis 配置参数信息。(个别参数可能无法获取)
# config set parameter value 设置一个 redis 配置参数信息。(个别参数可能无法获取)
# config resetstat 重置 info 命令的统计信息。(重置包括:keyspace 命中数、
# keyspace 错误数、 处理命令数,接收连接数、过期 key 数)
# debug object key 获取一个 key 的调试信息。
# debug segfault 制造一次服务器当机。
# flushdb 删除当前数据库中所有 key,此方法不会失败。小心慎用
# flushall 删除全部数据库中所有 key,此方法不会失败。小心慎用
2. Comandos de ferramentas
#redis-server:Redis 服务器的 daemon 启动程序
#redis-cli:Redis 命令行操作工具。当然,你也可以用 telnet 根据其纯文本协议来操作
#redis-benchmark:Redis 性能测试工具,测试 Redis 在你的系统及你的配置下的读写性能
$redis-benchmark -n 100000 –c 50
#模拟同时由 50 个客户端发送 100000 个 SETs/GETs 查询
#redis-check-aof:更新日志检查
#redis-check-dump:本地数据库检查