Grupo de conexiones Jedis-Jedis (optimización)

1. Descripción general de Jedis (clase de herramienta para que el cliente java opere Redis)

   Jedis es una herramienta de desarrollo de conexiones Java recomendada oficialmente por Redis . Además de usar comandos, básicamente los lenguajes convencionales ahora tienen soporte para clientes. El principal cliente de Java es Jedis. Jedis proporciona comandos completos de Redis, mientras que Redisson tiene implementaciones de contenedores más distribuidas.

   Operación Java Clase de herramienta Redis: Jedis

El grupo de conexiones Jedis utiliza el grupo de conexiones
   jedis basado en apache-commons pool2. Al construir el objeto del grupo de conexiones, debe proporcionar el objeto de configuración del objeto del grupo y JedisPoolConfig (heredado de GenericObjectPoolConfig). Podemos configurar los parámetros relevantes del pool de conexiones a través de este objeto de configuración (como el número máximo de conexiones, el número máximo de vacíos, etc.).

   j dos envases de frascos
Inserte la descripción de la imagen aquí

1.1 Probar la conexión de Jedis al funcionamiento de Redis

public class TestJedis {
    
    
    @Test
    public void test01(){
    
    
        //1:创建一个Jedis对象   创建一个连接,参1 ip地址(Redis服务器的ip地址) 参2 端口
        Jedis jedis = new Jedis("localhost", 6379);
        //2:执行Redis的指令(set指令)
        //写入数据
        jedis.set("name","[email protected]");//添加 string-string
        jedis.sadd("set","hello","[email protected]","Welcome to use");//添加string-set集合类型
        //读取数据
        System.out.println(jedis.get("name"));
        System.out.println(jedis.smembers("set"));
        //关闭连接
        jedis.close();
    }
}

resultado de la operación:

[email protected]
[hola, bienvenido a usar, [email protected]]

2. Principio del grupo de conexiones Jedis (el espacio para el tiempo equivale a una colección)

Ventajas del pool de conexiones:

Debido a que la creación y destrucción frecuentes de conexiones consume mucho rendimiento (el protocolo de enlace de tres vías TCP / IP y las cuatro ondas consumen mucho rendimiento), el grupo de conexiones debe resolver el problema del consumo de rendimiento causado por la asignación y liberación frecuentes de recursos.
Método: cree una colección para inicializar varias conexiones, llame al método getConnection () para solicitar una conexión cuando sea necesario y llame a close () para volver a colocarla en el grupo de conexiones después de su uso. (El cierre () aquí es para volver a poner en el grupo de conexiones, no para cerrar la conexión)

2.1 Implementación del grupo de conexiones Jedis (codificado)

Los
parámetros de configuración codificados están escritos en código java, compilados en una clase, debe modificar el código java en el futuro para cambiar la configuración

public class TestJedisPool {
    
    
    @Test
    public void test01(){
    
    

//        1:创建连接池的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大链接数
        config.setMaxTotal(20);
        //设置空闲连接数
        config.setMaxIdle(10);
//        2:创建连接池 参1:Redis服务器ip地址  参2:端口号
        JedisPool pool = new JedisPool(config, "localhost", 6379);
//        3:从连接池中获取一个连接
        Jedis jedis = pool.getResource();//获取一个连接
//        4:执行Redis执行  Map<String,String>   set   get
        jedis.set("name","JedisPool连接池");
        String value = jedis.get("name");
        System.out.println(value);
//        5:释放连接
        jedis.close();
    }
}

resultado de la operación:

Piscina de conexión JedisPool



2.2 Optimización del grupo de conexiones de Jedis (escrito como una llamada de clase de herramienta)

En el proyecto, use el archivo de configuración para configurar los parámetros, no necesita modificar el código java en el futuro, cambie directamente los parámetros en el archivo.

  1. Escribir clase de prueba (lógica empresarial)
//Jedis连接池优化(JedisPool优化)
public class TestJedisUtils {
    
    
    @Test
    public void test01(){
    
    
        //1:从连接池获取连接
        Jedis jedis = JedisUtils.getRedis();
        //2: 进行读写操作
        jedis.set("name","JedisPool连接池优化JedisUtils");
        
        String value = jedis.get("name");
        System.out.println(value);
        //3: 关闭连接
        JedisUtils.close(jedis);
    }
}
  1. Cree un archivo de propiedades para almacenar variables de parámetros (jedis.properties)
    // El archivo de propiedades contiene datos en forma de pares clave-valor, que se pueden leer usando una herramienta de lectura especial Clase de propiedades
maxTotal=50
maxIdle=15
url=localhost
port=6379
  1. Clase de herramienta para crear un grupo de conexiones jedis (leer archivos en .properties)

  La forma de leer el archivo .properties:

  • Puede usar el cargador de clases para cargar la secuencia primero y luego usar la clase Propiedades para leer .
  • También puede utilizar ResourceBundle para leer .propties

3.1 Use el cargador de clases para cargar en una secuencia y luego use la clase Propiedades para leer

public class JedisUtils {
    
    
    //单例模式 静态代码块只执行一次,因为创建会很消耗性能
    private static JedisPool pool;
    //静态代码在项目中,如果被使用只会加载一次
    static {
    
    

        //读src下的文件用类加载器的方式  - 类加载器去加载成流,再使用Properties类来读
        InputStream inputStream= JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");

        //.properties文件专门的读取工具
        Properties properties = new Properties();
        try {
    
    
            //将流中的数据读成map
            properties.load(inputStream);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        // 1:创建连接池的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大链接数
        config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
        //设置空闲连接数  "3"
        config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
        //2:创建连接池
         pool = new JedisPool(config, properties.getProperty("url"), Integer.parseInt(properties.getProperty("port")));
    }
    public static Jedis getRedis() {
    
    
//        3:从连接池中获取一个连接
        Jedis jedis = pool.getResource();//获取一个连接
        return jedis;
    }

    public static void close(Jedis jedis) {
    
    
        if(jedis!=null){
    
    
            jedis.close();
        }
    }
}

3.2 Utilice ResourceBundle para leer .propties

public class JedisUtils {
    
    
    private static JedisPool pool = null;
    //1:创建一个连接池
    static{
    
    
        //1.1 解析properties文件
        ResourceBundle bundle = ResourceBundle.getBundle("jedis");
        //获取参数
        String maxTotal = bundle.getString("maxTotal");
        String maxIdle = bundle.getString("maxIdle");
        String url = bundle.getString("url");
        String port = bundle.getString("port");

        //1.2创建连接池
        //1:创建连接池的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //1.1 设置最大连接数
        config.setMaxTotal(Integer.parseInt(maxTotal));
        //1.2 设置空闲连接数
        config.setMaxIdle(Integer.parseInt(maxIdle));

        //2:创建连接池
         pool = new JedisPool(config, url, Integer.parseInt(port));
    }

    //2:对外提供一个获取连接的方法
    public static Jedis getJedis(){
    
    
        return  pool.getResource();
    }

    //3:提供释放资源的方法
    public static void close(Jedis jedis){
    
    
        if(jedis != null) {
    
    
            jedis.close();
        }
    }
}

resultado de la operación:

Optimización del grupo de conexiones de JedisPool JedisUtils

Supongo que te gusta

Origin blog.csdn.net/qq_40542534/article/details/108730660
Recomendado
Clasificación