Redis definición:
Lo que 1.redis?
Redis es una base de datos de alto rendimiento clave-valor, el tipo de valor almacenado que comprende una cuerda de soporte, lista, conjunto, zConfigurar y el hash, y apoyar el empuje / add pop / Quitar y operaciones de unión y diferencia intersectados.
2.redis características:
- Los datos se almacenan en caché en la memoria, se actualizará periódicamente los datos escritos en el disco o para modificar el archivo de registro de funcionamiento adicional por escrito.
- Implementado en un clúster, el servidor maestro para servicios externos, soporte de sincronización maestro-esclavo, de datos puede ser de cualquier número de servidores de sincronización de los soportes de servidor maestro en cascada arquitectura.
- Lograr una publicación / suscripción mecanismo, los datos sub-canal es almacenado (en un canal diferente), los datos de consumo premisa a un canal de suscripción.
- edis pena no se limita al tipo de cadena, pero la cadena de apoyo adicional:
3.redis arquitectura:
- No hay interacción entre la arquitectura basado en el centro, el nodo
- La posición de los valores de clave principal nodo algoritmo de hash y sus asignaciones almacenado, cada nodo mantiene la correspondencia entre la tecla y el servidor
- cliente puede iniciar una solicitud a cualquier nodo, no importa desde el maestro, si el servidor está nodos cliente está buscando, es capaz de responder, si no, que lo hará único cliente de redirección
- Si entre la solicitud del cliente y redirige la solicitud, cambios en la topología, será redirigido al siguiente petición para redirigir una vez más, hasta que encuentre el servidor adecuado
- Pero fusionInsight HD Redis racimos sólo admiten un modo maestro-esclavo
4. Escenario:
Recibe las últimas noticias
aplicación de líderes
de aplicación de contador
de acuerdo con: alto rendimiento y baja latencia de acceso a las estructuras de datos ricos para apoyar la persistencia
5. Implementar un sistema de recomendación de producto:
el programa:
la introducción de Redis, reducir el número de datos leídos desde el sistema de base de datos y archivo ;
caché de los resultados a Redis, realización y leer y tomar, en relación con el HBase más rápido porque HBase aunque el índice todavía va a acceder al sistema de archivos subyacente
diseño de la estructura:
debido a que los datos almacenados no es estructurado, no hay tiempo para leer información de clase tabla
usando la estructura de acceso de hash:
<clave, valor> ->
<identificador de usuario, nombre, Xiaoming>
<identificador de usuario, edad, 18 es>
MapReduce tiempo de trabajo para la información del usuario importado de Redis HBase, y
obtener datos de las Redis de inicio obtener, si no, ir a buscar HBase, y se sincroniza con Redis
REDIS operaciones de clúster
nota:
- La introducción de una cantidad de datos se limita a una configuración de memoria y REDIS instancia de clúster, la capacidad total de la cantidad de instancias REDIS * = el tamaño de memoria de una sola instancia;
- Y debe ser datos divididos a una pluralidad de la clave, por lo que el equilibrio de la carga de datos.
API Java:
1. El clúster
utilizando jedis
public RedisTest() {
//实例化一个集群的集合
Set<HostAndPort> hosts = new HashSet<HostAndPort>();
//通过ip地址和端口号获取到集群
hosts.add(new HostAndPort(”node01“, 6379));
int timeout = 5000;
client = new JedisCluster(hosts, timeout);
}
tiendas de tipo cadena:
public void testString() {
String key = "sid-user01";
// 设置指定key值,过期时间,sessionid
client.setex(key, 5, "A0BC9869FBC92933255A37A1D21167B2");
//获取指定的key值
String sessionId = client.get(key);
LOGGER.info("User " + key + ", session id: " + sessionId);
try {
Thread.sleep(10000);//进程休息
} catch (InterruptedException e) {
LOGGER.warn("InterruptedException");
}
sessionId = client.get(key);
LOGGER.info("User " + key + ", session id: " + sessionId);
key = "message";
//追加key,value
client.set(key, "hello");
String value = client.get(key);
LOGGER.info("Value: " + value);
client.append(key, " world");
value = client.get(key);
LOGGER.info("After append, value: " + value);
client.del(key);
}
hash de tipo de almacenamiento:
public void testHash() {
String key = "userinfo-001";
// 以key,field,value的形式存入数据
client.hset(key, "id", "J001");
client.hset(key, "name", "John");
client.hset(key, "gender", "male");
client.hset(key, "age", "35");
client.hset(key, "salary", "1000000");
// get方式获取 一个字段的值
String id = client.hget(key, "id");
String name = client.hget(key, "name");
LOGGER.info("User " + id + "'s name is " + name);
Map<String, String> user = client.hgetAll(key);
LOGGER.info(user);
client.del(key);
key = "userinfo-002";
Map<String, String> user2 = new HashMap<String, String>();
user2.put("id", "L002");
user2.put("name", "Lucy");
user2.put("gender", "female");
user2.put("age", "25");
user2.put("salary", "200000");
client.hmset(key, user2);
//追加
client.hincrBy(key, "salary", 50000);
id = client.hget(key, "id");
String salary = client.hget(key, "salary");
LOGGER.info("User " + id + "'s salary is " + salary);
// like Map.keySet()
Set<String> keys = client.hkeys(key);
LOGGER.info("all fields: " + keys);
// like Map.values()
List<String> values = client.hvals(key);
LOGGER.info("all values: " + values);
// 获取多个字段的值
values = client.hmget(key, "id", "name");
LOGGER.info("partial field values: " + values);
// 判断key值是否已经存在
boolean exist = client.hexists(key, "gender");
LOGGER.info("Exist field gender? " + exist);
// 删除key
client.hdel(key, "age");
keys = client.hkeys(key);
LOGGER.info("after del field age, rest fields: " + keys);
client.del(key);
}