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 -

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言进阶课程学习记录-函数指针的阅读

C语言进阶课程学习记录-函数指针的阅读 5个标识符含义解析技巧 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录 5个标识符含义解析 int (*p1) (int* , int (*f) ( int* ) );定义了指针p1,指向函数&#…

OpenHarmony实战开发-如何通过分割swiper区域,实现指示器导航点位于swiper下方的效果。

介绍 本示例介绍通过分割swiper区域,实现指示器导航点位于swiper下方的效果。 效果预览图 使用说明 1.加载完成后swiper指示器导航点,位于显示内容下方。 实现思路 1.将swiper区域分割为两块区域,上方为内容区域,下方为空白区…

采用等价类划分法设计测试用例

例题1 请采用等价类划分法设计测试用例。 考虑软件 app, 它有两个输入变量 , 分别是 name 和 age, 其中 ,name 是至多包含 20 个字母字符的非空字符串 ,age 是整数型变量 ,0 ≤ age ≤ 120 。当输入给 name 的字符串的长度超过 20时 ,name 取前 20 个字符作为 name 的值 ; 如果…

【面试经典 150 | 二分查找】搜索旋转排序数组

文章目录 写在前面Tag题目来源解题思路方法一:二分查找 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行…

清理prometheus监控历史数据

# 18、清理prometheus(监控)历史数据 转至元数据起始 现象:1.监控大盘主机,/data磁盘使用率100% 2.开发者中心首页所有主机显示“未添加监控”; 思路:1.缩短prometheus的监控数据保存期限(平…

宏集eX700M系列HMI实现港口设备数据上云

前言 随着港口设备信息化技术的快速发展,越来越多的企业想要把现场设备数据上传到云平台,进而实现关键数据的远程监控和分析处理。在此背景下,国内某信息化公司想要将港口设备数据通过MQTT上传到该公司自研IOT平台,实现数据上云&…

DDD学习

概述 学习一下DDD 什么是DDD DDD是领域驱动设计(Domain Driven Design)的缩写,是一种软件开发方法论。它强调将业务领域划分为多个紧凑的、自包含的领域,并通过强调领域模型的重要性来建立一个通用的语言和理解。 DDD鼓励开发…

js高级 笔记03

目录 01 如何避免全局变量 02 递归函数 03 浅拷贝 04 深拷贝 05 函数的调用模式 06 异步代码数据丢失问题 01 如何避免全局变量 自调用函数 常用于避免全局变量冲突的问题 不同的函数都有一个独立的作用域 所以可以解决命名冲突的问题 自调用函数也叫做沙箱函数 自调用函…

CSS all 属性

CSS all 属性 定义和使用 all 属性用于重置所有属性,除了 unicode-bidi 和 direction。 默认值:none继承:无动画:no。 阅读 animatable版本:CSS3JavaScript 语法:object.style.all“initial” 属性值 值描述initial修改所有元素属性或父元素的值为其初始化值in…

java项目的构建工具-Maven

黑马程序员JavaWeb开发教程 文章目录 一、概述1、介绍(1)介绍(2)Maven的作用(3)官网(4)仓库 2、安装 二、IDEA 集成 Maven1、配置Maven环境2、创建Maven项目(1&#xff0…

入门必备:MySQL本地安装(Windows11)

下载安装 社区版下载地址:https://dev.mysql.com/downloads/ 选择合适自己操作系统的版本: 下载完成后是一个.msi文件,双击安装即可; 接下来请看图: 上面的步骤完成后,大概会弹出黑窗口并且有下面的UI界面&#xff…

Simlab python二次开发1-将所有缸套内表面半径加大1mm

Simlab python二次开发1-将所有缸套内表面半径加大1mm 1、打开模型文件2、getBodiesWithSubString()从名字得到Bodies3、建Body类Group3.1、定义放入Group中的Bodies3.2、建Group 4、将缸套内表面建组,并扩半径1mm4.1、simlab.getBodiesFromG…

密码学 | 数字签名 + 数字证书

🥑原文:数字签名和数字证书的原理解读 - 知乎 🥑声明:后文图中若未明确指明,默认是 Bob 的公钥或私钥。 Step1:Bob 有两把钥匙,一把是公钥,另一把是私钥。 Step2:Bob 把…

基于Springboot+Vue的Java项目-企业客户管理系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

00_Linux

文章目录 LinuxLinux操作系统的组成Linux的文件系统Linux操作系统中的文件类型Linux操作系统的组织结构 Linux vs WindowsNAT vs 桥接模式 vs 仅主机Linux Shell命令Linux⽂件与⽬录管理相关指令目录文件普通文件文本编辑 用户管理添加用户删除用户用户组管理 文件权限管理权限…

[生活][杂项] 上班党的注意事项

前言 目前是上班已经接近两年了,目前的状态是,一个人租了一个单间在上班。对于这种情况有以下几点需要注意。 钥匙问题,一定不要陷入钥匙丢失的情况!一定不要陷入钥匙丢失的情况!一定不要陷入钥匙丢失的情况&#xff…

共享电动车哪家强?人民出行共享电动车绿色出行

在当下这个快节奏、高压力的生活环境中,人们越来越注重出行的便捷性和环保性。共享电动车以其灵活方便、绿色低碳的特性,受到了越来越多人的青睐。那么,在众多的共享电动车品牌中,哪个牌子比较好呢?今天,就让我来为大家介绍一下人民出行共享电动车,它以其卓越的品质和贴心的服…

邮箱群组是什么?怎么创建邮箱群组?

在我们群发邮件时,可能会遇到这样的状况,一个个输入邮箱地址效率很低,而且很容易就漏发。而对于一个企业来说,如果出现这样的问题,很有可能会影响公司的业务进展和团队协作。这个时候我们就需要邮箱群组这个功能&#…

【Java】导出Mysql表表结构与注释数据字典

需求: 把mysql中所有表的字段名、数据类型、长度、注释整理成csv,做成数据字典。 import java.io.IOException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import ja…

聊聊binlog是什么

1. 上一讲思考題解答:redo日志刷盘策略的选择建议 先给大家解释一下上一讲的思考題,我给大家的一个建议,其实对于redo日志的三种刷盘策略,我们通常建议是设置为1 也就是说,提交事务的时候,redo日志必须是刷入磁盘文件…