Índice
1. Instalação e inicialização do Redis
4. O uso básico (entendimento) de Jedis é equivalente ao JDBC
5. Spring Data Redis (ênfase *****)
Manipulando dados de tipo de lista
Dados do tipo de coleta de operação (estendido)
Operar dados de tipo de coleta ordenados (estendido)
1. Conceitos básicos:
1. Introdução ao Redis:
Redis é um banco de dados baseado em chave de memória = estrutura de valor
Número da porta: 6379
2. Principais características:
1. Armazenamento de memória, alto desempenho de leitura e gravação - a velocidade de leitura do Redis é de 110.000 vezes/s
2. Armazena tipos ricos de valor (5 tipos de dados), também conhecidos como banco de dados estruturadoNoSQL
3. Adequado para armazenar dados quentes e que não mudam o tempo todo (commodities, informações, notícias)
3. Introdução ao NoSQL
NoSQL (Not Only SQL) não é apenas SQL, geralmente se refere a == banco de dados não relacional ==
Banco de dados relacional (Mysql, Oracle, etc.)
vantagem:
1. Fácil de manter: todos usam estrutura de mesa e formato uniforme
2. Fácil de usar: a linguagem SQL é universal
3. Consulta multitabela: pode ser usada para consultas muito complexas entre uma tabela ou várias tabelas
deficiência:
1. Armazenado no disco rígido, portanto, a capacidade de leitura e gravação é relativamente ruim
2. Estrutura fixa da mesa, pouca flexibilidade
3. Altos requisitos simultâneos de leitura e gravação, E/S de disco rígido é um grande gargalo
Bancos de dados não relacionais (redis, MongoDB, etc.)
vantagem:
1. Formato flexível: o formato dos dados armazenados pode ser chave, valor e outros cenários de aplicação.
2. Velocidade rápida: o nosql pode usar o disco rígido ou a memória como portadora em vez do disco rígido;
3. Baixo custo: a implantação do banco de dados nosql é simples, basicamente gratuita;
deficiência:
1. Ele não fornece suporte SQL e o custo de aprendizado e uso é relativamente alto.
2. Geralmente não há processamento de transações
3. Falta de consulta complexa
1. Instalação e inicialização do Redis
download
Endereço do site oficial de Reids: Redis
Endereço do site chinês: Redis site chinês
Estrutura de Diretórios
diretório ou arquivo | efeito |
---|---|
redis-benchmark | ferramentas de teste de desempenho |
redis-check-aof | Ferramenta de reparo de arquivo AOF |
redis-check-dump | Ferramenta de verificação de arquivo RDB (arquivo persistente de instantâneo) |
redis-cli | cliente de linha de comando |
servidor redis | Inicie o servidor redis |
redis.windows.conf | arquivo de configuração principal do redis |
Inicie o serviço:
Inicie a linha de comando:
3. Comando Redis (ênfase)
Estrutura de dados do Redis
O Redis usa armazenamento de pares chave-valor. O tipo de chave (chave) pode ser apenas uma string e o valor (valor) oferece suporte a cinco tipos de dados:
Cadeia: Cadeia
Hash: HashMap
Lista duplamente ligada: LinkedList
Coleção não ordenada: HashSet
Coleção ordenada: LinkedHashSet
1. String string (ênfase)
O tipo string é o tipo de armazenamento de dados mais básico no Redis
* Adicionado valor da chave definida
* Query get key* Excluir tecla del
* Defina o tempo de expiração ao adicionar (código de verificação) segundo valor da chave setex
* Verifique o tempo restante chave ttl
* Determine se o registro existe de acordo com a chave existe chave 0: não existe 1: existe
2. Hash hash (ênfase)
O tipo Hash é muito semelhante ao Map em java, onde um grupo de pares chave-valor pode ser armazenado no valor
Este tipo é muito adequado para armazenar informações sobre objetos em java
* Adicionar chave hset hkey hvalue
* Consultar todas as chaves hgetall
única chave hget hkey * Excluir
Excluir uma chave de valor único hdel key hkey
excluir redis key del key
* obter todas as hkey hkeys key
* obter todas as hvalue hvals key
* Adicionar o valor da tecla lpush
do botão esquerdo o valor da chave rpush do botão esquerdo * tamanho da lista chave llen * chave lrange do elemento de consulta [índice inicial índice final] 0 -1
* Excluir elemento
tecla
lpop pop-up esquerda tecla rpop
pop-up direita
3. Definir coleção
A camada inferior do tipo Conjunto é uma tabela de hash. Os elementos internos são desordenados e não repetíveis
* Adicionar
valor da chave sadd
* Consultar o número de
chaves scard de coleções
* Consultar
a chave smembers do elemento
* Excluir
valor da chave srem do elemento
4. Coleção ZSet
Zset, também conhecido como sortedSet, adiciona uma função ordenada com base em Set. Ao adicionar elementos, é permitido especificar uma pontuação, e ela será classificada de acordo com essa pontuação.
* Adicionado
valor de pontuação da chave zadd
* Consultar chave zrange
ascendente
[índice inicial e final do índice] [com pontuações] chave zrevrange
descendente
[índice inicial e final do índice] [com pontuações]* excluir
o valor da chave zrem
comando comum
* Chaves de chave de consulta difusa
** delete key
del key....* Determine a
chave do tipo de tipo de valor de acordo com a chave* Selecione banco de dados
selecione 0~15* Limpe o
flushdb do banco de dados atual* Esvaziar todos os bancos de dados
flushall
4. O uso básico (entendimento) de Jedis é equivalente ao JDBC
O Redis existe como um excelente servidor de cache. A maioria das linguagens fornece pacotes de drivers para se conectar ao Redis. Em java, os mais famosos são o Jedis e o Redisson. Hoje vamos pegar o Jedis como exemplo para aprender a usar programas para operar o redis.
API do Jedi
método | explicar |
---|---|
novos Jedis(host, porta) | Crie um objeto jedis, o host do parâmetro é o endereço do servidor redis e a porta do parâmetro é a porta do serviço redis |
set(chave,valor) | Definir dados do tipo string |
obter (chave) | Obter dados do tipo string |
hset(chave, campo, valor) | Defina os dados do tipo de hash |
hget(chave,campo) | Obter dados do tipo hash |
lpush(chave,valores) | Definir dados do tipo de lista |
lpop(tecla) | Abra a pilha no lado esquerdo da lista |
rpop(tecla) | Abra a pilha no lado direito da lista |
del(chave) | excluir a chave especificada |
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
</dependencies>
public static void main(String[] args) {
// 1.创建连接
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 2.新增
jedis.set("1002", "李四");
//3.查询
String value = jedis.get("1002");
System.out.println(value);
// 4.关闭连接
jedis.close();
}
Piscina de conexões Jedis
public static void main(String[] args) {
// 0.创建连接池配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50); // 最大连接数
config.setMaxIdle(20); // 最大空闲数
// 1.创建连接池
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
// 2.获取连接
Jedis jedis = jedisPool.getResource();
// 3.进行 新增、修改、删除、查询
// 4.归还连接
jedis.close();
}
5. Spring Data Redis (ênfase *****)
introduzir:
O Spring Data Redis fornece fácil configuração e acesso ao Redis a partir de aplicativos Spring
Ao RedisTemplate
encapsular altamente os Jedis subjacentes, ele fornece várias operações de redis
-
ValueOperations: string de operação simples de par chave-valor
-
SetOperations: conjunto de operação de dados do tipo definido
-
ZSetOperations: operação de dados do tipo zset sortedset---->zset
-
HashOperations: hash para operações de dados do tipo hash
-
ListOperations: opera lista para dados do tipo lista
Construção do ambiente
1. Dependência
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<dependencies>
<!-- SpringDataRedis框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. Arquivo de configuração
spring:
redis:
host: localhost
port: 6379
database: 0 # 操作的是0号数据库
jedis: #Redis连接池配置
pool:
max-active: 8 #最大连接数
max-wait: 1ms #连接池最大阻塞等待时间
max-idle: 4 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
3. API
@Autowired
private RedisTemplate redisTemplate;//二进制(能取,在可视化工具中看不到数据)
@Autowired
private StringRedisTemplate stringRedisTemplate;//RedisTemplate 的子类
3.1 Valor da operação
// 操作字符串类型
@Test
public void test01() throws Exception {
// 获取string操作对象
ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
// 存值
opsForValue.set("city", "北京");
// 取值
String value = opsForValue.get("city");
System.out.println(value);
// 存验证码存活5分钟
opsForValue.set("sms_13700137000", "6375",TimeUnit.SECONDS);
//删除
redisTemplate.delete("city");
}
Manipular dados do tipo hash
// 操作hash类型
@Test
public void test02() throws Exception {
// 获取hash操作对象
HashOperations<String, Object, Object> opsForHash = stringRedisTemplate.opsForHash();
// 存值
//opsForHash.put("1005", "nage", "zhangsan");
//opsForHash.put("1005", "age", "18");
//opsForHash.put("1005", "sex", "man");
// 取出年龄
String age = (String) opsForHash.get("1005", "age");
System.out.println(age);
System.out.println("---------------");
// 取出所有key
Set<Object> keys = opsForHash.keys("1005");
for (Object key : keys) {
System.out.println(key);
if("sex".equals(key)){
ops.delete("1005",key); //删除map中的key
}
}
System.out.println("---------------");
// 取出所有value
List<Object> values = opsForHash.values("1005");
for (Object value : values) {
System.out.println(value);
}
// 删除
stringRedisTemplate.delete("1005");
}
Manipulando dados de tipo de lista
// 操作list类型
@Test
public void test03() throws Exception {
// 获取list操作对象
ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();
// 存值
//opsForList.leftPush("alist", "a");
//opsForList.leftPush("alist", "b");
opsForList.leftPushAll("alist", "a", "b");
opsForList.rightPush("alist", "c");
// 取值
List<String> list = opsForList.range("alist", 0, -1);
for (String s : list) {
System.out.println(s);
}
System.out.println("--------------");
// 获取list长度
Long size = opsForList.size("alist");
System.out.println(size);
System.out.println("--------------");
// 遍历删除
for (Long i = 0l; i < size; i++) {
// 弹出
System.out.println(opsForList.rightPop("alist"));
}
}
Dados do tipo de coleta de operação (estendido)
// 操作set类型
@Test
public void test04() throws Exception {
// 获取set操作对象
SetOperations<String, String> opsForSet = stringRedisTemplate.opsForSet();
// 存值
// opsForSet.add("lol", "a", "b", "c", "a");
// 获取
Set<String> lol = opsForSet.members("lol");
for (String s : lol) {
System.out.println(s);
}
// 删除
opsForSet.remove("lol", "a");
}
Operar dados de tipo de coleta ordenados (estendido)
// 操作zset类型
@Test
public void test05() throws Exception {
// 获取 zset操作对象
ZSetOperations<String, String> opsForZSet = stringRedisTemplate.opsForZSet();
// 存值
// opsForZSet.add("wangzhe", "安其拉", 66.6);
// opsForZSet.add("wangzhe", "兰陵王", 68.6);
// opsForZSet.add("wangzhe", "后羿", 79.6);
// 修改
// opsForZSet.add("wangzhe", "安其拉", 85.6);
// 删除
opsForZSet.remove("wangzhe", "兰陵王");
// 取值
Set<String> wangzhe = opsForZSet.reverseRange("wangzhe", 0, -1);
for (String s : wangzhe) {
System.out.println(s);
}
}
Operação geral (deve dominar)
// 通用操作
@Test
public void test06()throws Exception{
// 查询所有key
Set<String> keys = stringRedisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
// 判断某个key是否存在
Boolean itheima = stringRedisTemplate.hasKey("1005");
System.out.println(itheima);
// 判断某个key的类型
DataType type = stringRedisTemplate.type("1005");
System.out.println(type.name());
}