【Redis速通】基础知识2 - 常用数据结构

2023-11-02

Redis 通用指令

下面是一些 Redis 的通用命令,你可以根据下表进行简单的复习:

  1. 键操作命令:

    • SET:设置指定键的值。
    • GET:获取指定键的值。
    • DEL:删除指定键。
    • EXISTS:检查指定键是否存在。
    • KEYS:获取匹配指定模式的键列表。
  2. 字符串操作命令:

    • APPEND:将指定值追加到键的末尾。
    • STRLEN:获取指定键值的长度。
    • INCR:将指定键的值增加 1。
    • DECR:将指定键的值减少 1。
  3. 列表操作命令:

    • LPUSH:将一个或多个值插入列表的左侧。
    • RPUSH:将一个或多个值插入列表的右侧。
    • LPOP:移除并返回列表的左侧第一个元素。
    • RPOP:移除并返回列表的右侧第一个元素。
    • LLEN:获取列表的长度。
  4. 哈希操作命令:

    • HSET:在哈希中设置字段和值。
    • HGET:获取哈希中指定字段的值。
    • HGETALL:获取哈希中所有字段和值。
    • HDEL:从哈希中删除指定字段。
    • HKEYS:获取哈希中的所有字段。
  5. 集合操作命令:

    • SADD:向集合中添加一个或多个成员。
    • SMEMBERS:获取集合中的所有成员。
    • SREM:从集合中删除一个或多个成员。
    • SINTER:返回多个集合的交集。
    • SUNION:返回多个集合的并集。
  6. 有序集合操作命令:

    • ZADD:向有序集合中添加一个或多个成员,并指定分数。
    • ZRANGE:按照分数顺序获取有序集合中的成员。
    • ZREM:从有序集合中删除一个或多个成员。
    • ZSCORE:获取有序集合中指定成员的分数。
    • ZCOUNT:计算有序集合中指定分数范围内的成员数量。

基本字符串操作

所有的 redis 指令都对大小写不敏感,直接全大写写起来比较好区分

设置单个值(安装键值对) SET <key> <value>

查询给定 key GET <key>

获取旧值并设定新值 GETSET <key> <value>

一次性设置多个值 MSET <key1> <value1> <key2> <value2> ...
一次性获取多个值 MGET <key1> <key2> ...


获取字符串字节长度 STRLEN sentence

获取字符串指定索引文本(以下代码表示获取索引 0-4 的文本)
GETRANGE msg 0 4


整形自增 1 INCR <K>
数值加法 INCRBY <K> <V>
数值减法 DECRBY <K> <V>

如果省略 value 不写,则表示+1 或者-1


Key 层级结构

Redis 的 key 运行多个单词外加冒号来命名,命名格式基本如下
项目名:业务名:类型:ID

比如:zhiller:user:1


Hash

创建 hash 的格式:HSET <KEY> <FIELD> <VALUE> (三个值分别表示键、字段名、值)

新建 key: hello,并向其中填入两个键值对
HSET hello a 10
HSET hello b 10

仅在字段不存在的情况下为其赋值 HSETNX

获取指定数据库的指定值 HGET <K> <F>

获取所有 fields HKEYS
获取所有 values HVALS
获取以上二者 HGETALL

让指定字段的值自增 HINCRBY <K> <F> [自增值]


List

在 Redis 中,List(列表)是一种有序、可重复的数据结构。它可以存储一个有序的字符串元素列表,允许在列表的两端进行插入和删除操作。

以下是一些常用的 Redis List 命令:

  1. LPUSH:将一个或多个元素插入到列表的左侧(头部)。
  2. RPUSH:将一个或多个元素插入到列表的右侧(尾部)。
  3. LPOP:移除并返回列表的左侧(头部)第一个元素。
  4. RPOP:移除并返回列表的右侧(尾部)第一个元素。
  5. LLEN:获取列表的长度。
  6. LRANGE:获取列表中指定范围内的元素。
  7. LINDEX:获取列表中指定索引位置的元素。
  8. LSET:设置列表中指定索引位置的元素值。
  9. LREM:从列表中删除指定数量的指定元素。
  10. LINSERT:在列表中指定元素的前面或后面插入一个新元素。
  11. LTRIM:修剪(裁剪)列表,只保留指定范围内的元素。
  12. RPOPLPUSH:将列表的最后一个元素移除,并添加到另一个列表的头部。

