Introdução ao Redis
1. Conceito NOSQL
redis é um banco de dados não relacional da série NOSQL de alto desempenho
-
O que é NOSQL
NoSQL (NoSQL = Not Only SQL), que significa “não apenas SQL”, é um novo conceito de banco de dados e geralmente se refere a bancos de dados não relacionais.
A palavra NoSQL também tem uma explicação prática como "sem SQL". Por ser um banco de dados não relacional, ele não oferece suporte a padrões de consulta SQL unificados (linguagem de consulta estruturada) e não usa SQL para processamento de dados. mas tem sua própria API de processamento independente
-
O pano de fundo do desenvolvimento do NOSQL
Com o aumento gradual dos sites web 2.0 da Internet, os bancos de dados relacionais tradicionais tornaram-se incapazes de lidar com os sites web 2.0, expondo muitos problemas. No entanto, os bancos de dados não relacionais são muito rápidos devido à sua própria velocidade. Os recursos floresceram.
O surgimento dos bancos de dados NoSQL visa resolver os desafios trazidos pela coleta de dados em grande escala e vários tipos de dados, especialmente os problemas na direção da aplicação de big data.
-
Comparando bancos de dados NOSQL e relacionais
-
vantagem:
- Custo: O banco de dados NoSQL é simples e fácil de implantar. É basicamente um software de código aberto. Não requer um grande custo para aquisição e uso como o Oracle. Em comparação, o banco de dados relacional é mais barato.
- Velocidade de consulta: o banco de dados NoSQL armazena dados no cache, enquanto os bancos de dados relacionais armazenam dados no disco rígido. Naturalmente, a velocidade de consulta é muito mais lenta que a do banco de dados NoSQL.
- Formato de dados de armazenamento: O formato de armazenamento do NoSQL é forma de chave e valor, forma de documento, forma de imagem, etc., para que possa armazenar tipos básicos, objetos ou coleções e outros formatos, enquanto o banco de dados suporta apenas tipos básicos.
- Escalabilidade: Os bancos de dados relacionais têm limitações em mecanismos de consulta multitabelas, como join, o que dificulta a expansão.
-
deficiência:
- As ferramentas e materiais para manutenção são limitados porque o NoSQL é uma tecnologia mais recente e não pode ser comparada com o banco de dados relacional, que é uma tecnologia que existe há mais de dez anos.
- Ele não fornece suporte para sql. Se uma linguagem de estrutura de consulta como sql não for suportada, certos custos de aprendizado e uso serão incorridos.
- Não fornece processamento de transações semelhante a um banco de dados relacional.
-
-
Vantagens de bancos de dados não relacionais:
- Desempenho NOSQL é baseado em pares chave-valor, que podem ser imaginados como uma estrutura de mapa simples, e não precisa ser analisado pela linguagem SQL, portanto o desempenho é muito alto .
- A escalabilidade também ocorre porque é baseada em pares de valores-chave e não há acoplamento entre os dados, por isso é fácil de expandir horizontalmente .
-
Vantagens do banco de dados relacional:
- Consultas complexas podem usar instruções SQL para executar facilmente consultas de dados muito complexas entre uma tabela e várias tabelas.
- O suporte a transações permite que os requisitos de acesso a dados com alto desempenho de segurança sejam atendidos.
-
Resumir
- Os bancos de dados relacionais e os bancos de dados NoSQL não são antagônicos, mas complementares, ou seja, os bancos de dados relacionais são geralmente usados, e os bancos de dados NoSQL são usados quando o NoSQL é adequado, para que os bancos de dados NoSQL possam compensar as deficiências dos bancos de dados relacionais.
- Geralmente, armazenamos dados em um banco de dados relacional e fazemos backup e armazenamos parte dos dados no banco de dados relacional no banco de dados nosql.
-
Os principais produtos NOSQL são os seguintes:
- Banco de dados de armazenamento de valor-chave
Produtos relacionados: Tokyo Cabinet/Tyrant,Redis, Voldemort, Berkeley DB
aplicações típicas: Cache de conteúdo, usado principalmente para lidar com altas cargas de acesso de grandes quantidades de dados.
Modelo de dados: pares de valores-chave
Vantagens: Consulta rápida
Desvantagens: Os dados armazenados carecem de estrutura - Banco de dados de armazenamento de coluna
Produtos relacionados: Cassandra, HBase, Riak
Aplicação típica: sistema de arquivos distribuído
Modelo de dados: Armazenamento em cluster de coluna, armazenando os mesmos dados de coluna juntos
Vantagens: velocidade de pesquisa rápida, forte escalabilidade, mais fácil de distribuir
Desvantagens da extensão: As funções são relativamente limitadas - Banco de dados de documentos
Produtos relacionados: CouchDB, MongoDB
Aplicativos típicos: aplicativos da Web (semelhantes ao valor-chave, o valor é estruturado)
Modelo de dados: uma série de pares chave -valor
Vantagens: Os requisitos da estrutura de dados não são estritos
Desvantagens: O desempenho da consulta não é alto e Falta de sintaxe de consulta unificada - Banco de dados de gráficos
Bancos de dados relacionados: Neo4J, InfoGrid, Infinite Graph
Aplicações típicas: Redes sociais
Modelo de dados: Estrutura de gráfico
Vantagens: Utilizar algoritmos relacionados à estrutura de gráfico.
Desvantagens: O gráfico inteiro precisa ser calculado para obter o resultado e não é fácil implementar uma solução de cluster distribuída.
- Banco de dados de armazenamento de valor-chave
2.O que é Redis
Redis é um banco de dados de valor-chave de código aberto e de alto desempenho desenvolvido em linguagem C. De acordo com dados de teste oficiais, 50 execuções simultâneas de 100.000 solicitações resultaram em uma velocidade de leitura de 110.000 vezes/s, enquanto a velocidade de gravação foi de 110.000 vezes/s A velocidade é de 81.000 vezes/s, e o Redis fornece uma variedade de tipos de dados de valor-chave para se adaptar às necessidades de armazenamento em diferentes cenários. Os tipos de dados de valor-chave suportados pelo Redis até agora são os seguintes :
- String tipo string
- Hash tipo hash
- Lista de tipos de lista
- Conjunto de tipo de coleção
- Tipo de conjunto classificado sortedset
Cenários de aplicação de redis
- Cache (consulta de dados, conexão curta, conteúdo de notícias, conteúdo de produtos, etc.)
- Lista de amigos online da sala de chat
- Fila de tarefas. (Venda relâmpago, venda urgente, 12306, etc.)
- Classificações de aplicativos
- Estatísticas de visitas ao site
- Processamento de expiração de dados (com precisão de milissegundos)
- Separação de sessões em arquitetura de cluster distribuída
Adicione dois links:
Site oficial do Redis
Site chinês do Redis
3. Baixe e instale o Redis no Windows
Em primeiro lugar, no tutorial de instalação do site chinês redis, são fornecidos três métodos de instalação, a saber
- Instalação no Windows
- Instalação no Linux
- Instalação no Ubuntu
No entanto, as versões aqui são relativamente baixas e não é recomendado baixá-las
. A versão mais alta aqui é apenas 2,4x.
Aqui está um endereço recomendado, a versão é relativamente nova:
https://github.com/microsoftarchive/redis /releases
A página é a seguinte:
Encontre o que deseja Para a versão baixada, clique em para baixar diretamente. O arquivo é muito pequeno, pois estamos usando no Windows, então baixamos o zip diretamente. A versão verde pode ser diretamente descompactado e usado. Após a descompactação, o arquivo do diretório é o seguinte: Você pode excluir todas as
coisas
inúteis ., o diretório após a classificação é:
Entre eles, usaremos principalmente os três arquivos a seguir:
redis.windows.conf: arquivo de configuração
redis- cli.exe: cliente redis
redis-server.exe: servidor redis
4.Tipos de dados Redis e operações simples
Clique duas vezes em redis-server.exe (servidor redis) e a seguinte interface aparecerá: O número da porta é 6379.
Não feche esta interface. Fechar esta interface equivale a fechar o servidor redis.
Em seguida, clique duas vezes para abrir **redis-cli.exe (cliente)** e você pode começar a operar o redis no console do cliente.
Os cinco tipos de estrutura de dados do redis foram mencionados acima:
- O Redis armazena dados em formatos de chave e valor, onde as chaves são todas strings e o valor possui 5 estruturas de dados diferentes.
- estrutura de dados de valor:
- String tipo string
- Hash tipo hash: formato do mapa
- Lista de tipo de lista: formato de lista vinculada. Suporta elementos repetidos
- Conjunto de tipo de coleção: elementos duplicados não são permitidos
- Tipo de conjunto classificado sortedset: nenhum elemento duplicado é permitido e os elementos estão em ordem
- estrutura de dados de valor:
Cada um deles tem comandos independentes correspondentes para operar. Existem tutoriais relacionados em nosso site redis chinês: Os
exemplos são os seguintes:
O site chinês terá um resumo de comando mais completo e comandos de exemplo de clique, porque o conteúdo do comando correspondente aqui é relativamente pequeno. Muitos, aqui daremos um exemplo de uso simples e um resumo de alguns conteúdos simples que devem ser dominados. Você pode aprender e dominar os outros comandos específicos quando tiver tempo:
- String tipo string
① Armazenamento: definir valor da chave
② Obter: obter chave
③ Excluir: chave del
Quando você digita palavras-chave de comando redis como set, ele terá um prompt de acompanhamento.
Operação simples:
- Tipo de hash hash: formato do mapa
① Armazenamento: valor do campo-chave hset
② Obter: campo-chave hget
③ Excluir: valor do campo-chave hset
Aqui, a exclusão de todo o valor do hash requer o uso de um comando geral. Isso será dito no final .
Operação simples:
- Lista de tipo de lista: formato de lista vinculada. Suporta elementos repetidos.
Você pode adicionar um elemento ao início (esquerda) ou ao final (direita) da lista
① Adicionar:
valor da chave lpush: adicionar o elemento à tabela esquerda da lista
valor da chave rpush: adicionar o elemento à direita lado da lista
② Get: lrange key start end
③ Delete:
lpop key: Exclui o elemento mais à esquerda da lista e retorna o elemento
rpop key: Exclui o elemento mais à direita da lista e retorna o elemento
Operação simples:
4. Tipo de conjunto conjunto: Elementos duplicados não são permitidos
① Adicionar: valor da chave sadd
② Obter: chave smembers Obter todos os elementos na coleção do conjunto
③ Excluir: valor da chave srem Excluir um elemento na coleção do conjunto
Uma operação simples:
5. Conjunto classificado tipo sortedset: Elementos duplicados não são permitidos e os elementos estão em ordem.
Cada elemento está associado a uma pontuação de tipo duplo. O Redis usa pontuações para classificar os membros da coleção, do menor ao maior.
① Adicionar: valor de pontuação da chave zadd
② Obter: início da chave zrange fim Adicione o parâmetro [withscores] para imprimir as pontuações correspondentes juntas
③ Excluir: valor da chave zrem
Uma operação simples:
comandos comuns:
- chaves *: Consulta todas as chaves
- type key: Obtenha o tipo de valor correspondente à chave
- del key: exclui o valor da chave especificada
Basta fazer isso:
5. Persistência Redis
Redis é um banco de dados na memória. Quando o servidor Redis é reiniciado ou o computador é reiniciado, os dados serão perdidos. Podemos persistir os dados na memória Redis em um arquivo no disco rígido.
O Redis nos forneceu dois mecanismos de persistência:
-
RDB: Modo padrão, nenhuma configuração é necessária. Este mecanismo é usado por padrão,
também chamado de modo instantâneo. Ele será persistido após um determinado período de tempo. Esta condição de gatilho de persistência é definida por nós mesmos no arquivo de configuração. Uma vez que a granularidade de esse método de persistência pode ser relativamente grande e pode ocorrer perda de dados.* 在一定的间隔时间中,检测key的变化情况,然后持久化数据 1. 编辑redis.windwos.conf文件 # after 900 sec (15 min) if at least 1 key changed save 900 1 # after 300 sec (5 min) if at least 10 keys changed save 300 10 # after 60 sec if at least 10000 keys changed save 60 10000 2. 重新启动redis服务器,并指定配置文件名称 D:\...\redis\windows-64\redis>redis-server.exe redis.windows.conf
Abrimos e editamos o arquivo de configuração:
encontre SNAPSHOTTING, que significa instantâneo.
Adicionamos a frase save 10 1, que significa que
a persistência será acionada quando pelo menos um valor de chave for modificado em dez segundos. Observe que a consulta aqui não acionará a persistência .orientado, vamos iniciar o serviço. Entre
na pasta onde seu redis-server está localizado, shift + botão direito do mouse, clique para abrir a janela de comando aqui , usamos o método de inicialização com o arquivo de configuração: redis-server.exe redis. windows.conf
O autor relatou um erro ao iniciar aqui: Criando o soquete de escuta TCP do servidor 127.0.0.1:6379: bind: Nenhum erro
De acordo com a consulta, pode ser o motivo pelo qual o cliente não saiu com sucesso. A solução é a seguinte :
Resolvendo a criação do soquete de escuta TCP do servidor 127.0.0.1:6379: bind: Nenhum erro
iniciado posteriormente com êxito:
Após uma onda de operações, um arquivo .rdb aparecerá.
Depois de reiniciar o serviço, os valores-chave armazenados anteriormente sempre existirão nos dados da sua memória até que você os exclua. O que precisa ser observado aqui é a frequência dos instantâneos, essas são suas condições desencadeantes.
O segundo método de persistência:
- AOF: Método de registro, que pode registrar a operação de cada comando. Os dados podem ser persistidos após cada operação de comando
- Edite o arquivo redis.windwos.conf
appendonly no (desative aof) -->appendonly yes (ative aof)
#appendfsync sempre: a persistência é executada para cada operação
appendfsync everysec: a persistência é executada a cada segundo
#appendfsync no: não executada Persistência
Aqui encontramos o modo adicional APPEND ONLY MODE,
selecione para ativar aof
appendonly yes (ativar aof),
role um pouco para baixo e encontre a configuração de granularidade de persistência correspondente a aof. Podemos descobrir que a granularidade de persistência de aof é muito pequena, muito bom, mas também muito O consumo de recursos depende dos dados do negócio.
Aqui ainda iniciamos o redis com os parâmetros do arquivo de configuração, e fazemos quaisquer configurações de valor-chave, adicionamos e modificamos.
Após iniciar, é gerado diretamente o arquivo .aof, que é o arquivo que armazena os registros do comando. O tamanho é pequeno porque temos sem operações. é 0, podemos fazer algumas operações: podemos
descobrir que seu tamanho mudou. Fechamos o servidor e o abrimos novamente para ver se o valor da chave ainda está lá
.
6. Operação Jedis do cliente Java Redis
Jedis: Uma ferramenta Java para operar o banco de dados redis. Você pode usá-la após baixar o pacote jar do jedis.
Exemplo simples:
public class JedisTest {
@Test
public void test() {
// 获取连接
Jedis jedis = new Jedis("localhost", 6379);
// 操作
/**
* String类型操作
* 添加,修改:set
* 获取(单个):get
* 删除:del
*/
jedis.set("name", "zhangsan");
String name = jedis.get("name");
jedis.del("name");
// 设置带失效时间的key-value
jedis.setex("code", 20, "cfl777");
/**
* hash类型操作
* 添加,删除:hset
* 获取(单个):hget
* 删除:hdel
* 获取(全部):hgetall
*/
jedis.hset("person", "name", "cfl");
jedis.hset("person", "age", "23");
String hget = jedis.hget("person", "name");
Map<String, String> person = jedis.hgetAll("person");
jedis.hdel("person", "name");
/**
* list类型操作
* 添加:lpush,rpush
* 获取(范围):lrange start end
* 删除:rpop,lpop
*/
jedis.lpush("list", "aaa");
jedis.lpush("list", "bbb");
jedis.rpush("list", "ccc");
List<String> list = jedis.lrange("list", 0, -1);
String lpop = jedis.lpop("list");
String rpop = jedis.rpop("list");
/**
* set类型操作 不允许重复元素
* 添加:sadd
* 获取(全部):smembers
* 删除:srem
*/
jedis.sadd("myset", "aaa", "bbb");
Set<String> myset = jedis.smembers("myset");
jedis.srem("myset", "aaa");
/**
* sortedSet 带排序(得分)的set → ztree → z
* 添加:zadd
* 获取(范围):zrange
* 删除:zrem
* 可选项:withscores,表示元素值得同时表示出其得分(排序)
*/
jedis.zadd("zset", 3, "aaa");
jedis.zadd("zset", 1, "bbb");
jedis.zadd("zset", 2, "ccc");
Set<String> zset = jedis.zrange("zset", 0, -1);
Set<Tuple> zset1 = jedis.zrangeWithScores("zset", 0, -1);
jedis.zrem("zset", "bbb");
/**
* 通用方法
*/
// 通过正则获取匹配到的key
Set<String> keys = jedis.keys("*");
// 直接删除对应key的元素
jedis.del("key");
// 获取此key对应的元素值类型
String type = jedis.type("key");
// 关闭连接
jedis.close();
}
}
E o pool de conexões fornecido pelo próprio Jedis:
public class JedisPoolTest {
public static void main(String[] args) {
// 创建连接池配置文件
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(50);
// ...
// 创建连接池
JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379);
// 获取连接
Jedis jedis = jedisPool.getResource();
// 使用...
// 关闭连接,归还至连接池
jedis.close();
}
}
7.Alface cliente avançado Redis
Gostaria de mencionar o Lettuce aqui. Embora, como os Jedis, sejam encapsulamentos Java de comandos de operação redis, o Lettuce foi reconhecido pelo ecossistema Spring e foi integrado ao driver spring-data-redis. Ele deve ter suas próprias vantagens. O autor tem apenas um breve entendimento aqui, então aqui está um link que li antes e achei muito bom, para que possamos aprender e encorajar uns aos outros: Explicação detalhada do
cliente avançado Redis Lettuce