论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
SQL-Server
›
【Redis】散列表(Hash)和列表(List)的运用和明确以及Has ...
【Redis】散列表(Hash)和列表(List)的运用和明确以及Hash和List应用场景对 ...
泉缘泉
金牌会员
|
2025-2-13 14:22:13
|
显示全部楼层
|
阅读模式
楼主
主题
970
|
帖子
970
|
积分
2920
一. 散列表(hash)
Redis哈希是字符串类型字段和值的映射表。哈希特别得当存储对象。
Redis中的每个哈希可以存储232-1个键值对(凌驾40亿)。
1.1 基本操作
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字符串的内容是数字时
上篇文章里提到的字符串里也是可以加小数的。
如下,这个例子是增长一个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亿个元素)。
2.1 基本操作
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 -1
1) "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"
复制代码
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。当队列中的数据为空时,
它将侦听消息队列,直到收到消息
总结
本文深入介绍了 Redis 中的几种常见数据布局,包括哈希(Hash)、列表(List)和集合(Set),并通过具体的命令和实操示例展示了它们的基本操作和应用场景。
哈希(Hash)
:哈希是 Redis 中非常有效的数据类型,它得当用于存储对象类型的数据布局,通过字段和值的映射关系,支持高效的键值操作,常用于缓存和用户信息存储等场景。
列表(List)
:Redis 列表是一个有序字符串集合,支持从两头插入和删除元素。通过具体命令如 RPUSH、LPUSH、LPOP 等,用户可以实现栈和队列等数据布局,得当用于任务队列、消息队列等应用。
集合(Set)
:Redis 集合是无序且唯一的字符串集合,能够高效处理去重操作,常用于标签管理、交际网络的好友列表等场景。集合支持交集、并集、差集等操作,特别得当需要举行集合运算的应用。
别的,文中还联合实际操作场景举行了具体展示,包括哈希表操作、列表操作以及集合操作等,使得读者能够更直观地明确 Redis 数据布局的实际应用。
总的来说,Redis 提供了非常丰富的数据类型和操作方法,能够满意各种业务需求,明确和掌握这些数据布局的利用技巧,对于开发高效、可靠的应用体系至关重要。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
泉缘泉
金牌会员
这个人很懒什么都没写!
楼主热帖
华为一镜到底主题__荣耀30系列安装教程 ...
日志模块
「Docker入门指北」容器很难理解?带你 ...
数据资产为王,如何解析企业数字化转型 ...
信创环境下分布式文件存储MinIO集群部 ...
28基于java的简单酒店数据管理 ...
Vulnhub之M87靶机详细测试过程(不同提 ...
xss-labs靶场
解决NuGet加载或下载资源慢的问题 ...
Java 8 排序的 10 个姿势,太秀了吧! ...
标签云
运维
CIO
存储
服务器
浏览过的版块
人工智能
分布式数据库
linux
运维.售后
云原生
快速回复
返回顶部
返回列表