Redis 的 List 结构是基于链表实现,在头部和尾部进行插入和删除操作的时间复杂度是 O(1),在列表中间进行插入和删除操作的时间复杂度是 O(N)的(N 为列表长度)。


SET

类似于 HashSet,无序、元素不可重复、查找快、支持交集差集并集

以下是 SET 集合指令及其简要介绍:

  1. SADD:添加一个或多个成员到集合中。
  2. SREM:从集合中移除一个或多个成员。
  3. SMEMBERS:获取集合中的所有成员。
  4. SISMEMBER:检查一个成员是否存在于集合中。
  5. SCARD:获取集合的成员数量。
  6. SPOP:随机移除并返回集合中的一个成员。
  7. SRANDMEMBER:随机获取集合中的一个或多个成员。
  8. SINTER:获取多个集合的交集。
  9. SUNION:获取多个集合的并集。
  10. SDIFF:获取多个集合的差集。

SortedSet

可排序、元素不重复、查询速度快

底层基于一个跳表+hash 表实现;
其中的每一个元素都要 score 属性,可以基于 score 属性进行排序;

SortedSet 常用指令介绍

  1. ZADD:向有序集合中添加一个或多个成员,每个成员关联着一个分数。
  2. ZREM:从有序集合中移除一个或多个成员。
  3. ZRANGE:按照分数从小到大的顺序,返回指定索引范围内的成员。
  4. ZREVRANGE:按照分数从大到小的顺序,返回指定索引范围内的成员。
  5. ZRANK:获取指定成员在有序集合中的排名(按照分数从小到大的顺序)。
  6. ZREVRANK:获取指定成员在有序集合中的排名(按照分数从大到小的顺序)。
  7. ZSCORE:获取指定成员在有序集合中的分数。
  8. ZCARD:获取有序集合的成员数量。
  9. ZCOUNT:计算有序集合中指定分数范围内的成员数量。
  10. ZINCRBY:将指定成员的分数增加指定的增量。
  11. ZINTER ZUNION ZDIFF:求交、并、差集

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

