Redis 的五种基本类型(实战篇)

2023-11-19

良心公众号

关注不迷路

Redis 是一个速度非常快的非关系型数据库,它可以存储键 (key) 与 5 种不同类型的值 (value) 之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展性能。

《Redis In Action》Josiah L. Carlson 著

Redis 可以存储键 (key) 与 5 种不同类型的值 (value) 之间的映射,这 5 种类型如下图所示:

接下来,我们针对这五种数据类型,一一来看。

01

String类型

String 类型是 redis 中最最基础的字符串类型,它的常用命令如下图所示:

如上图所示,图中针对 String 类型的每一个命令,都给出了一个示例。部分命令如 incr、decr 是有使用条件的,当 key 对应的 value 是可以执行加 1 操作的时候才可以成功加 1,否则将会抛出错误。而对于像 set、get、del 这些基础的命令,其操作不受字符串的值的任何影响。

02

List类型

List 类型也是 redis 支持的一种基本类型,用于存储列表,可以简单地类比为 Java 中的 List。它的常用命令如下图所示:

如上图所示,图中针对 List 类型的每一个命令,都给出了一个示例。其中,值得一提的是,对于像 brpop 和 brpoplpush 这种阻塞式的弹出命令和弹出和推入命令,最常用到的场景就是消息传递和任务队列。

03

Hash类型

Hash 类型也就是我们常说的散列类型,它可以将多个键值对存储到 redis 的一个键中,它的常用命令如下图所示:

如上图所示,图中针对 Hash 类型的每一个命令,都给出了一个示例。可以体会到,redis 对于 Hash 类型的支持,更像是支持一个简易版的 redis,从而产生了一个 redis-key 对应一系列散列键值对的结构。

04

Set类型

Set 类型也就是我们非常熟悉的集合类型,与 Zset 类型不同的是,Set 类型是一种无序的集合,它采用无序的方式存储元素,它的常用命令如下图所示:

如上图所示,图中针对 Set 类型的每一个命令,都给出了一个示例。图中罗列的是最为基础的一些关于集合类型的一系列操作,事实上,redis 还支持关于集合的一系列常用的计算,包括求集合之间的交集、并集和差集等操作。我们在这里展开说一说如何使用 redis 进行集合之间的这三种常用的运算:

// 求交集(例如:求 set1 和 set2 以及 set3 三个集合之间元素的交集)
sinter set1 set2 set3


// 求并集(例如:求 set1 和 set2 两个集合之间的并集)
sunion set1 set2


// 求差集(例如,求 set1 和 set2 的差集)
sdiff set1 set2

基于上述三种操作,我们可以完成很多场景下,需要对多个集合中元素进行交并差计算的任务。

05

Zset类型

Zset 类型就是我们上文提到的有序集合的类型,和 Set 类型相比,它支持更加多样性的业务场景,同时也相对复杂,它的常用命令如下图所示:

如上图所示,图中针对 Zset 类型的每一个命令,都给出了一个示例。针对有序集合的概念,可以这么理解,它是在无序集合的基础上,针对集合中的元素,维护一个与之对应的权重值,进而可以依据权重值去实现对更加复杂场景的支持。

综上所述,redis 的五种基本类型的常用操作就总结到这里了。下一篇文章中,菜鸡将会进一步分析五种基本类型的底层原理,理论和实践相结合,相信你会有更多收获!

