ir -redis serie idioma

uso Redis

Redis introducción básica

  1. la base de datos NoSQL Redis no es un sitio oficial de datos relacional tradicional: https://redis.io/ y http://www.redis.cn/

  2. 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.

  3. 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

  1. Add key-val [set]

  2. Ver toda la llave Redis actual [teclas *]

  3. La obtención de un valor de la clave correspondiente. [Obtener clave]

  4. redis de conmutación de base de datos [seleccionar índice]

  5. Cómo ver la base de datos actual del número de clave-val [dbsize]

  6. 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

Supongo que te gusta

Origin www.cnblogs.com/zisefeizhu/p/12655907.html
Recomendado
Clasificación