【Redis速通】基础知识2 - 常用数据结构 的相关文章

  • Redis部署配置-主从复制

    目前我有两台服务器 我已经部署了基于node js Express JS的Web服务API 我正在使用 Redis 来缓存 JSON 字符串 将此设置部署到生产中的最佳选择是什么 我懂了here https stackoverflow co
  • Node.js 上通过套接字连接 Redis

    由于共享托管 目标主机上的我的 redis 服务器不在端口上运行 而是在非常特定的套接字上运行 可以通过套接字文件连接到该套接字 只有我的用户可以访问 但是 我还没有找到如何通过套接字指定连接node redis and connect r
  • Redis 块推送直到列表有空位

    我正在寻找类似的东西BLPUSH该命令将阻塞 直到列表的长度低于指定值max size 目的是防止生产者运行速度快于消费者时列表无限增长 功能与 python 非常相似Queue put https docs python org 3 li
  • Stackexchange.redis 缺乏“WAIT”支持

    我在客户端应用程序正在使用的负载均衡器后面有 3 个 Web API 服务器 我正在使用这个库来访问具有一个主服务器和几个从服务器的 Redis 集群 目前不支持 WAIT 操作 我需要此功能来存储新创建的用户会话并等待它复制到所有从属服务
  • 我的 Redis 自动生成的密钥

    我不知道我的 Redis 版本 4 0 9 到底发生了什么 我正在运行一个应用程序并使用 Redis 来存储我的数据库 但是 然后 Redis 自动创建 3 个新键 Backup1 Backup2 Backup3 并删除我的所有数据 这是我
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • 如何将 ActionController::Live 与 Resque + Redis 一起使用(用于聊天应用程序)

    我正在尝试为我的 Rails 应用程序构建聊天功能 我在用ActionController Live Puma Resque Redis为了这 所以基本上在这种情况下 redissubscribe方法正在后台运行 使用resque 到目前为
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 有没有办法在 ruby​​ 中重新定义 []=+

    我正在尝试编写一个简单的 DSL 针对 Redis 并且我想自己定义 I have def key val redis zadd name val key end 我想定义 def key val redis zincrby name va
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Redis发布/订阅:查看当前订阅了哪些频道

    我目前有兴趣查看我拥有的 Redis 发布 订阅应用程序中订阅了哪些频道 当客户端连接到我们的服务器时 我们将它们注册到如下所示的通道 user user id 这样做的原因是我希望能够看到谁 在线 目前 我在不知道客户端是否在线的情况下盲
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • Laravel 所有会话 ID 与 Redis 驱动程序

    在我的应用程序中 我希望允许某些用户能够注销除他 她之外的所有其他用户 当会话驱动程序设置为文件时 我已经完成了此功能 但现在我使用 redis 作为会话驱动程序 并且我无法找到任何方法来列出所有当前会话 就像我在文件时所做的那样司机 问题
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac
  • redis dump.rdb / 保存小文件

    Context 我正在使用redis 数据库小于 100 MB 但是 我想进行每日备份 我也在 Ubuntu Server 12 04 上运行 当输入 redis cli save 我不知道 dump rdb 保存到哪里 因为 redis
  • redis 2.8.7 Linux Sentinel环境配置问题,如何使其自启动,应该订阅什么?

    现在我们尝试使用 redis 2 8 7 作为缓存存储 来自使用 booksleeve 客户端的 NET Web 应用程序 目前看来这是一个非常有趣和令人兴奋的任务 redis 文档非常好 但由于缺乏真正的实践经验 我确实有几个关于如何正确
  • 创建 C++ Redis 模块 - “不导出 RedisModule_OnLoad() 符号”

    我在加载 Redis 模块时遇到一些问题 我只是复制来自的示例https redis io topics modules intro https redis io topics modules intro 但我把它剥下来了 include
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m