欢迎关注【有理想的菜鸡】公众号,大家一起讨论技术,共同成长!

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 的五种基本类型(实战篇) 的相关文章

  • 将多个视频文件合并到一个文件中

    我有多个以相同帧速率和分辨率录制的视频 我想将两个视频合并为一个视频 因此结果文件将是大视频 我正在使用 MP4 解析器 api 并使用下面的代码 Movie countVideo new MovieCreator build Channe
  • 将 EditText 聚焦在设备上运行的 PopupWindow 中时出现异常

    我正在为 Android 开发一个弹出窗口 它正在工作 我在上面添加了一个 EditText 和一个按钮 当在 ADV 上运行时 它可以正常工作 而在设备上运行时 当我专注于 EditText 时 这会抛出一个奇怪的异常 android v
  • 使用 CrudRepository 进行自定义查询

    我想使用 CrudRepository 自定义查询 这是我的代码 Repository public interface CustomerRepository extends CrudRepository
  • perl 和 java 正则表达式功能之间有什么区别?

    perl 和 java 在支持哪些正则表达式术语方面有什么区别 这个问题仅涉及正则表达式 并且特别排除了how可以使用正则表达式 即使用正则表达式的可用函数 方法 以及语言之间的语法差异 例如java要求转义反斜杠等 特别令人感兴趣的是 j
  • Numpy 通过一个数组的值总结另一个数组

    我正在尝试找到一种矢量化方法来完成以下任务 假设我有一个 x 和 y 值的数组 请注意 x 值并不总是整数并且可以为负数 import numpy as np x np array 1 1 1 3 2 2 2 5 4 4 dtype flo
  • Java 7 中 Object 和 int 的比较

    最近我偶然发现了一个问题 让我停下来思考 对我来说 下面的代码应该总是会触发错误 但是当我的一位同事问我为什么 Eclipse 没有显示错误时 我无法回答任何问题 class A public static void main String
  • Python Flask应用程序无法被网络中的远程计算机访问

    我在本地主机上的 python 上运行了一个简单的 Flask Web 应用程序 Web 应用程序在 127 0 0 1 8000 上运行 但我无法使用 myHostComputerIPaddress 8000 从网络中的远程计算机访问它
  • 在Python中确定句子中2个单词之间的邻近度

    我需要确定 Python 句子中两个单词之间的接近度 例如 在下面的句子中 the foo and the bar is foo bar 我想确定单词之间的距离foo and bar 确定之间出现的单词数foo and bar 请注意 该词
  • 在Spring-Boot中,我们如何在同一个项目中连接两个数据库(Mysql数据库和MongoDB)?

    我正在尝试创建一个 Spring Boot 项目 其中我有一个要求 我想连接到不同的数据库 MySql 和 MongoDB 我是否需要做一些特殊的事情来连接到这两个数据库 或者 spring boot 会自动计算出自己连接到这两个数据库 我
  • Python:使用for循环更改变量后缀

    我知道这个问题被问了很多 但到目前为止我无法使用 理解答案 我想改变for循环中变量的后缀 我尝试了 stackoverflow 搜索提供的所有答案 但很难理解提问者经常提出的具体代码 因此 为了清楚起见 我使用一个简单的示例 这并不意味着
  • Storm Spout 未收到 Ack

    我已经开始使用storm 所以我使用创建简单的拓扑本教程 https github com nathanmarz storm wiki Tutorial 当我运行我的拓扑时LocalCluster一切看起来都很好 我的问题是我没有得到元组的
  • 使用 plone.api 创建文件的 Python 脚本在设置文件时出现错误 WrongType

    Dears 我正在创建一个脚本python来在Plone站点中批量上传文件 安装是UnifiedInstaller Plone 4 3 10 该脚本读取了一个txt 并且该txt以分号分隔 在新创建的项目中设置文件时出现错误 下面是脚本 f
  • 单击 selenium 中的链接时循环遍历表格的行(python)

    示例页面源代码如下所示 div class div1 table class foot market tbody td class today name td tbody tbody td class today name td tbody
  • Apache HttpClient TCP Keep-Alive(套接字保持活动)

    我的 http 请求需要太多时间才能被服务器处理 大约 5 分钟 由于连接闲置 5 分钟 代理服务器将关闭连接 我正在尝试在 Apache DefaultHttpClient 中使用 TCP Keep Alive 来使连接长时间处于活动状态
  • spring data jpa 过滤 @OneToMany 中的子项

    我有一个员工测试实体是父实体并且FunGroup信息子实体 这两个实体都是通过employeeId映射 我需要一种方法来过滤掉与搜索条件匹配的子实体 以便结果仅包含父实体和子实体 满足要求 员工测试类 Entity name Employe
  • JSP 和 scriptlet

    我知道现在使用 scriptlet 被认为是禁忌 没关系 我会同意Top Star的话 因为我目前只是Java新手 到目前为止我听到的是 它是为了让设计师的生活更轻松 但我想知道 这是否与JSP页面的性能有关 另一方面 如果只是为了 让设计
  • 如何有效地计算另一列中每个元素的较大元素的数量?

    我有以下内容df name created utc 0 t1 cqug90j 1430438400 1 t1 cqug90k 1430438400 2 t1 cqug90z 1430438400 3 t1 cqug91c 143043840
  • 如何隐藏或删除 Android HoneyComb 中的状态栏?

    如何隐藏或删除 Android HoneyComb 中的状态栏 每次运行应用程序时 我都会发现某些内容必须被状态栏覆盖 我尝试改变AndroidManifest xml 但没有任何改变 你不知道 它被认为是永久的屏幕装饰 就像电容式主页 菜
  • 需要一个从 yaml 文件中提取内容并输出为 csv 文件的脚本

    我对 python 很陌生 但我很感激您帮助指导我创建一个简单的脚本 该脚本读取一堆 yaml 文件 同一目录中的大约 300 个文件 并从 yaml 文件并将其转换为 csv yaml 文件中内容的示例 code 9313 degrees
  • 将自定义属性添加到 Tk 小部件

    我的主要目标是向小部件添加隐藏标签或字符串之类的内容 以在其上保存简短信息 我想到创建一个新的自定义 Button 类 在本例中我需要按钮 它继承所有旧选项 这是代码 form tkinter import class NButton Bu

