Redis教程——数据类型(哈希、集合)

上篇文章我们学习了Redis教程——数据类型(字符串、列表),这篇文章学习Redis教程——数据类型(哈希表、集合)

哈希表Hash

哈希表是一个string类型的field(字段)和value(值)的映射表,hash特别适合用于存储对象,每个哈希可以存储40多亿键值对。

基本命令

使用hset命令定义一个哈希数据类型,其语法格式为:

hset 键名 键值对1 键值对2 ... 键值对n

示例代码如下:

hset user id 12 name LIN age 18    # 创建键为user的哈希数据
type user         # 查看数据类型
hlen user         # 获取user的长度

运行结果如下:

获取键值

通过hget、hgetall、hmget命令获取键值对,示例代码如下:

hgetall user   # 获取所有的键值对
hget user id   # 获取user键中id的值
hmget user id name       # 获取user键中id、name的值

运行结果如下:

除了获取所有的键值对信息,我们可以通过hkeys/hvals命令获取键中的所有键/值,示例代码如下:

hkeys user    # 获取所有的键
hvals user    # 获取所有的值

运行结果如下:

删除键值

通过hdel命令删除某个键,示例代码如下:

hdel user id   # 删除user中的id
hgetall user

运行结果如下:

添加键值

通过hsetnx命令添加键值对,示例代码如下:

hsetnx user score 99.0    # 在user中添加键值对score 99.0
hgetall user   

运行结果如下:

注意:当添加的键存在时,添加的键值对命令会失效。

我们可以通过hexists命令判断是否存在键,示例代码如下:

hexists user id   # 判断是否存在id,存在返回1,否则返回0

数值增减

通过hincrby/hincrbyfloat方法对数值进行增减,示例代码如下:

hgetall user
hincrby user age -1    # age减1
hincrbyfloat user scroe -1.3  # scroe减1.3 
hgetall user

运行结果如下:

集合set

集合是string类型的无序集合,其成员是唯一的,Set集合是通过哈希表实现的,集合对象的编码可以是intset或hashtable,所以添加、删除、查找的复杂度都是O(1)。

基本命令

通过sadd命令创建一个集合类型数据,示例代码如下:

sadd numlist 1 1 2 2 3 4 5 5
type numlist

运行结果为:

注意:由于集合的元素是唯一的,所以在创建集合数据时,Redis会自动去重。

获取集合元素

通过smembers、srandmember命令获取集合元素,示例代码如下:

smembers numlist   # 获取集合中所有元素
scard numlist    # 获取集合长度
srandmember numlist 2   # 随机获取集合中两个元素

运行结果为:

可以通过sismember命令判断集合是否存在某个元素,示例代码如下:

sismember numlist a   # 判断numlist集合是否存在a元素,存在返回1,否则返回0

删除元素

通过srem、spop命令删除集合中的某个元素,示例代码如下:

srem numlist 1   # 删除numlist集合中1的元素,1元素存在时返回1,否则返回0
smembers numlist   # 获取集合中所有元素
spop numlist 2   # 随机删除集合中两个元素
smembers numlist   # 获取集合中所有元素

运行结果如下:

移动元素

通过smove命令将集合中的某个值移动到另一个集合中,示例代码如下:

sadd numlist1 a b c     # 创建numlist1集合
smove numlist numlist1 3   # 将numlist中的3元素移动到numlist1集合
smembers numlist1
smembers numlist

运行结果如下:

集合运算

集合运算主要有三种:

  • 差集运算:使用sdiff命令,返回属于集合1但不属于其他集合的元素;

  • 并集运算:使用sunion命令,返回所有集合合并后的集合元素;

  • 交集运算:使用sinter,返回集合中共有的元素构成的集合元素;使用sintercard返回集合中共有的元素构成的集合的个数

语法格式如下:

sdiff key [key ...]   # 差集运算
sunion key [key ...]  # 并集运算
sinter key [key ...]  # 交集运算
sintercard numkeys key [key ...] [LIMIT limit]  # 交集运算

其中:numkeys表示集合的个数,limit表示返回的数量,当limit大于集合个数时,返回集合的个数。

示例代码如下:

sadd set1 a b c 1 2  # 创建集合1
sadd set2 b c 3 1  # 创建集合2
sdiff set1 set2   # 差集运算
sunion set1 set2  # 并集运算
sinter set1 set2  # 交集运算
sintercard 2 set1 set2 # 交集运算,获取set1和set2共有元素的个数
sintercard 2 set1 set2 limit 2  # 交集运算,获取两个set1和set2共有元素

运行结果如下:

好了,Redis教程——数据类型(哈希、集合)就讲到这里了,下篇文章我们学习Redis教程——数据类型(有序集合、位图)。

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!

- END -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/555445.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web轮播图

思路: 例如:有5张轮播的图片,每张图片的宽度为1024px、高度为512px.那么轮播的窗口大小就应该为一张图片的尺寸,即为:1024512。之后将这5张图片0px水平相接组成一张宽度为:5120px,高度依然为:5…

问题解决:pip install __命令安装不了Python库

项目环境: 我的环境:Window10,Python3.7,Anaconda3-2.4.0,Pycharm2023.1.3 问题描述①: pip install 命令安装不了需要的安装的Python库,以PyMuPDF为例 1 socket.timeout: The read operation t…