随机推荐

  • 使用MATLAB实现对信号的EMD分解

    文章目录 0 前言 1 经验模式分解EMD 2 希尔伯特变换HT 3 希尔伯特 黄变换HHT 4 基于EMD的语音信号处理 5 MATLAB实现对信号的EMD分解 5 1 对构造的信号进行EMD 5 2 对实际的信号进行EMD 6 参考文献
  • python pyecharts的基础使用

    python pyecharts的基础使用 导包 from pyecharts charts import Line from pyecharts options import TitleOpts LegendOpts ToolboxOpt
  • 如何用springboot实现发送通知给用户的功能

    可以使用 Spring Boot 中的 Spring Boot Starter Mail 来实现发送通知给用户的功能 首先需要在项目的 pom xml 文件中添加对 spring boot starter mail 的依赖 然后在 appl
  • 【程序人生】5个月从职场打杂到月薪14000的女测试工程师逆袭之路

    大家好 我是来自湖南的一位辣妹子 毕业于一所工业大学 大学的专业是软件与工程 其实也算是本专业 大学期间掌握的知识也算比较广 各个方面都会一丢丢 就是不是特别深入 之所以这么说 是因为一直以来我觉得自己还不错 但毕业设计的时候 怎么也做不出
  • Audition报错:“无法应用设备设置,因为发生了以下错误:MME设备内部错误“

    今天打开AU提示有一个错误如下 打开设置以后就这样显示三条都不可用 查找了相关资料发现都不能解决 后来自己尝试几个地方设置才得以解决 问题出在如下 没有选对相应输入输出设备
  • AF_PACKET套接字解密 --- 02

    AF PACKET套接字解密 02 2012 05 23 22 36 57 分类 LINUX 当AF PACKET套接字注册了prot hook后 怎样进行监听呢 先来看发送 当协议栈准备将数据交给net device发送时 它将调用dev
  • (一维数组)输入N个数,然后逆序输出

    一维数组 1 输入N个数 例题6个数 然后逆序输出 define N 6 include stdio h void main int i a N t for i 0 i
  • 网络安全-js安全知识点与XSS常用payloads

    目录 简介 用法 JS必备知识 输出与注释 输出 注释 语法 函数 字符串方法 事件 表单 Cookie 代码执行 伪协议 XSS常用payload 普通 双写绕过 编码绕过 html标签绕过正则 参考 写给和我一样学习安全的小白 简介 J
  • eMMC分区管理

    目录 0 概述 FLASH分区类型 分区大小 分区编址 1 Boot Area Partitions 1 1 容量大小 1 2 从 Boot Area 启动 1 2 1 Original Boot Operation 1 2 2 Alter
  • 递归与回溯的理解

    递归 程序调用自身的编程技巧称为递归 recursion 递归做为一种算法在程序设计语言中广泛应用 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模 较小的问题来求解
  • 忘了高高在上的Chatgpt吧,更香的Claude和Bard来了

    最近LLM这一领域近年来进步神速 新的产品层出不穷 给我们的生活和工作带来了巨大便利 也引发了广泛关注 首当其冲的 就数OpenAI研发的ChatGPT ChatGPT是一款基于GPT模型打造的对话AI系统 被业内公认为目前进展最快 实力最
  • 大多数女生为什么不适合当程序员?

    最重要的一点 逻辑思维能力 女程序员最大的问题不是压力大而是思维方式切换的挑战 从抽象到具象 平常需要将问题抽象出来 运用抽象思维解决工作上的困难 生活中间又要很具象 很感性地和人交往 这是非常难以达到的一件事 加上工作压力一大 就容易崩溃
  • skywalking 实现收集基于python的Django项目链路追踪案例

    一 python3环境设置 1 1 安装python3 apt get update apt install python3 pip y pip install apache skywalking root skywalking agent
  • 人脸相关公开数据集

    1 皮肤分割和面部检测数据集 FSD 1 数据集名称 Face and Skin Detection FSD Database 2D图像 2 数据集简介 The Face and Skin Detection FSD Database is
  • nodejs使用kafka

    什么是卡夫卡 kafka 是一种分布式的 基于发布 订阅的消息系统 消息以消息队列的形式进行发送 如何使用kafka 安装kafka npm i kafka node 配置config 配置kafka的地址和topic 放在config文件
  • 【VQ-VAE论文精读+代码实战】Neural Discrete Representation Learning

    VQ VAE论文精读 代码实战 Neural Discrete Representation Learning 0 前言 Abstract 1 Introduction 提出现有方法的问题并说明有哪些贡献 2 Related Work 提出
  • vue中click无效问题

    当父元素为relative 子元素为absolute时可能会出现click点击无效 无法触发onClick事件的情况 目前已知两种解决方法 1 最外层div的z index层级设置比里面绝对定位的大 2 用 click prevent也是可
  • 【机器学习】特征工程:时间特征构造以及时间序列特征构造(含源代码理解)

    目录 特征工程 时间特征构造以及时间序列特征构造 一 前言 二 特征构造介绍 三 时间特征构造 3 1 连续值时间特征 3 2 离散值时间特征 3 2 1 时间特征拆解 3 2 2 时间特征判断 3 2 3 结合时间维度的聚合特征 四 时间
  • shell浅谈之三for、while、until循环

    一 简介 Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式 有三种常用的循环语句 for while和until while循环和for循环属于 当型循环 而until属于 直到型循环 循环控制符 break和conti
  • 【Redis速通】基础知识2 - 常用数据结构

    Redis 通用指令 下面是一些 Redis 的通用命令 你可以根据下表进行简单的复习 键操作命令 SET 设置指定键的值 GET 获取指定键的值 DEL 删除指定键 EXISTS 检查指定键是否存在 KEYS 获取匹配指定模式的键列表 字