Comenzando con Redis, esto es suficiente

1. ¿Qué es Redis?

redis es una serie NOSQL de alto rendimiento de bases de datos no relacionales

imagen

1.1 ¿Qué es NOSQL?

NoSQL (NoSQL = Not Only SQL), que significa "más que solo SQL", es un nuevo concepto de base de datos que generalmente se refiere a bases de datos no relacionales.

Con el auge de los sitios web web 2.0 de Internet, las bases de datos relacionales tradicionales se han vuelto incapaces de hacer frente a los sitios web web 2.0, especialmente los sitios web dinámicos puros web 2.0 tipo SNS de gran escala y alta concurrencia, lo que expone muchos problemas insuperables. base de datos se ha desarrollado muy rápidamente debido a sus propias características. La base de datos NoSQL se creó para resolver los desafíos que plantean las recopilaciones de datos a gran escala y los múltiples tipos de datos, especialmente la aplicación de big data.

1.1.1 Comparación de NOSQL y bases de datos relacionales

ventaja:

1. Costo: La base de datos nosql es simple y fácil de implementar. Es básicamente un software de código abierto. No es necesario gastar mucho dinero para comprarla y usarla como si fuera Oracle. Es más económica que las bases de datos relacionales.

2. Velocidad de consulta: la base de datos nosql almacena datos en caché, la base de datos relacional almacena datos en el disco duro y la velocidad de consulta natural es mucho menor que la de la base de datos nosql.

3. Formato de los datos almacenados: el formato de almacenamiento de Nosql es clave, valor, documento, imagen, etc., por lo que puede almacenar varios formatos, como tipos y objetos básicos o colecciones, mientras que la base de datos solo admite tipos básicos.

4. Escalabilidad: las bases de datos relacionales tienen la limitación de los mecanismos de consulta de tablas múltiples como la combinación, lo que dificulta su expansión.

defecto:

1. Las herramientas y materiales para el mantenimiento son limitados, porque nosql es una tecnología nueva y no se puede comparar con la tecnología de bases de datos relacionales por más de 10 años.

2. No proporciona soporte para SQL Si no es compatible con los estándares de la industria como SQL, resultará en un cierto costo para que los usuarios aprendan y usen.

3. No proporciona procesamiento de transacciones de bases de datos relacionales.

1.1.2 Ventajas de las bases de datos no relacionales

  1. Rendimiento NOSQL se basa en pares clave-valor, que se pueden imaginar como la correspondencia entre la clave principal y el valor en la tabla, y no necesita ser analizado por la capa SQL, por lo que el rendimiento es muy alto.

  2. La escalabilidad también se debe a que no hay acoplamiento entre los datos basados ​​en pares clave-valor, por lo que es muy fácil de escalar horizontalmente.

1.1.3 Ventajas de las bases de datos relacionales

1. Consultas complejas Puede utilizar instrucciones SQL para realizar fácilmente consultas de datos muy complejas entre una tabla y varias tablas.

2. El soporte de transacciones permite la realización de los requisitos de acceso a los datos con un alto rendimiento de seguridad. Para estos dos tipos de bases de datos, las fortalezas de cada uno son sus debilidades y viceversa.

1.1.4 Resumen

Las bases de datos relacionales y las bases de datos NoSQL no son opuestas sino complementarias, es decir, las bases de datos relacionales se utilizan normalmente y las bases de datos NoSQL se utilizan cuando NoSQL es adecuado, de modo que las bases de datos NoSQL pueden compensar las deficiencias de las bases de datos relacionales. Generalmente, los datos se almacenan en la base de datos relacional, y los datos de la base de datos relacional se respaldan en la base de datos nosql.

1.2 Productos NOSQL convencionales

Base de datos de almacenamiento de valores clave Productos relacionados: Tokyo Cabinet/Tyrant, Redis, Voldemort, Berkeley DB Aplicaciones típicas: almacenamiento en caché de contenido, utilizado principalmente para manejar cargas de alto acceso de grandes cantidades de datos. Modelo de datos: una serie de pares clave-valor Ventajas: consultas rápidas Desventajas: los datos almacenados están menos estructurados

