【Redis】散列表(Hash)和列表(List)的运用和理解以及Hash和List应用场景对比详解
创始人
2024-01-18 00:09:31

文章目录

  • 一. 散列表(hash)
    • 1.1 基本操作
    • 1.2 当value字符串的内容是数字时
  • 二.列表(List)
    • 2.1 基本操作
  • 三.Hash和List的应用场景
    • 3.1Hash的应用场景
    • 3.2List的应用场景

一. 散列表(hash)

在这里插入图片描述

Redis哈希是字符串类型字段和值的映射表。哈希特别适合存储对象。
Redis中的每个哈希可以存储232-1个键值对(超过40亿)。

image-20221029130442831

1.1 基本操作

image-20221029130541652

image-20221029130754388

Redis Hset 命令用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。

Redis Hget 命令用于返回哈希表中指定字段的值。

hmget命令用于返回哈希表中指定多个的字段的值。

hgetall命令用于返回哈希表中所有的字段和值。

我的实操过程如下:

127.0.0.1:6379> hset h1 f1 v1 f2 v2
(integer) 2
127.0.0.1:6379> hget h1 f1
"v1"
127.0.0.1:6379> hmget h1 f1 f2
1) "v1"
2) "v2"
127.0.0.1:6379> hgetall h1
1) "f1"
2) "v1"
3) "f2"
4) "v2"

Redis Hkeys 命令用于获取哈希表中的所有域(field)。包含哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。

Redis Hexists 命令用于查看哈希表的指定字段是否存在。如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

我的实操过程如下:

127.0.0.1:6379> hkeys h1
1) "f1"
2) "f2"
127.0.0.1:6379> hexists h1 f3
(integer) 0
127.0.0.1:6379> hstrlen h1 f1
(integer) 2

1.2 当value字符串的内容是数字时

image-20221029131302089

上篇文章里提到的字符串里也是可以加小数的。

如下,这个例子是增加一个f1字段的值为123,让其增加1.23,观察得知,最后的结果为"124.23"。

我的实操过程如下:

127.0.0.1:6379> hset h2 f1 123
(integer) 1
127.0.0.1:6379> hincrbyfloat h2 f1 1.23
"124.23"

二.列表(List)

Redis列表是一个简单的字符串列表,根据插入顺序排序。您可以将元素添加到列表的头部(左侧)或尾部(右侧)
一个列表最多可以包含232-1个元素(4294967295,每个列表超过40亿个元素)。

image-20221029131844892

2.1 基本操作

image-20221029132818387

Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。**注意:**在 Redis 2.4 版本以前的 RPUSH 命令,都只接受单个 value 值。

Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。**注意:**在Redis 2.4版本以前的 LPUSH 命令,都只接受单个 value 值。

我的实操过程如下:

127.0.0.1:6379> rpush li 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
(empty array)
127.0.0.1:6379> lrange li 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lpush li a b c d e
(integer) 10
127.0.0.1:6379> lrange li 0 -11) "e"2) "d"3) "c"4) "b"5) "a"6) "1"7) "2"8) "3"9) "4"
10) "5"

Redis Rpop 命令用于移除列表的最后一个元素,返回值为移除的元素。

弹出之后,原本的列表里就不存在这个数值了。

我的实操过程如下:

127.0.0.1:6379> lrange li 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
6) "1"
7) "2"
8) "3"
127.0.0.1:6379> rpop li
"3"

image-20221029133409386

Redis Lset 通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。

这里的例子将li的值从e改为了aa。

我的实操过程如下:

127.0.0.1:6379> lset li 0 aa
OK
127.0.0.1:6379> lrange li 0 -1
1) "aa"
2) "d"
3) "c"
4) "b"
5) "a"
6) "1"
7) "2"

Redis Linsert 命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果 key 不是列表类型,返回一个错误。

如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

我的实操过程如下:

127.0.0.1:6379> linsert li after c cc
(integer) 8
127.0.0.1:6379> lrange li 0 -1
1) "aa"
2) "d"
3) "c"
4) "cc"
5) "b"
6) "a"
7) "1"
8) "2"

Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。
127.0.0.1:6379> lrem li 2 c
(integer) 1

Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

我的实操过程如下:

127.0.0.1:6379> lrange li 0 -1
1) "aa"
2) "d"
3) "cc"
4) "b"
5) "a"
6) "1"
7) "2"
127.0.0.1:6379> ltrim li 1 -2
OK
127.0.0.1:6379> lrange li 0 -1
1) "d"
2) "cc"
3) "b"
4) "a"
5) "1"

三.Hash和List的应用场景

3.1Hash的应用场景

1.对象缓存
哈希类型(键、字段、值)的结构类似于对象(对象id、属性、值),也可以用于存储对象。string+json也是一种存储对象的方法,

2. 购物车

3.2List的应用场景

  • 堆栈:LPUSH+LPOP–>FILO

    先入后出原则:LPUSH从队列左侧进入d、c、b、a,LPOP从队列左侧离开a、b、c、d

  • 队列:LPUSH+RPOP
    先进先出原则:LPUSH从队列左侧进入d、c、b、a,RPOP从队列右侧离开d、c,b、a

  • 阻塞队列:LPUSH+BRPOP
    LPUSH+BRPOP在LPUSH+RPOP的基础上增加了阻塞和等待功能,
    BRPOP实际上等于阻塞+RPOP。当队列中的数据为空时,
    它将侦听消息队列,直到收到消息

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
苁蓉的食用方法 鲜苁蓉的吃法有... 肉苁蓉号称“温而不热,补而不峻,暖而不燥,滑而不泄,故有从容之名。”历来也是传统药食同源的滋补佳品。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...