uso Redis
Redis introducción básica
-
la base de datos NoSQL Redis no es un sitio oficial de datos relacional tradicional: https://redis.io/ y http://www.redis.cn/
-
Redis: retirado Diccionario Server (servidor remoto diccionario), Redis muy alto rendimiento, independiente puede lograrse 15w QPS, por lo general adecuado para el almacenamiento en caché, también puede ser persistente.
-
Es completamente de código abierto y libre, de alto rendimiento (clave / valor) distribuidos en memoria de base de datos, basado en memoria para ejecutar y apoyar a la persistencia de las bases de datos NoSQL, el más popular NOSQ | un servidor de base de datos es también conocido como una estructura de datos
instalación Redis
Enlaces: https://pan.baidu.com/s/1QTYTKepSGZA93KCA76eatQ
código de extracción: AU10
No es la descompresión directa después de la descarga de programas Redis del lado del servidor (server.exe redescubrir) y cliente (Redis-cli.exe), basta con hacer doble clic para ejecutar, usted no necesita ser instalado.
El principio básico de la operación de la figura Redis
Instalación y uso básico de Redis
inicio Redis
Redis programa del lado del servidor se inicia en (Redis-server.exe), basta con hacer doble clic para ejecutar
Redis lista de instrucción de la operación
El uso básico de Redis
Descripción: Después de instalado Redis, la base de datos por defecto hay 16 biblioteca inicial predeterminado usando un No. 0, No. ..15
-
Add key-val [set]
-
Ver toda la llave Redis actual [teclas *]
-
La obtención de un valor de la clave correspondiente. [Obtener clave]
-
redis de conmutación de base de datos [seleccionar índice]
-
Cómo ver la base de datos actual del número de clave-val [dbsize]
-
Borrar la base de datos actual clave-val y el vaciado de las bases de datos clave-val [fiushdb flushall]
Redis de operaciones CRUD
Cinco tipos de datos Redis
Cinco tipos de datos Redis son: String (cadena), hash (hash), la lista (lista), Set (colección) y zConfigurar (conjunto ordenado: una colección ordenada)
String (cadena) - Introducción
Redis cadena es el tipo más básico, una clave correspondiente a un valor.
El tipo de cadena es seguro binario. Además de la cadena normal, también puede almacenar imágenes y otros datos.
Redis valor de cadena es el máximo 512M
Por ejemplo, un almacén de información de direcciones:
frente a la plaza de Tiananmen de Beijing
Descripción:
clave: la dirección de
Valor: Pekín Plaza de Tiananmen
127.0.0.1:6379> set address beijing
OK
127.0.0.1:6379> get address
"beijing"
String (String) -CRUD
Operaciones con cadenas de CRUD ilustran la cadena Redis.
conjunto [Si hay modificaciones equivalentes, se añade] / get / del
127.0.0.1:6379> del address
(integer) 1
127.0.0.1:6379> get address
(nil)
String (cadena) - Detalles de uso y notas
SETEX (set con expire) segundo valor de clave
127.0.0.1:6379> SETEX mess01 10 hello,you
OK
127.0.0.1:6379> get mess01
"hello,you"
127.0.0.1:6379> get mess01
"hello,you"
127.0.0.1:6379> get mess01
(nil)
MSET [proporciona simultáneamente uno o más pares de clave y valor]
mget [adquirir simultáneamente una pluralidad de clave-val]
127.0.0.1:6379> MSET worker01 tom worker02 scott
OK
127.0.0.1:6379> get worker02
"scott"
127.0.0.1:6379> MGET worker01 worker02
1) "tom"
2) "scott"
Hash (hachís, golang similar en el Mapa) - Introducción
introducción básica
Redis hash es una colección de pares de clave y valor. var map usuario1 [cadena] cuerdas
campo de hash Redis es un tipo de cadena y el valor de la tabla de asignación, el hash es particularmente adecuado para el almacenamiento de objetos.
Por ejemplo, una información de usuario se almacena: (usuario1)
Nombre userl "Smith" edad de 30 trabajo "golang codificador"
Descripción:
clave: userl
nombre de Joe Smith y los 30 años es de dos pares de campo de valor
Hash (hachís, golang similar en el Mapa) -CRUD
Ilustra las operaciones básicas CRUD de la Redis Hash.
HAjuste / hget / hgetall / HDEL
Añadir información del usuario de la presentación de casos (nombre, edad)
127.0.0.1:6379> HGETALL user1
1) "name"
2) "smith"
3) "age"
4) "30"
5) "job"
6) "golang coder"
hash detalles de uso y notas
Cuando un nombre de usuario y un conjunto Age, que están en frente de un paso - a paso de instalar, usar y hmget hmset valor de ajuste puede ser una pluralidad de valores desechables presentadas y de retorno de la pluralidad de campo.
HLEN una estadística de hash hay varios elementos
hexists campo clave para ver la clave de tabla hash, la presencia o ausencia de un campo determinado dominio
127.0.0.1:6379> hmset user2 name jerry age 110 job "java coder"
OK
127.0.0.1:6379> hmget user2 name age job
1) "jerry"
2) "110"
3) "java coder"
127.0.0.1:6379> hlen user2
(integer) 3
127.0.0.1:6379> HEXISTS user2 name
(integer) 1
127.0.0.1:6379> hexists user2 name2
(integer) 0
Ejercicios de hash
Por ejemplo, un estudiante de almacenar la información:
Nombre Stu1 Joe Smith 30 años de edad puntuación de 80 direcciones de Beijing
Descripción:
A través de las instrucciones pertinentes para completar la operación de la porquería Estudiante
Lista (lista) - Introducción
Lista es una simple lista de cadenas, para la ordenación por inserción. Se puede añadir un elemento a la cabeza de la lista (a la izquierda) o de las colas (a la derecha).
Lista es esencialmente una lista enlazada, los elementos de lista están ordenadas, el valor del elemento se puede repetir.
Ejemplos almacenar una pluralidad de información de la dirección:
Beijing, Tianjin, la ciudad de Shanghai
Descripción:
clave: ciudad
Beijing Tianjin Shanghai son los tres elementos
conseguir Caso
127.0.0.1:6379> LPUSH city berjing shanghai tianjing
(integer) 3
127.0.0.1:6379> lrange city 0 -1
1) "tianjing"
2) "shanghai"
3) "berjing"
Lista (lista) -CRUD
Lista de las operaciones CRUD Redis ilustradas.
lpush/rpush/lrange/lpop/rpop/del/
explicación
Lista de dibujo ayudar a entender (la lista puede ser pensado como una tubería)
la presentación de herolist
127.0.0.1:6379> lpush herolist aaa bbb ccc
(integer) 3
127.0.0.1:6379> LRANGE herolist 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
127.0.0.1:6379> rpush herolist ddd eee
(integer) 5
127.0.0.1:6379> lrange herolist 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
4) "ddd"
5) "eee"
127.0.0.1:6379> rpop herolist
"eee"
127.0.0.1:6379> lrange herolist 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
4) "ddd"
127.0.0.1:6379> del herolist
(integer) 1
127.0.0.1:6379> lrange herolist 0 -1
(empty list or set)
List- detalles de uso y notas
(1) lindex, obtenido de acuerdo con el elemento de indexación subíndice (de izquierda a derecha, numerados de cero.)
(2) LLEN key
vuelve clave de la longitud de la lista, si no existe la clave, la clave se interpreta como una lista vacía, devuelve 0
Notas adicionales (3) Lista de
datos de la lista, se pueden insertar desde la izquierda o la derecha se añade;
Si los valores son todos retirados, el botón correspondiente desaparecerá.
Conjunto (recopilación) - Introducción
Redis es una cadena Ajuste el tipo de colección desordenada.
La estructura de datos subyacente es HashTable, Conjunto elemento de cuerda número está almacenado, un elemento de cadena aleatoria, y el valor del elemento no puede ser duplicada
Por ejemplo, almacenar la información de múltiples listas de correo:
correo electrónico [email protected] [email protected]
Descripción:
clave: correo electrónico
[email protected] [email protected] que dos elementos
127.0.0.1:6379> sadd emails [email protected] [email protected]
(integer) 2
127.0.0.1:6379> SMEMBERS emails
1) "[email protected]"
2) "[email protected]"
127.0.0.1:6379> sadd emails [email protected] [email protected]
(integer) 2
127.0.0.1:6379> SMEMBERS emails
1) "[email protected]"
2) "[email protected]"
3) "[email protected]"
4) "[email protected]"
127.0.0.1:6379> sadd emails [email protected]
(integer) 0
127.0.0.1:6379> SMEMBERS emails
1) "[email protected]"
2) "[email protected]"
3) "[email protected]"
4) "[email protected]"
Conjunto (recopilación) - CRUD
Conjunto de operaciones CRUD ilustrar la Redis.
sadd
smembers [Eliminar todos los valores]
sismember [determina si el valor es un miembro]
[Eliminar el valor especificado] srem
Demos añaden caso de mensajes de correo múltiple
127.0.0.1:6379> SISMEMBER emails [email protected]
(integer) 1
127.0.0.1:6379> SISMEMBER emails [email protected]
(integer) 0
127.0.0.1:6379> srem emails [email protected]
(integer) 1
127.0.0.1:6379> SMEMBERS emails
1) "[email protected]"
2) "[email protected]"
3) "[email protected]"
ejercicios de conjuntos
Por ejemplo, una tienda de información de producto:
Incluyendo el nombre del producto, precio, fecha de producción.
Correspondiente a la porquería de finalizar la operación
Golang 操作 Redis
Instalar un tercero de código abierto bibliotecas Redis
1) El uso de bibliotecas de código abierto de terceras partes Redis: github.com/garyburd/redigo/redis
2) antes de su uso Redis, Redis para instalar las bibliotecas de terceros, lleve a cabo las instrucciones de instalación en la ruta GOPATH:
E: \ gostudent> ir a buscar github.com/garyburd/redigo/redis
3) Después de la instalación, consulte los siguientes paquetes
Nota especial: Antes de instalar la base de datos Redis, asegúrese de que ha instalado y configurado Git, porque Redis es descargar e instalar la biblioteca de GitHub, necesidad de usar Git.
E:\gostudent>go get github.com/garyburd/redigo/redis
\# cd .; git clone -- https://github.com/garyburd/redigo E:\gostudent\src\github.com\garyburd\redigo
Cloning into 'E:\gostudent\src\github.com\garyburd\redigo'...
fatal: unable to access 'https://github.com/garyburd/redigo/': Failed to connect to github.com port 443: Timed out
package github.com/garyburd/redigo/redis: exit status 128
Ejecutarlo varias veces como la razón por la que sabemos todo
Ajustar / obtener la interfaz
Descripción: Mediante la adición de adquisición Golang clave-valor y dicho nombre-tom ~ []
package main
import (
"fmt"
"github.com/garyburd/redigo/redis" //引入redis包
)
func main() {
//通过go向redis写入数据和读取数据
//1. 链接到redis
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("redis.Dial err =", err)
return
}
defer conn.Close() //关闭...
//2. 通过go向redis写入数据strinf [key-val]
_, err = conn.Do("Set", "name","tomjerry 猫猫")
if err != nil {
fmt.Println("set err = ", err)
return
}
//3. 通过go 向redis读取数据string [key-val]
r, err := redis.String(conn.Do("Get","name"))
if err != nil {
fmt.Println("set err = ", err)
return
}
//因为返回r是interface{}
//因为name对应的值是string ,因此我们需要转换
//nameString := r.(string)
fmt.Println("操作OK", r)
}
//操作OK tomjerry 猫猫
la operación de hash
Hash operación del tipo de datos Golang Redis: Descripción
Para la estructura de datos de hash, campo-val se lee uno por uno y se coloca
código:
import (
"fmt"
"github.com/garyburd/redigo/redis" //引入redis包
)
func main() {
//通过go向redis写入数据和读取数据
//1. 链接到redis
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("redis.Dial err =", err)
return
}
defer conn.Close() //关闭...
//2. 通过go向redis写入数据string [key - val]
_,err = conn.Do("HSet","user01","name","john")
if err != nil {
fmt.Println("hset err = ", err)
return
}
_, err = conn.Do("HSet","user01","age",18)
if err != nil {
fmt.Println("hset err =", err)
return
}
//3. 通过go向redis读取数据
r, err := redis.String(conn.Do("HGet","user01","name"))
if err != nil {
fmt.Println("hget err = ", err)
return
}
r2, err := redis.Int(conn.Do("HGet","user01","age"))
if err != nil{
fmt.Println("hget err =", err)
return
}
//因为返回r是interface{}
//因为name对应的值是string,因此需要转换
//nameString := r.(string)
fmt.Printf("操作ok r1 = %v r2 = %v\n", r, r2)
}
//操作ok r1 = john r2 = 18
对hash数据结构,field-val是批量放入和读取
import (
"fmt"
"github.com/garyburd/redigo/redis" //引入redis包
)
func main() {
//通过go向redis写入数据和读取数据
//1. 链接到redis
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("redis.Dial err =", err)
return
}
defer conn.Close() //关闭...
//2. 通过go向redis写入数据string [key - val]
_,err = conn.Do("HMSet","user02","name","john","age",19)
if err != nil {
fmt.Println("HMSet err = ", err)
return
}
//3. 通过go向redis读取数据
r, err := redis.Strings(conn.Do("HMGet","user02","name","age"))
if err != nil {
fmt.Println("HMGet err = ", err)
return
}
for i, v := range r {
fmt.Printf("r[%d] = %s\n", i, v)
}
}
//r[0] = john
//r[1] = 19
Conjunto de lotes / Obtener los datos
Descripción: Por Golang Redis de operación, una operación puede Establecer / obtener la pluralidad de datos clave-val
código del núcleo:
_, err = c.Do("MSet", "name",”zisefeizhu","address", "中国")
r, err := redis.Strings(c.Do("MGet", 'name", " address"))
for. ,V := range r {
fmt.Println(v)
}
Establecer los datos de tiempo válida
Descripción: Por Golang Redis de operación, a la clave-valor de ajuste de hora efectiva
código del núcleo:
// establece en el nombre de datos válidos durante 10 s
_, Err = c.Do ( "expira", "nombre", 10)
Lista de operaciones
Descripción: Listado por tipo de datos Golang operación Redis
código del núcleo:
_, err = c.Do("lpush", "heroList", "no1:宋江",30, "no2:卢俊义", 28)
r, err := redis.String(c.Do("rpop", "heroList"))
Redis la agrupación de conexiones
Descripción: Por Golang Redis de la operación, el enlace puede también piscina Redis, proceso es el siguiente:
1) antes de inicializar un cierto número de enlaces, link en la piscina
2) Cuando las operaciones necesarias Redis Go, * * eliminar el enlace de la piscina Redis enlace a.
3) Esto ahorra el temporal * Obtener enlaces * Redis tiempo, mejorando así la eficiencia.
4) Esquema
casos de uso de la piscina * Enlace *
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
//定义一个全局的pool
var pool *redis.Pool
//当启动程序时,就初始化链接池
func init() {
pool = &redis.Pool{
Dial: func() (redis.Conn, error) { //初始化链接的代码,链接哪个ip的redis
return redis.Dial("tcp","localhost:6379")
},
MaxIdle: 8, //最大空闲链接数
MaxActive: 0, //表示和数据库的最大链接数,0 表示没有限制
IdleTimeout: 100, //最大空闲时间
}
}
func main() {
//先从Pool取出一个链接
conn := pool.Get()
defer conn.Close()
_, err := conn.Do("Set","name","汤姆猫~")
if err != nil {
fmt.Println("conn.Do err=", err)
return
}
//取出
r, err := redis.String(conn.Do("Get","name"))
if err != nil {
fmt.Println("conn.Do err =", err)
return
}
fmt.Println("r =", r)
//如果要从pool 取出链接,一定要保证链接池是没有关闭
// pool.Close()
conn2 := pool.Get()
_, err = conn2.Do("Set", "name2", "汤姆猫~2")
if err != nil {
fmt.Println("conn.Do err ~~=", err)
return
}
//取出
r2, err := redis.String(conn2.Do("Get","name2"))
if err != nil {
fmt.Println("conn.Do err =", err)
return
}
fmt.Println("r =", r2)
//fmt.Println("conn2 =", conn2)
}
//r = 汤姆猫~
//r = 汤姆猫~2
再来一例
var pool *redis.Pool
func init() {
pool = &redis.Pool{
MaxIdle: 8,
MaxActive: 0,
IdleTimeout: 100,
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp", "localhost:6379")
},
}
}
func main() {
conn := pool.Get()
defer conn.Close()
_, err1 := conn.Do("HMSet", "user1", "name", "beijing", "address", "beijing")
if err1 != nil {
fmt.Println("HMSet err=", err1)
return
}
_, err3 := conn.Do("HMSet", "user2", "name", "wuhan", "address", "wuhan")
if err3 != nil {
fmt.Println("HMSet err=", err3)
return
}
//向redis读取数据,返回的r是个空接口
r, err2 := redis.Strings(conn.Do("HMGet", "user1", "name", "address"))
if err2 != nil {
fmt.Println("HMGet err=", err2)
return
}
for i, v := range r {
fmt.Printf("r[%d]=%v\n", i, v)
}
}
//r[0]=beijing
//r[1]=beijing