Productos relacionados con la base de datos de almacenamiento en columnas : Cassandra, HBase, Riak Aplicación típica: sistema de archivos distribuidos Modelo de datos: almacenado en un clúster de columnas, que coexiste en la misma columna de datos Ventajas: velocidad de búsqueda rápida, gran escalabilidad y distribución más sencilla Desventajas de la expansión: relativamente funciones limitadas

Productos relacionados con la base de datos de documentos : CouchDB, MongoDB Aplicación típica: aplicación web (similar a Key-Value, el valor está estructurado) Modelo de datos: una serie de pares clave-valor Ventajas: los requisitos de la estructura de datos no son estrictos Desventajas: el rendimiento de la consulta no es alta y falta de sintaxis de consulta unificada

Base de datos de gráficos Base de datos relevante: Neo4J, InfoGrid, Infinite Graph Aplicación típica: Red social Modelo de datos: Estructura de gráficos Ventaja: Utilice algoritmos relacionados con la estructura de gráficos. Desventaja: es necesario calcular todo el gráfico para obtener el resultado, y no es fácil hacer una solución de clúster distribuida.

1.3 ¿Qué es Redis?

Redis es una base de datos de clave-valor de código abierto y alto rendimiento desarrollada en lenguaje C. Se proporcionan los datos de prueba oficiales.50 ejecutan 100 000 solicitudes simultáneamente, la velocidad de lectura es de 110 000 veces/s y la velocidad de escritura es de 81 000 veces./s, y Redis se adapta a los requisitos de almacenamiento en diferentes escenarios al proporcionar una variedad de tipos de datos clave-valor

Los tipos de datos clave-valor admitidos por Redis hasta ahora son los siguientes:

cadena tipo cadena

hash tipo hash

lista de tipo de lista

conjunto de tipos de colección

Tipo de colección ordenada sortedset

1.3.1 Escenarios de aplicación de redis

Caché (consulta de datos, conexión corta, contenido de noticias, contenido de productos básicos, etc.)

Lista de amigos en línea de la sala de chat

cola de tareas (Seckill, compras de pánico, 12306, etc.)

Clasificación de aplicaciones

Estadísticas de visitas al sitio web

Procesamiento de caducidad de datos (puede tener una precisión de milisegundos

Separación de sesiones en la arquitectura de clústeres distribuidos

2. Descarga e instala

Sitio web oficial: Redis

Sitio web chino: sitio web chino de Redis

La descompresión se puede utilizar directamente:

        redis.windows.conf: archivo de configuración

        redis-cli.exe: cliente para redis

        redis-server.exe: lado del servidor redis

3. Operación de comando

3.1 La estructura de datos de redis:

Redis almacena datos en formato de clave y valor, donde la clave es una cadena y el valor tiene 5 estructuras de datos diferentes

La estructura de datos de valor:

1. Cadena tipo cadena

2. Hash tipo hash: formato de mapa

3. Lista de tipo de lista: formato de lista enlazada. Soporte para elementos repetitivos.

4. Conjunto de tipos de colección: no se permiten elementos duplicados

5. Tipo de conjunto ordenado sortedset: no se permiten elementos duplicados y los elementos tienen un orden
    

3.2 Cadena tipo cadena

 3.2.1 Almacenamiento

establecer valor clave

192.168.1.105:0>set username zhangsan
"OK"

3.2.2 Obtener

obtener la clave

192.168.1.105:0>get username
"zhangsan"

3. Eliminar

del key

192.168.1.105:0>del username
"1"


3.3 Hash tipo hash
      

3.3.1 Almacenamiento

valor del campo clave hset

192.168.1.105:0>hset myhash username lisi
"1"
192.168.1.105:0>hset myhash password 123
"1"

3.3.2 Obtener

hget key field: Obtener el valor correspondiente al campo especificado

192.168.1.105:0>hget myhash username
"lisi"

clave hgetall: obtener todos los campos y valores

192.168.1.105:0>hgetall myhash
 1)  "username"
 2)  "lisi"
 3)  "password"
 4)  "123"

3.3.3 Eliminar

campo clave hdel

192.168.1.105:0>hdel myhash username
"1"