ICASSP 2024会议现场第四弹 晚会上韩风歌舞惊喜连连

会议之眼 快讯 在科技的浪潮中,ICASSP 2024会议作为全球信号处理领域的风向标,今日在充满活力韩国迎来了它的第五天日程!会场中热烈的讨论和灵感迸发的交流,让会场仿佛成为一座思想的熔炉,不断燃烧着创新的火花&#…

2024经常用且免费的10个网盘对比,看看哪个比较好用!

网盘在我们的工作和学习中经常会用到,也是存储资料的必备工具,有了它,我们就不用走到哪都带着移动硬盘了,而目前市场上的主流网盘还有数十款,其中有免费的也有付费的,各家不一,今天小编就来为您…

ins视频批量下载,instagram批量爬取视频信息【爬虫实战课1】

简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…

Unity解决:导出安卓apk 安装时报错:应用未安装:软件包似乎无效

Unity2018.4.36 导出安卓apk 安装时报错:应用未安装:软件包似乎无效 解决办法:因为安装到安卓12 需要添加添加过滤规则 在AS工程AndroidManifest.xml 添加过滤规则即可。 android:exported"true"

爬虫 | 网易新闻热点数据的获取与保存

Hi,大家好,我是半亩花海。本项目是一个简单的网络爬虫,用于从网易新闻的热点新闻列表中提取标题和对应的链接,并将提取到的数据保存到一个 CSV 文件中。 目录 一、技术栈 二、功能说明 三、注意事项 四、代码解析 1. 导入所需…

[天梯赛] 图上的动态规划与Dijkstra

题目 刚开始的思路 一开始是想到了要用Dijkstra,但是不知道如何找到多条路径的信息(刚开始是想把所有最短路找到之后再比较找到最大的救援队数量) 正确的思路 在Dijkstra的过程中,分两种情况: 找到更短路径进行更新…

geolife笔记/python笔记:trackintel.io.read_geolife

此函数解析 geolife_path 目录中可用的所有 geolife 数据 trackintel.io.read_geolife(geolife_path, print_progressFalse) 参数: geolife_path (str) 包含 geolife 数据的目录路径 print_progress (Bool, 默认为 False)如果设置为 True,则显示每个…

【python从入门到精通】-- 第五战:函数大总结

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

js BOM模型常用方法梳理

1、Bom定义 BOM是操作浏览器的模型,主要是对浏览器的一些操作。 2、获取浏览器窗口的尺寸 window.innerHeight:获取窗口的高度。 window.innerWidth:湖区窗口的宽度,只在window浏览器下使用。 3、弹出层 alert:弹出框。 confirm:确认框。返回值有true …

Redis中的Lua脚本(三)

Lua脚本 EVAL命令的实现 EVAL命令的执行过程可以分为以下三个步骤: 1.根据客户端给定的Lua脚本,在Lua环境中定义一个Lua函数2.将客户端给定的脚本保存到lua_scripts字典,等待将来进一步使用3.执行刚刚在Lua环境中定义的函数,以此来执行客户…

2.核心概念与安装配置

核心概念与安装配置 文章目录 核心概念与安装配置1、核心概念Docker整体架构及底层通信原理 2、安装DockerCentos安装Docker引擎阿里云镜像加速Docker run的过程 3、Docker相关命令 1、核心概念 镜像(image) Docker 镜像(Image)就…

Linux 搭建私有yum源仓库

一、环境准备 IP系统版本作用192.168.140.155CentOS 7.9.2009yum源仓库192.168.140.153CentOS 7.9.2009测试 准备两台服务器,一台作为yum源仓库,另一台作为测试使用。 二、搭建yum源服务器 (无法连接外网的情况,需要去官网下载镜…

ssm058基于Java的共享客栈管理系统+jsp

共享客栈管理系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对房屋出租信息管理混乱,出…

语言的未来:深度学习在自然语言处理中的革命

语言的未来:深度学习在自然语言处理中的革命 1 引言 自古以来,语言就是人类表达思想、传递信息、进行社会互动的基石。语言的复杂性既体现在其变化多端的语义、句法和语用层面,同时也反映在人类如何理解和产生自然语言的深奥之中。在这一节中…

飞企互联FE业务协作平台 ProxyServletUti 任意文件读取漏洞复现

0x01 产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外,支持企业B2B、C2B与O2O等核心需求,为不同行业客户的互联网+转型提供支持。其特色在于提供云端工作环境,整合…

活动报名 | 如何进行全增量一体的异构数据库实时同步

伴随着新技术的不断涌现,市场竞争也在不断开辟新的角斗场——新的业务需求,新的应用设想都在这里迸发。 面对如此日新月异的竞争环境,企业的当务之急,是为新应用扎根准备好随时可取、准确一致的高质量数据土壤。在这样的背景下&a…

电工与电子技术选择题填空题计算题复习题含参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 电工与电子技术复习题 一 . 单选题(共 33 题&a…

[Meachines][Easy]Headless

Tools https://github.com/MartinxMax/MDOG 针对XXS攻击 Main $ nmap -sC -sV 10.10.11.8 --min-rate 1000 类似于留言板 通过目录扫描,发现一个仪表盘 $ gobuster dir -u "http://10.10.11.8:5000" -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt 回…