随机推荐

  • vue2侦听器watch的概念与使用

    1 什么是watch侦听器 watch侦听器允许开发者监视数据的变化 是 vue 提供的一种用来观察和响应实例上数据变化的属性 属性发生变化 便会触发对应的监听函数 侦听器 watch 实际上是 vue 实例中的一个对象属性 语法格式如下
  • IUnknown—COM和MFC

    转自 http hi baidu com zhangqiuxi blog item 6d9603ad9c8fe5084b36d6a0 html 问题 我用MFC编写COM程序有一段时间了 知道如何使用宏和嵌套类 以及如何在嵌套类中处理IUn
  • ArcGIS水文分析实战教程(18) 河段桩号与线性参考

    ArcGIS水文分析实战教程 18 河段桩号与线性参考 本章导读 在很多线性要素的应用中 桩号扮演着非常重要的角色 例如高速公路 使用桩号可以快速的描述某个事件在该路段的大概位置 同样是线性要素的河流 也可以加入桩号进行管理 作为河岸开发
  • python3中csv模块或者open模块写入中文乱码问题

    with open abc csv a newline encoding utf 8 sig as f writer csv writer f writer writerow bb 需要utf 8 sig模式才可以
  • AIGC产生内容的版权到底归属于谁?

    随着ChatGPT的火热 AIGC 人工智能生成内容 产生的内容越来越被大众使用 但是 有一个问题一直困扰着大家 包括放牛娃 那就是 AIGC产生的内容 有版权吗 版权到底归属于谁 01 什么是AIGC AIGC是指人工智能生成内容 也称为
  • 专利与论文-7:专利在哪儿?如何发现专利?思维分析方法

    前言 专利的最核心的要素 不在于如何熟悉专利申请的流程 也不在于如何写一份符合法律要求的 能够真正保护自己权利的专利申请文件 也不在于专利申请需要花多少钱 而在于如何产生一个真正有价值的专利本身 这是一个思维创造的过程 是拥有自己专利的最难
  • 火爆全网的人工智能聊天机器人使用教程

    最近 大家有没有被一款人工智能聊天机器人所刷屏呢 记得之前元宇宙刚出来的时候 也是极其火爆 虽说这二者是不同的性质 但是都是代表着当下互联网发展之迅速 一 简介 百度百科中给出的解释 美国 开放人工智能研究中心 研发的聊天机器人程序 于20
  • 自定义窗口部件,QT之为什么要delete ui,而其它new对象不用delete

    QT的父子对象机制是在 QWidget和QOject中实现的 当我们使用父对象来创建一个对象的时候 父对象会把这个对象添加到自己的子对象列表中 当这个父对象被删除的时候 它会遍历它的子对象类表并且删除每一个子对象 然后子对象们自己再删除它们
  • android c#websocket传送图片

    这个失败了 传一张可以 一直传就报错 public static void startHttpClientWebSocket AsyncHttpClient getDefaultInstance websocket ws 192 168 2
  • 【100%通过率 】【华为OD机试c++/java/python】最长的密码【 2023 Q1A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 最长的密码 小王在进行游戏大闯关 有一个关卡需要输入一个密码才能通过 密码获得的条件如下 在一个密码本中 每一页都有一个由26个小写字母组成的若
  • Redis可视化工具Redis Desktop Manager使用

    转载于 https www cnblogs com aimu p 7047671 html https www cnblogs com stone w p 4757578 html Redis可视化工具Redis Desktop Manag
  • BRD MRD PRD提纲

    BRD MRD PRD应该怎么写 提纲如下 2011 06 30 20 38 06 转载 标签 brd mrd prd 杂谈 分类 学习 根据情况 总结一下 文档类型 需要做的工作 提纲如下 要达到的目标 BRD阶段 一 市场分析 二 销售
  • C++中的继承

    目录 1 继承的概念及定义 1 1继承的概念 1 2 1继承格式 1 2 2继承关系和访问限定符 1 2 3继承基类成员访问方式的变化 2 基类和派生类对象赋值转换 3 继承中的作用域 同名成员 同名函数 4 派生类的默认成员函数 5 继承
  • 感冒交叉感染

    给没有感染的家人服用板蓝根颗粒 窗户每天要打开同风至少在半小时 平时可以用84消毒液拖地或清洗抹布等 病人的生活用品单方 如果条件允许可以按消毒灯 平时让家人多喝水 适当运动 感染者要带口罩 餐具隔离 室内用醋蒸薰消毒 经常开窗通风 未感者
  • QRCode简单生成二维码

    QRCode简单生成二维码 1 导包 2 jsp的body里 div div
  • 通讯录_Php通讯录系统

    点击上面 蓝字 关注我们 Php通讯录系统 address list 主页 通讯录系统 管理员登录 登录 注册 后台 通讯录系统 编辑 代码 include conn conn php url SERVER REQUEST URI url
  • Maven settings.xml文件中各配置项的详细说明

    1 Maven settings xml文件中各配置项的说明 localRepository 本地仓库 指定Maven本地仓库的路径 默认情况下 它位于用户主目录下的 m2文件夹中
  • Windows系统设置每天自动备份指定文件并自动删除七天前的文件(脚本+Windows任务计划)

    Windows系统设置每天自动备份指定文件并自动删除七天前的文件 脚本 Windows任务计划 在生活中和工作中有时候为了避免电脑宕机导致文件丢失常常会使用一些方式去备份文件 今天小编给大家介绍一个方法 用于自动备份指定文件 并删除N天前的
  • 射击游戏c语言源码,射击游戏 (C++代码)

    解题思路 路 一开始不理解假定A和B都足够聪明 采取让自己获胜概率尽量高的策略 你的任务是计算出A获胜的概率 其实就是说在任意一种方式下都是取得胜利的最大概率 所以要从所有可能的情况 1 6行 从左or从右 里取一个最大的 那么直接去dfs
  • Redis 的五种基本类型(实战篇)

    良心公众号 关注不迷路 Redis 是一个速度非常快的非关系型数据库 它可以存储键 key 与 5 种不同类型的值 value 之间的映射 可以将存储在内存的键值对数据持久化到硬盘 可以使用复制特性来扩展读性能 还可以使用客户端分片来扩展性