3.4 Tipos de listas

lista: puede agregar un elemento a la cabeza (izquierda) o al final (derecha) de la lista

3.4.1 Agregar

Valor de la clave lpush: agregue el elemento a la tabla izquierda de la lista

valor clave rpush: agrega el elemento a la derecha de la lista

192.168.1.105:0>lpush mylist a
"1"
192.168.1.105:0>lpush mylist b
"2"
192.168.1.105:0>rpush mylist c
"3"

3.4.2 Obtener

Fin de inicio de tecla lrange: adquisición de rango

192.168.1.105:0>lrange mylist 0 -1
 1)  "b"
 2)  "a"
 3)  "c"

3.4.3 Eliminar

Tecla lpop: elimina el elemento más a la izquierda de la lista y devuelve el elemento

192.168.1.105:0>lpop mylist
"b"

tecla rpop: elimina el elemento más a la derecha de la lista y devuelve el elemento

192.168.1.105:0>rpop mylist
"c"

3.5 Tipos de colección

el conjunto no permite elementos duplicados

3.5.1 Almacenamiento

triste valor clave

192.168.1.105:0>sadd myset a
"1"
192.168.1.105:0>sadd myset a
"0"

3.5.2 Obtener

smembers key: Obtener todos los elementos de la colección establecida

192.168.1.105:0>smembers myset
 1)  "a"


3.5.3 Eliminar

valor clave srem: eliminar un elemento en la colección establecida    

192.168.1.105:0>srem myset a
"1"

3.6 Tipos de conjuntos ordenados

sortedset: No se permiten elementos duplicados, y los elementos están en orden.Cada elemento está asociado a una puntuación de tipo doble. Redis clasifica los miembros del conjunto de pequeños a grandes a través de puntuaciones.

3.6.1 Almacenamiento

valor de puntuación clave de zadd

192.168.1.105:0>zadd mysort 60 zhangsan
"1"
192.168.1.105:0>zadd mysort 50 lisi
"1"
192.168.1.105:0>zadd mysort 80 wangwu
"1"

3.6.2 Obtener

tecla zrange inicio fin [con puntuaciones]
 

192.168.1.105:0>zrange mysort 0 -1
 1)  "lisi"
 2)  "zhangsan"
 3)  "wangwu"
192.168.1.105:0>zrange mysort 0 -1 withscores
 1)  "lisi"
 2)  "50"
 3)  "zhangsan"
 4)  "60"
 5)  "wangwu"
 6)  "80"

3.6.3 Eliminar

valor clave zrem

192.168.1.105:0>zrem mysort lisi
"1"

3.7 Orden general

1. teclas *: consultar todas las claves

2. escriba la clave: obtenga el tipo de valor correspondiente a la clave

3. del clave: elimina el valor clave especificado

4. Mecanismo de persistencia Redis

Redis es una base de datos en memoria. Cuando el servidor Redis se reinicia y la computadora se reinicia, los datos se perderán. Podemos conservar los datos en la memoria Redis en un archivo en el disco duro.

4.1 RDB (modo predeterminado)

No requiere configuración, este mecanismo es el que se utiliza por defecto, en un intervalo determinado se detecta el cambio de clave y luego se persisten los datos.

1. Edite el archivo redis.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. Reinicie el servidor Redis y especifique el nombre del archivo de configuración

cd C:\develop\redis-2.4.5-win32-win64\64bit
redis-server.exe redis.conf


4.2 AOF

La forma de registro puede registrar la operación de cada comando. Los datos se pueden conservar después de cada operación de comando

1. Edite el archivo redis.conf

appendonly no (desactivar aof) --> appendonly sí (activar aof)
                
# appendfsync always : Persiste cada operación

appendfsync everysec: persiste cada segundo

# appendfsync no: no persistir

5. Cliente Java Jedi

Jedis: una herramienta Java para operar la base de datos redis.

5.1 Inicio rápido

1. Importar coordenadas expertas  

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>

 2. Uso

/**
 * 快速入门
 */
@Test
public void test1(){
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105",6379);//如果使用空参构造,默认值 "localhost",6379端口
    //2.操作
    jedis.set("username","zhangsan");
    //3.关闭连接
    jedis.close();
}

