Redis-03, tipos de datos comunes: cadena, hash, lista

Redis admite cinco tipos de datos: string (string), hash (hash), list (list), set (set) y zset (conjunto ordenado: conjunto ordenado). Correspondiente en Java: String, HashMap, LinkedList, HashSet, TreeSet

Cadena

La cadena es el tipo más básico de redis, puede entenderlo como el mismo tipo que Memcached, una clave corresponde a un valor.

El tipo de cadena es binario seguro. Esto significa que la cadena redis puede contener cualquier dato. Tales como imágenes jpg u objetos serializados.

El tipo de cadena es el tipo de datos más básico de Redis, y el valor del tipo de cadena puede almacenar hasta 512 MB.

  • Datos almacenados: datos únicos, el tipo más simple de almacenamiento de datos y el tipo de almacenamiento de datos más utilizado
  • Formato de datos almacenados: un espacio de almacenamiento contiene un dato
  • Almacenar contenido: generalmente use una cadena, si la cadena se muestra en forma de entero puro, puede usarse como una operación numérica

cadena como una operación numérica

  • La cadena almacenada en redis es una cadena por defecto, y se convertirá a un tipo numérico para el cálculo cuando encuentre operaciones incr y decr.
  • Todas las operaciones de redis son atómicas y todos los servicios se procesan en un solo subproceso. Los comandos se ejecutan uno por uno, por lo que no es necesario tener en cuenta
    el impacto de los datos causados ​​por la concurrencia .
  • Nota: Si los datos originales no se pueden convertir a un valor numérico o exceden el límite superior de los datos numéricos redis, se informará un error.
    9223372036854775807 (valor máximo de datos largos en Java, Long.MAX_VALUE)

Comandos básicos

Comando Función
establecer valor clave Agregar / modificar datos, establecer la clave existente para sobrescribir y modificar
obtener la clave Obtener datos
del key Eliminar datos
mset clave1 valor1 clave2 valor2… Agregar / modificar múltiples datos
mget key1 key2 ... Obtenga múltiples datos
llave strlen Obtenga el número de caracteres de datos (longitud de cadena)
agregar valor clave Agregue el mensaje al reverso del mensaje original (si existe el mensaje original, agréguelo, de lo contrario cree uno nuevo)
>SET username chenheng
OK
>get username
"chenheng"
>del username
(integer) 1

>mset a 1 b 2 c 3
OK
>mget a b c
1) "1"
2) "2"
3) "3"

>strlen username
(integer) 8

>append a BCDE
(integer) 5			//追加成功,返回字符总个数

En set / get único y set / get múltiple, cuando hay muchos datos, se recomienda usar mset, mget

Comando extendido 1

Comandos extendidos Función
clave incr Incremento de datos numéricos en 1
incremento de clave incrby Establecer los datos numéricos para aumentar el valor del rango especificado
incremento de clave incrbyfloat Establecer los datos numéricos para aumentar el valor decimal del rango especificado
tecla decr Disminución de datos numéricos en 1
incremento de clave decrby Establecer los datos numéricos para reducir el valor del rango especificado
//b=2
>incr b
(integer) 3

>incrby b 10
(integer) 13

>incrbyfloat b 0.5
"13.5"

Comando extendido 2

Comando Función
valor de segundos de clave setex Establecer el valor de los datos, y se fija en segundos keyel tiempo de supervivencia
valor de milisegundos de clave psetex Establecer el valor de los datos, y el conjunto en milisegundos keyel tiempo de supervivencia
valor clave setnx El keyse establece el valor value, si y sólo si keyno existe. Si se les da keyya existe, SETNX nada que hacer.
>setex a 5 name
OK
>get a
(nil)

Nota: Durante la supervivencia de los datos sensibles al tiempo, se eliminarán los datos comunes del conjunto con el mismo nombre.

Escenario de aplicación

Escenario empresarial 1 En
aplicaciones de nivel empresarial a gran escala, la división de tablas es una operación básica. Se utilizan varias tablas para almacenar el mismo tipo de datos, pero la identificación de la clave principal correspondiente debe estar unificada
y no puede repetirse. La base de datos Oracle tiene configuraciones de secuencia para resolver este problema, pero la base de datos MySQL no tiene un
mecanismo similar , entonces, ¿cómo resolverlo?

Solución : establezca el incremento y la disminución de la clave

Escenario empresarial 2

"Las chicas más fuertes" comienzan la votación de elecciones marítimas, que solo se puede votar a través de WeChat, y cada WeChat solo puede votar 1 cada 4 horas.
Los comerciantes de comercio electrónico abren recomendaciones de productos calientes, los productos calientes no siempre pueden estar en el período caliente, el período caliente de cada producto se mantiene durante 3 días, después de 3 días para cancelar automáticamente el caliente.
Las últimas noticias aparecerán en los sitios web de noticias. La característica más importante de las últimas noticias es la actualidad. ¿Cómo controlar automáticamente la actualidad de las últimas noticias?

