Redis 和查询值

2023-11-26

Redis 在概念上与我使用的传统 SQL 数据库不同,我试图弄清楚它是否适合我的项目......我一直在四处寻找,但似乎找不到我的问题的答案。

我需要存储一组用户,每个用户都有一个唯一的 ID 和多个与其关联的值(例如他们的姓名)。看来我可以简单地将它们存储为哈希:

user:fef982dcfe1a7bcba4849b4c281bba95
"username" "andrewm" "name" "Andrew"

我还想存储一堆消息,每条消息都有一些属性,例如发件人和收件人:

message:1a7bcba4849b4c281bfef98a952dcfeb
"sender" "fef982dcfe1a7bcba4849b4c281bba95" "recipient" "82dcfe1a7bcba4849b4c281bba95fef9" "message" "Hi!"

我的问题是,我将如何检索特定用户(由其哈希指定)发送的所有消息。我应该使用传统的关系数据库,还是像 MongoDB(我以前用过)这样的 NoSQL 数据库?如果是这样,有人对高性能商店有什么建议吗?我不会做任何真正的搜索(即 MySQLLIKE查询)——实际上只是键值查找。


当然可以使用 Redis 对这些数据进行建模,但您需要考虑数据结构和访问路径。使用 Redis,访问路径不会被隐式管理(就像 RDBMS/MongoDB 中的索引一样)。

对于提供的示例,您可以:

user:<user hash> -> hash of user properties
user:<user hash>:sent -> set of <msg hash>
user:<user hash>:received -> set of <msg hash>
message:<msg hash> -> hash of message properties

添加/删除消息意味着除了添加/删除消息对象本身之外,还要维护与发送者和接收者相对应的 *:sent 和 *:received 集。

检索给定用户发送或接收的消息只是一个 SMEMBERS 命令,如果您想同时检索消息的属性,则可以使用 SORT 命令:

# Get a list of message hash codes only in one roundtrip
smembers user:<user hash>:received

# Get a list of message contents in one roundtrip
sort user:<user hash>:received by nosort get message:*->sender get message:*->message

有关使用排序的基本原理,请参阅:

  • 从Redis获取多个键值
  • 需要 Redis/NoSQL 概念化方面的帮助

Note 1:对于 Redis,最好使用整数作为键,而不是 UUID 或哈希码(尤其是在集合中),因为它们以更有效的方式存储。

Note 2:如果您需要对消息进行排序,则必须使用列表而不是集合。结果是只能删除最旧的消息,并且只能以有效的方式添加新消息。您可能还需要为所有消息添加一个全局列表。

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