5.2 Jedis opera varias estructuras de datos en redis

5.2.1 Cadena tipo cadena

conjunto de tienda

Puede usar el método setex() para almacenar un valor clave que puede especificar un tiempo de vencimiento

conseguir conseguir

@Test
public void test2() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    //存储
    jedis.set("username", "zhangsan");
    jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
    //获取
    String username = jedis.get("username");
    System.out.println(username);
    //3.关闭连接
    jedis.close();
}

5.2.2 Tipos de hash

hash: formato de mapa 

hset

obtener

hgetAll
 

@Test
public void test3() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // 存储hash
    jedis.hset("user", "name", "lisi");
    jedis.hset("user", "age", "23");
    jedis.hset("user", "gender", "female");

    // 获取hash
    String name = jedis.hget("user", "name");
    System.out.println(name);

    // 获取hash的所有map中的数据
    Map<String, String> user = jedis.hgetAll("user");

    // keyset
    Set<String> keySet = user.keySet();
    for (String key : keySet) {
        //获取value
        String value = user.get(key);
        System.out.println(key + ":" + value);
    }
    //3.关闭连接
    jedis.close();
}

5.2.3 Tipos de lista

lista: formato de lista enlazada. Soporte para elementos repetitivos.

empujar / empujar

lpop / rpop

Fin de inicio de rango: adquisición de rango

@Test
public void test4() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // list 存储
    jedis.lpush("mylist","a","b","c");//从左边存
    jedis.rpush("mylist","a","b","c");//从右边存

    // list 范围获取
    List<String> mylist = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist);

    // list 弹出
    String element1 = jedis.lpop("mylist");//c
    System.out.println(element1);

    String element2 = jedis.rpop("mylist");//c
    System.out.println(element2);

    // list 范围获取
    List<String> mylist2 = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist2);
    //3.关闭连接
    jedis.close();
}

5.2.4 Tipos de colecciones

set : No permitir elementos duplicados

triste

smembers: obtener todos los elementos

@Test
public void test5() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // set 存储
    jedis.sadd("myset","java","php","c++");
    // set 获取
    Set<String> myset = jedis.smembers("myset");
    System.out.println(myset);
    //3.关闭连接
    jedis.close();
}


5.2.5 Tipos de conjuntos ordenados

sortedset: no se permiten elementos duplicados y los elementos están en orden

zadd

zrange

@Test
public void test6() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // sortedset 存储
    jedis.zadd("mysortedset",3,"亚瑟");
    jedis.zadd("mysortedset",30,"后裔");
    jedis.zadd("mysortedset",55,"孙悟空");

    // sortedset 获取
    List<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
    System.out.println(mysortedset);
    //3.关闭连接
    jedis.close();
}

5.3 grupo de conexiones jedis: JedisPoo

@Test
public void test7(){
    //1.创建一个配置对象
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(50);
    config.setMaxIdle(10);

    //1.创建Jedis连接池对象
    JedisPool jedisPool = new JedisPool(config,"192.168.1.105",6379);

    //2.获取连接
    Jedis jedis = jedisPool.getResource();

    //3. 使用
    jedis.set("hehe","heihei");

    //4. 关闭 归还到连接池中
    jedis.close();
}

Clase de herramienta de grupo de conexiones

package com.itterence.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 连接池工具类
 */
public class JedisPoolUtils {

    private static JedisPool jedisPool;

    static {
        //读取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建Properties对象
        Properties pro = new Properties();
        //关联文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据,设置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

        //初始化JedisPool
        jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));

    }

    /**
     * 获取连接方法
     */
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

propiedades.jedis 

host=192.168.1.105
port=6379
maxTotal=50
maxIdle=10

prueba

@Test
public void test8(){
    //通过连接池工具类获取
    Jedis jedis = JedisPoolUtils.getJedis();
    jedis.set("hello","world");
    String str = jedis.get("hello");
    System.out.println(str);
    jedis.close();
}

Supongo que te gusta

Origin blog.csdn.net/qq_39997939/article/details/122746896
Recomendado
Clasificación