Colección de citas famosas - Colección de consignas - Cómo usar Redis en primavera

Cómo usar Redis en primavera

1. Escenarios de uso de Redis

Redis es una base de datos de valores clave de tipo registro de código abierto escrita en lenguaje ANSI C, admite red, puede estar basada en memoria y ser persistente, y proporciona. API en varios idiomas.

Todos sabemos que en las aplicaciones diarias, los cuellos de botella en las bases de datos son los más probables. La gran cantidad de datos y las consultas frecuentes, debido a las limitaciones del rendimiento de E/S del disco, hacen que el rendimiento del proyecto sea cada vez menor.

En este momento, el marco de almacenamiento en caché basado en memoria puede resolver muchos de nuestros problemas. Por ejemplo Memcache, Redis, etc. Poner algunos datos de uso frecuente en el caché para su lectura reduce en gran medida la carga de la base de datos. Rendimiento mejorado del sistema.

De hecho, lo mismo ocurre con la caché de segundo nivel de hibernación. Utilice la alta velocidad de lectura y escritura de la memoria para resolver el cuello de botella del disco duro.

2. Configurar y usar redis

Primero, debemos presentar el paquete jar básico.

Las referencias básicas en maven son las siguientes:

org.springframework.data

spring- data- redis

1.4.2.RELEASE

redis.clients

jedis

2.6.2

Luego, configure lo siguiente en applicationContext:

p:pool-config-ref="poolConfig " />

En cuanto a la configuración de hibernación, la primera configuración del grupo es la configuración del grupo de conexiones. Incluyendo la cantidad máxima de conexiones, la cantidad de colas, el tiempo de supervivencia, el tiempo máximo de espera, etc., y algunas configuraciones adicionales, haga clic directamente en el código fuente de la clase JedisPoolConfig para verlo.

Si no comprende el significado de estas configuraciones, debe estudiar detenidamente el grupo de subprocesos.

La primera configuración es la fábrica de conexiones. Como su nombre indica, el uso más básico debe ser el de abrir y cerrar conexiones. Necesitamos configurar la contraseña de la cuenta y el número de puerto del servidor Redis. (También puedes configurar el índice de la base de datos aquí, pero cuando lo uso, siempre uso la base de datos predeterminada de redis, que es la 0)

La última configuración es particularmente importante. Esto es similar a HibernateDaoSupport proporcionado por Spring.

A continuación, todas las explicaciones se centrarán en esta clase.

3. Uso de RedisTemplate

Como clase de plantilla, esta clase proporciona muchas API para usar Redis rápidamente sin tener que mantener conexiones y transacciones usted mismo.

Inicialmente, el BaseRedisDao que creé heredó de esta clase. La ventaja de la herencia es que en cada uno de mis Dao, puedo controlar libremente el serializador y si necesito transacciones, no necesito entender esto primero, solo seguir mi método de configuración actual.

La plantilla proporciona una serie de operaciones, como valueOperation, HashOperation, ListOperation, SetOperation, etc., que se utilizan para operar Redis de diferentes tipos de datos.

Además, RedisTemplate también proporciona el *OperationsEditor correspondiente, que se utiliza para inyectar directamente la operación correspondiente a través de RedisTemplate. No hablaremos de esto por ahora.

Para el siguiente método test1, no es necesario considerarlo por el momento. Primero comprendamos cómo usar la conexión para operar Redis a través de RedisTemplate.

El código de prueba es el siguiente:

paquete cn.test.spjedis;

importar javax.annotation.Resource;

importar org.junit .Test;

importar org.junit.runner.RunWith;

importar org.springframework.beans.factory.annotation.Autowired;

importar org.springframework .dao.DataAccessException;

importar org.springframework.data.redis.connection.RedisConnection;

importar org.springframework.data.redis.core.RedisCallback;

importar org.springframework.data.redis.core.RedisTemplate;

importar org.springframework.data.redis.core.ValueOperations;

importar org.springframework. test.context .ContextConfiguration;

importar org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

importar com.cn.redis2.dao.IncrDao;

@RunWith (SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = "classpath:applicationContext.xml")

clase pública TestRedis {

@Resource(nombre = "redisTemplate ")

private RedisTemplate template; // inyecta la plantilla como ListOperations

// En cuanto a por qué esto se puede inyectar. Necesita consultar AbstractBeanFactory doGetBean

//super.setValue(((RedisOperations) value).opsForValue(); Esta línea de código se basa en un editor

@Resource(name); = "redisTemplate ")

private ValueOperations vOps;

public void testSet(){

template.execute(new RedisCallback () {

@Override

público booleano doInRedis (conexión RedisConnection) lanza DataAccessException {

byte [] clave = "tempkey".getBytes();

byte[] valor = "tempvalue".getBytes();

conexión.set(clave, valor);

devuelve verdadero;

}

});

}

public void testSet1(){

vOps.set("tempkey", " tempvalue") ;

}

@Autowired

private IncrDao incr;

@Test

public void addLink() {

System.out.println(incr.incr(13));

System.out.println(incr.get(13));

}

}

Estas son dos pruebas para la inserción de tipo String. En el método de prueba, el método de devolución de llamada de envío de clase de plantilla (RedisCallBack) se utiliza para operar datos mediante la conexión jedis. ¿Te suena familiar esta parte?

HibernateCallback de HibernateTemplate, así como los métodos doWork y doReturningWork en la clase Hibernate Session, utilizan este mecanismo para facilitar la gestión unificada de conexiones o sesiones.

public int excuteHqlUpdate(final String hql,final Object...params){

return getHibernateTemplate().executeWithNativeSession(new HibernateCallback() {

@Override

@SuppressWarnings("unchecked")

entero público doInHibernate(sesión de sesión) lanza HibernateException {

Consulta queryObject = session.createQuery(hql );

if (params != null) {

for (int i = 0; i < params.length; i++) {

queryObject.setParameter (i, params[i]);

}

}

return queryObject.executeUpdate();

}

});

}