Solución : configure los datos para que tengan un ciclo de vida específico

Escenario empresarial 3

El control de visualización de información de acceso de alta frecuencia en la página de inicio, como la página de inicio de Sina Weibo DaV, muestra la cantidad de fanáticos y la cantidad de Weibo

Solución

Establezca la información del usuario para los grandes usuarios de V en redis, utilizando la clave principal del usuario y el valor del atributo como la clave, y establezca una estrategia de actualización regular
user:id:3506728370:fans → 12210947
user:id:3506728370:blogs → 6164
user:id:3506728370:focuss → 83
en segundo plano. Almacene la información del gran usuario de V en redis en formato json y actualice regularmente (también puede usar el tipo hash)
user:id:3506728370 → {"id":3506728370,"name":"春晚","fans":12210862,"blogs":6164, "focus":83}

Aplicación de cuerda

  • Redis se utiliza para controlar la identificación de la clave primaria de la tabla de la base de datos, proporcionar una estrategia de generación para la clave primaria de la tabla de la base de datos y garantizar la unicidad de la clave primaria de la tabla de la base de datos.
    Esta solución es aplicable a todas las bases de datos y admite grupos de bases de datos.
  • Redis controla el ciclo de vida de los datos, controla el comportamiento empresarial a través de la falla de datos y se aplica a todas las operaciones con control de tiempo limitado
  • Redis se aplica a varias aceleraciones de acceso a datos de alta temperatura estructuradas y no estructuradas
  • Redis se utiliza para el control del servicio de liquidación de pago por visión basada en el tiempo

picadillo

Redis hash es un conjunto de pares clave-valor (clave => valor).
Redis hash es una tabla de mapeo de campo y valor de tipo string. Hash es especialmente adecuado para almacenar objetos.
El almacenamiento de datos de objetos será engorroso si tiene requisitos de actualización más frecuentes:

image-20200412114504577

  • Nuevos requisitos de almacenamiento: agrupar una serie de datos almacenados para una gestión sencilla, información típica de objetos de almacenamiento de aplicaciones
  • Estructura de almacenamiento requerida: un espacio de almacenamiento contiene múltiples datos clave-valor
  • Tipo de hash: la capa inferior utiliza una estructura de tabla hash para implementar el almacenamiento de datos
  • Optimización de estructura de almacenamiento de hash
    • Si el número de campos es pequeño, la estructura de almacenamiento se optimiza a una estructura tipo matriz
    • Si el número de campos es grande, la estructura de almacenamiento usa la estructura HashMap

Comandos básicos

Comando Función
valor de campo clave hset Agregar / modificar los datos de un campo
campo clave hget Obtener los datos de un campo.
clave hgetall Obtenga todas las claves y valores
hdel key field1 [field2 ...] Eliminar clave
hmset key field1 value1 [field2 value2…] Agregar / modificar múltiples datos de campo
hmget key field1 [campo2 ...] Obtenga múltiples datos
tecla de selección Obtenga el número de campos en la tabla hash
campo clave de hexistas Obtiene si el campo especificado existe en la tabla hash
>  hset user name zhangsan
(integer) 1
>  hget user name
"zhangsan"
>  hset user age 12
(integer) 1
> hset user grade 3
(integer) 1

>  hget user name
"zhangsan"

> hgetall user
1) "name"
2) "zhangsan"
3) "age"
4) "12"
5) "grade"
6) "3"

>  hdel user grade
(integer) 1

> hmset user grade 3 class 2
OK

> hmget user grade class
1) "3"
2) "2"

> hlen user
(integer) 4

> hexists user class
(integer) 1

Comandos extendidos

Comando Función
tecla de teclas Obtenga todos los nombres de campo en la tabla hash
llave de ballena Obtenga todos los valores de campo en la tabla hash
incremento de campo de clave hincrby Establecer los datos numéricos del campo especificado para aumentar el valor del rango especificado
Incremento de campo de clave de hincrbyfloat Establecer los datos numéricos del campo especificado para aumentar el valor del rango especificado
valor de campo clave hsetnx Agregar sin especificar un campo
> hkeys user
1) "name"
2) "age"
3) "grade"
4) "class"

> hvals user
1) "zhangsan"
2) "12"
3) "3"
4) "2"

> hincrby user grade 4
(integer) 7

> hincrbyfloat user age 0.5
"12.5"

> hsetnx user age 10
(integer) 0
> hset user house 100
(integer) 1

Asuntos que requieren atención

  • El valor bajo el tipo hash solo puede almacenar cadenas de caracteres, no está permitido almacenar otros tipos de datos y no existe un fenómeno de anidamiento. Si no se obtienen los datos, el
    valor correspondiente es (nulo)
  • Cada hash puede almacenar 232-1 par clave-valor
  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存
    储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
  • hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问
    瓶颈