Redis 和查询值 的相关文章

  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • redis dump.rdb / 保存小文件

    Context 我正在使用redis 数据库小于 100 MB 但是 我想进行每日备份 我也在 Ubuntu Server 12 04 上运行 当输入 redis cli save 我不知道 dump rdb 保存到哪里 因为 redis
  • 为什么Redis中没有有序的hashmap?

    Redis 数据类型 http redis io topics data types包括排序集 http redis io topics data types intro sorted sets以及其他用于键值存储的必要数据结构 但我想知道
  • 当 Jedis 与 Spring Data 一起使用时,为什么数据会以奇怪的键存储在 Redis 中?

    我将 Spring Data Redis 与 Jedis 一起使用 我正在尝试存储带有密钥的哈希值vc list id 我能够成功插入到redis 但是 当我使用 redis cli 检查密钥时 我没有看到密钥vc 501381 相反我看到
  • Spring Data Redis 覆盖默认序列化器

    我正在尝试创建一个RedisTemplatebean 将具有更新的值序列化器来序列化对象JSONredis 中的格式 Configuration class RedisConfig Bean name redisTemplate Prima
  • 使用环境变量在 redis.conf 中设置动态路径

    我有一个环境变量MY HOME其中有一个目录的路径 home abc 现在 我有一个redis conf文件 我需要像这样设置这个路径 redis conf pidfile MY HOME local var pids redis pid
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • 在redis中存储多个嵌套对象

    我想在redis中存储多个复杂的json数据 但不知道如何 这是我的 json 结构 users user01 username ally email email protected cdn cgi l email protection u
  • 如何通过ARM模板输出返回Redis的primaryKey?

    我正在尝试借助下面列出的 ARM 模板来部署 Redis 然后返回其主密钥 Azure 门户中 Redis 的 访问密钥 gt 主 下可用的秘密字符串 但是 我从管道 AzureResourceManagerTemplateDeployme
  • ServiceStack PooledRedisClientManager 故障转移如何工作?

    根据 git commit 消息 ServiceStack 最近添加了故障转移支持 我最初认为这意味着我可以关闭我的一个 Redis 实例 并且我的池客户端管理器将优雅地处理故障转移并尝试与我的备用 Redis 实例之一连接 不幸的是 我的
  • 为什么我们需要 Redis 来运行 CKAN?

    我想知道为什么我们需要 Redis 服务器来运行 CKAN 如果需要 为什么 我如何使用 CKAN 配置它 附注 我正在 RHEL7 中运行我的 ckan 实例 Update Redis 已成为一项要求从CKAN 2 7开始 https d
  • nginx/uwsgi 服务器的持久内存中 Python 对象

    我怀疑这是否可能 但这是问题和提出的解决方案 提出的解决方案的可行性是这个问题的对象 我有一些需要可用于所有请求的 全局数据 我将这些数据保存到 Riak 并使用 Redis 作为缓存层以提高访问速度 目前 数据被分为约 30 个逻辑块 每
  • 在 Rails 应用程序上将 HASH 保存到 Redis

    我刚刚开始使用 Redis 和 Rails 所以这可能是一个愚蠢的问题 我试图将哈希值保存到 Redis 服务器 但是当我检索它时 它只是一个字符串 IE hash field gt value field2 gt value2 redis
  • redis能完全取代mysql吗?

    简单的问题 我是否可以使用 redis 而不是 mysql 来处理各种 Web 应用程序 社交网络 地理位置服务等 IT 领域没有什么是不可能的 但有些事情可能会变得极其复杂 将键值存储用于全文搜索之类的事情可能会非常痛苦 另外 据我所知
  • Redis - 错误:值不是有效的浮点数

    我在 Redis 中有一个排序集 我试图通过在Python代码中使用zincrby来更新特定元素的计数器值 例如 conn zincrby usersSet float 1 user1 但它显示错误为 错误 值不是有效的浮点数 我在 cli
  • 如果没有过期的内容,Redis maxmemory-policy volatile-lru 是否会被驱逐?

    我有一个 redis 服务器 设置了maxmemory policy set to volatile lru 文档表明 当达到内存限制时 这将从设置过期的条目集中逐出 在这种情况下 redis 是否只驱逐过期的项目 如果内存中的所有内容都设