应用场景

业务场景1

电商网站购物车设计与实现

业务分析

分析购物车的redis存储模型,添加、浏览、更改数量、删除、清空

解决方案

  • 以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息
  • 将商品编号作为field,购买数量作为value进行存储
  • 添加商品:追加全新的field与value
  • 浏览:遍历hash
  • 更改数量:自增/自减,设置value值
  • 删除商品:删除field
  • 清空:删除key

为了加速了购物车商品信息的呈现

  • 每条购物车中的商品记录保存成两条field

  • field1专用于保存购买数量
    命名格式:商品id:nums
    保存数据:数值

  • field2专用于保存购物车中显示的信息,包含文字描述,图片地址,所属商家信息等
    命名格式:商品id:info
    保存数据: json

    该字段的数据从一个商品信息独立hash中读取

    使用hsetnx key field value动态创建和扩展独立hash

业务场景2

双11活动日,销售手机充值卡的商家对移动、联通、电信的30元、 50元、 100元商品推出抢购活动,每种商
品抢购上限1000张

解决方案

  • 以商家id作为key
  • 将参与抢购的商品id作为field
  • 将参与抢购的商品数量作为对应的value
  • 抢购时使用降值的方式控制产品数量

hash的应用

  • redis 应用于购物车数据存储设计
  • redis 应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计

hash和string的比较

string存储:整体性,数据要么一次刚更新,要么一次性读取,主要用户呈现数据
hash: 更新灵活

list

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

  • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
  • 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
  • list类型:保存多个数据,底层使用双向链表存储结构实现
image-20200412131751107 image-20200412131835596

基本命令

命令 功能
lpush key value1 [value2] …… 从左边添加/修改数据
rpush key value1 [value2] …… 从右边添加/修改数据
lrange key start stop 获取指定范围的列表数据
lindex key index 获取指定下标的列表元素
llen key 获取列表的长度
lpop key 从左侧获取并移除一个数据
rpop key 从右侧获取并移除一个数据
> lpush students zhangsan lisi wangwu
(integer) 3

> lrange students 0 -1
1) "wangwu"
2) "lisi"
3) "zhangsan"

> lindex students 1
"lisi"

> llen students
(integer) 3

> lpop students
"wangwu"
> rpop students
"zhangsan"

扩展命令1

命令 功能
blpop key1 [key2] timeout 规定时间内从左侧获取并移除一个数据
brpop key1 [key2] timeout 规定时间内从右侧获取并移除一个数据
brpoplpush source destination timeout 从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
> blpop students 5
1) "students"
2) "lisi"

lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "300"
6) "200"
7) "100"
> lpush list2 d e f g
(integer) 4
> brpoplpush list1 list2 5
"100"
> lrange list2 0 -1
1) "100"
2) "g"
3) "f"
4) "e"
5) "d"

扩展命令2

命令 功能
lrem key count value 从左侧移除指定数量的指定数据
> lrem list1 1 200
(integer) 1

应用场景

业务场景1

微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息,如果取消点赞,移除对应好友信息

解决方案

移除指定数据

业务场景2

Las listas de seguimiento de usuarios individuales en Twitter, Sina Weibo y Tencent Weibo deben mostrarse en el orden de atención del usuario, y la lista de fanáticos debe enumerar los fanáticos que han seguido recientemente al frente.
¿Cómo muestran los sitios web de noticias e información las últimas noticias o información en orden cronológico?
Durante la operación de una empresa, el sistema generará una gran cantidad de datos de operación ¿Cómo asegurar la salida unificada de los registros de operación de múltiples servidores?

Solución

  • Los datos dependientes de la lista tienen las características de orden para administrar la información
  • Use el modelo de cola para resolver el problema de la agregación de información multicanal
  • Usa el modelo de pila para resolver las últimas noticias

aplicación de la lista

  • redis se aplica al control de datos con secuencia de operaciones
  • redis aplicado a la última pantalla de noticias

Asuntos que requieren atención

  • Los datos almacenados en la lista son todos de tipo cadena, y la capacidad total de datos es limitada, hasta 232-1 elemento (4294967295).
  • La lista tiene el concepto de índice, pero cuando se utilizan datos, generalmente tiene la forma de una cola para realizar operaciones en cola o en cola, o en forma de una pila.
  • Obtener el índice final de todas las operaciones de datos se establece en -1
  • La lista puede realizar operaciones de paginación en los datos, generalmente la primera página de información proviene de la lista, la segunda página y más información se carga en forma de una base de datos
  • redis debe usarse para operaciones de datos basadas en la secuencia de tiempo, sin prestar atención a un tiempo específico

Supongo que te gusta

Origin www.cnblogs.com/sout-ch233/p/12721526.html
Recomendado
Clasificación