随机推荐

  • 使用 Swift 在 iOS 中远程控制事件

    试图弄清楚如何读取Apple耳机的音量按钮以用作相机快门的触发器 就像Apple相机应用程序那样 从文档上远程控制事件 随事件接收远程控制 and 这个 git 仓库 我拼凑出我可能需要一个AVAudioPlayer目的 beginRece
  • 如何从 Google Analytics 4 获取视图 ID?

    我尝试从 GA Google Analytics 检索有关我的网站的所有信息 我正在使用 laravel 和这个包https github com spatie laravel analytics让我的生活更轻松 然而 该软件包需要 GA
  • Pandas,groupby,其中列值大于 x

    我有一张这样的桌子 timestamp avg hr hr quality avg rr rr quality activity sleep summary id 1422404668 66 229 0 0 13 78 1422404670
  • 使用 GDT 保护模式下的汇编器跳转

    我目前正在使用 x86 Assembler 以提高我的低级编程技能 目前 我在 32 位保护模式下的寻址方案遇到了一个小问题 情况如下 我在 0x7e0 加载了一个程序 它将 CPU 切换到保护模式并跳转到代码中的相应标签 code to
  • 如何在 JavaScript 中获取输入文本值

    如何在 JavaScript 中获取输入文本值
  • Lucene 和特殊字符

    我正在使用 Lucene Net 2 0 来索引数据库表中的某些字段 其中一个字段是允许使用特殊字符的 名称 字段 当我执行搜索时 它没有找到包含特殊字符术语的文档 我这样索引我的字段 Directory DALDirectory FSDi
  • 角材料步进器在每次点击时动态添加新的步骤项目

    我在我的项目中使用有角度的材料 我想在每次点击时添加额外的步进器项目 mat step addItem button 我在这里创建了一个笨蛋 https stackblitz com edit angular enmq1z file app
  • 不重复 N 个元素的组合,不使用 for..to..do

    我想在列表中加载 N 个数字的组合而不重复 从而输入元素和组 例如 对于 4 个元素 1 2 3 4 我有 Group 1 1 2 3 4 Group 2 1 2 1 3 1 4 2 3 2 4 3 4 Group 3 1 2 3 1 2
  • mysql 查询 - 插入数据 unix_timestamp ( now ( ) ) 问题

    我有一个 INT 11 列 用于存储当前时间戳 以秒为单位 查询如下所示 INSERT INTO abc id timestamp VALUES UNIX TIMESTAMP NOW 不知道为什么 日期没有改变 当我发送查询时 列值没有改变
  • 在 Prometheus/PromQL 中合并/连接两个指标

    我有两个不同的 但相关的指标 metric 1 id abc id2 def metric 2 id abc id2 def 我的最终目标是在 Grafana 中实现以下功能 我计划使用 即时 值和 Grafana 的表格可视化小部件来显示
  • 土耳其语字符编码

    我尝试从不同的列表项创建新句子 当我用 unicode 打印它时 它给出错误 我可以正常打印 没有unicode 当我尝试将其发布到网站时 它出现了同样的错误 我认为如果我可以用 unicode 修复它 那么当我将其发布到网站时它就会起作用
  • 在 64 位计算机上使用 C# 和“BUILD x86”访问注册表

    我有一个应用程序 用 C 编写 在 Windows Server 2008 64 位 上运行 在此应用程序中 我必须检查一些有关 IIS 的注册表项 除其他外 我想访问密钥HKEY LOCAL MACHINE Software Micros
  • UnknownEntityTypeException:无法找到持久化器

    我想在 Wildfly 上使用 JPA 和 Spring 我尝试了这个配置 应用程序属性 spring jmx enabled false spring datasource jndi name java global production
  • 如何从 shell 检测 Mac OS X 中的当前区域设置

    我需要从命令行检测 OS X 中的当前区域设置 在 Linux Unix 上 我可以依赖 LANG 但并不总是设置它 http henrik nyh se 2007 10 displaying utf 8 Correctly in leop
  • 这两个查询是否相同 - GROUP BY 与 DISTINCT?

    这两个查询似乎返回相同的结果 这是巧合还是它们真的是一样的 1 SELECT t ItemNumber SELECT TOP 1 ItemDescription FROM Transactions WHERE ItemNumber t It
  • Android 自定义键盘 - 预览视图受限于父布局

    我创建了一个自定义键盘 它工作正常 除了顶部两行按键的预览视图显示得不够高 它们的垂直位置受到父布局的限制 这些屏幕截图说明了问题 0 和 8 的预览位置很好 但对于 5 和 2 则不然 键 0 的预览显示在按钮上方 键 8 的预览也显示在
  • 设备管理接收器在某些版本中无法工作

    我正在开发一款安全应用程序 可以保护设备免受陌生人的侵害 在我的应用程序中 如果用户尝试使用错误的 PIN 图案 密码解锁设备 我有一个功能应该从前置摄像头捕获图像 我有一个类似这样的代码 public class MyAdminRecei
  • 在 cython 中生成高斯随机数的最有效和可移植的方法是什么?

    我正在编写一个 cython 应用程序 我需要在紧密的嵌套循环中动态生成高斯随机变量 我希望在不引入任何额外依赖项 例如 GSL 的情况下执行此操作 对于我目前能够做到这一点的最小版本均匀随机即时数字 from libc stdlib ci
  • 带连接的 Codeigniter 活动记录更新语句

    这是我试图通过活动记录实现的查询 UPDATE Customer donations cd join Invoices i on i cd id cd cd id set cd amount 4 cd amount verified 1 W
  • Redis 和查询值

    Redis 在概念上与我使用的传统 SQL 数据库不同 我试图弄清楚它是否适合我的项目 我一直在四处寻找 但似乎找不到我的问题的答案 我需要存储一组用户 每个用户都有一个唯一的 ID 和多个与其关联的值 例如他们的姓名 看来我可以简单地将它