Redis 排序集和解决关系

2024-04-26

我正在使用 Redis 排序集来存储我正在处理的项目的排名。我们没有预料到(!)我们想要如何处理关系。 Redis 按字典顺序对具有相同分数的条目进行排序,但我们想要做的是对具有相同分数的所有条目给予相同的排名,例如在以下情况

redis 127.0.0.1:6379> ZREVRANGE foo 0 -1 WITHSCORES
1) "first"
2) "3"
3) "second3"
4) "2"
5) "second2"
6) "2"
7) "second1"
8) "2"
9) "fifth"
10) "1"

我们想考虑second1, second2 and second3因为两者都具有位置 2,并且fifth拥有位置 5。因此,第三或第四位置没有条目。ZREVRANK在这里没有用,那么获得我正在寻找的号码的最佳方法是什么?


在我看来,一种方法是编写一个小 Lua 脚本并使用EVAL命令。结果运算仍然具有对数复杂度。

例如,假设我们对以下职位感兴趣:second2。在脚本中,首先我们得到它的分数ZSCORE,获得 2。然后我们使用该分数获得第一个条目ZRANGEBYSCORE,得到second3。我们所追求的位置就是ZREVRANK of second3 plus 1.

redis 127.0.0.1:6379> ZSCORE foo second2
"2"
redis 127.0.0.1:6379> ZREVRANGEBYSCORE foo 2 2 LIMIT 0 1
1) "second3"
redis 127.0.0.1:6379> ZREVRANK foo second3
(integer) 1

所以脚本可能是这样的

local score = redis.call('zscore', KEYS[1], ARGV[1])
if score then
  local member = redis.call('zrevrangebyscore', KEYS[1], score, score, 'limit', 0, 1)
  return redis.call('zrevrank', KEYS[1], member[1]) + 1
else return -1 end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 排序集和解决关系 的相关文章

  • Redis 块推送直到列表有空位

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

    我使用 json dumps 创建了一个 JSON 对象 并在 Redis 列表中将其 RPUSH ed 当使用 LRANGE redis lrange 返回 JSON 时 我收到一个二进制字符串 b si 00 ff 所以 json lo
  • Stackexchange.redis 缺乏“WAIT”支持

    我在客户端应用程序正在使用的负载均衡器后面有 3 个 Web API 服务器 我正在使用这个库来访问具有一个主服务器和几个从服务器的 Redis 集群 目前不支持 WAIT 操作 我需要此功能来存储新创建的用户会话并等待它复制到所有从属服务
  • 如何在多个Lua State(多线程)之间传递数据?

    我在中启动Redis连接池redis lua 通过从 C 调用 我得到了redis lua state 此 Lua 状态全局启动一次 仅在其他线程中启动get从中 当有一个 HTTP 请求 工作线程 时 我需要从redis lua stat
  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 循环直到在表中找到 2 个特定值?

    我试图找到一种更聪明的方法来解决这个问题 这是与游戏相关的代码的摘录 它循环遍历每个背包的每个插槽 直到找到铲子和绳子 local continue local foundShovel foundRope for i 0 Container
  • Lua 中的内联条件(a == b ? "yes" : "no")?

    无论如何 Lua 中可以使用内联条件吗 Such as print blah a true blah nahblah Sure print blah a and blah or nahblah
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • 如果另一个键中的计数器低于零,则从集合中原子删除一个项目?

    雷迪斯2 0 3 在我的 Redis DB 中 我有一组项目 每个项目都有一个与其关联的计数器 MULTI SADD items set foo INCRBY items foo 10000 EXEC 新项目会以随机间隔添加到集合中 当用户
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • lua http套接字超时

    LuaSocket HTTP 模块文档说可以在 HTTP 连接上设置超时 可以设置以下常量来控制 HTTP 模块的默认行为 PORT 用于连接的默认端口 PROXY 用于连接的默认代理 TIMEOUT 设置所有I O操作的超时时间 USER
  • 如何将 ActionController::Live 与 Resque + Redis 一起使用(用于聊天应用程序)

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

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点
  • 在lua中组合两个函数

    我刚开始学习lua 所以我的要求可能是不可能的 现在 我有一个接受函数的方法 function adjust focused window fn local win window focusedwindow local winframe w
  • SignalR 无法连接到 SSL 上的 Azure Redis

    我目前在 Azure 上托管我的 redis 缓存服务器 并让 signalR 依赖它作为骨干 使用以下内容 GlobalHost DependencyResolver UseRedis 服务器 端口 密码 eventKey 这可以在端口
  • 使用Redis从有限范围内生成唯一ID

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

随机推荐

  • 如何获取 CakePHP 3.0 中最后一个插入 ID?

    使用 CakePHP 3 0 beta 似乎是一个简单的问题 但我搜索了文档但找不到任何东西 使用 this gt Model gt save 插入新记录后 我想获取新创建记录的 auto increment 主键 ID 使用 Cake 2
  • 使用 ALT+TAB 切换程序/窗口或单击任务栏时不会触发 VisibilityChange 事件

    问题在于事件 visibilitychange 的行为 已触发 当我切换到浏览器窗口内的不同选项卡时 当我单击浏览器窗口的最小化 恢复按钮时 还行吧 它没有被触发 当我使用 ALT TAB 切换到不同的窗口 程序时 当我切换到不同的窗口 程
  • 有没有办法将 spring boot 与 tcps 连接到数据库?

    我正在使用 Oracle 数据库 12c 和带有数据 JPA 的 Spring Boot 2 3 我的目标是连接钱包并将 TCPS 发送到数据库 当我搜索时 网上没有这方面的示例或指南 任何人都可以解释并举一些例子吗 如何从 Java 连接
  • Laravel 5 - 永远保持登录状态

    我想放入login页面选中 保持登录状态 复选框 除非用户注销 否则永远不应该结束用户的会话 我知道在 app config session php 中有这些变量 lifetime gt 60 expire on close gt fals
  • 从 boto3 调用 AWS Glue Pythonshell 作业时出现参数错误

    基于上一篇文章 https stackoverflow com questions 58044032 retrieving s3 path from payload inside aws glue pythonshell job 58044
  • NodeJS 连接到 SQL Server getaddrinfo ENOTFOUNT

    我正在尝试使用 Knex js 连接到 Microsoft SQL Server 但收到 getaddrinfo ENOTFOUND 我知道这表明 NodeJS 无法解析地址 通常是通过 DNS 或协议问题 const knex requi
  • 离线世界卫星地图无标签(Android)

    我想在我的应用程序中包含 MapView 我已经尝试了一下 Google Api 它运行得很好 但现在我想要一张完全离线的地图 我知道有很多可能性可以做到这一点 问题是我想要一张没有任何标签的世界地图 例如国家名称 州名称 城市名称等 我只
  • 如何在我的 django 视图函数中从 Ajax POST 获取数据?

    document ready function addFolder input keydown function e if e keyCode 13 name this val ajax type POST url folder data
  • ie7 中的 JQuery Event.target 问题

    尝试从 event target 对象访问类名 适用于 FF Safari 和 Chrome InternetExplorer 7 警告 未定义 有什么建议么
  • Apache Poi:获取 DOC 文档中的页数

    如何使用 Apache Poi 获取 DOC 文档中的页数 我尝试使用以下代码 HWPFDocument wordDoc new HWPFDocument new FileInputStream lowerFilePath Integer
  • 我如何获得 NSDictionary/NSMutableDictionary 的原始顺序?

    我已经创建了带有 10 个键的 NSMutableDictionary 现在我想按照添加到 NSMutableDictionary 的顺序访问 NSMutableDictionary 键 使用 SetValue forKey 我怎样才能做到
  • 下载使用 MVC5 选择的多个文件

    我正在 MVC5 中开发一个视图 如下所示 我需要选择表中的一条或多条记录 并能够下载数据库中以前保存的文件 我一直在寻找解决方案并做了多次测试 但我找不到解决方案 我试图从 javascript 将选定的代码发送到控制器并从中下载文档 但
  • 在我的 angular-cli 项目中从 node-sass 切换到 dart sass

    我在 npm install 期间遇到了 node sass 做各种愚蠢的问题 包括但不限于 GNU c 编译一些东西 可能是它本身 尝试运行python2 7 尝试运行任何其他版本的 python 尝试连接到github 这在企业环境中造
  • XSD 属性 NILLABLE 不起作用

    我正在努力获取一个 xml 文件来根据 XSD 架构进行验证 但我在验证时遇到了问题 每次我验证时都会收到错误消息 架构有效性错误 元素 http services website com ProgramResponse Populatio
  • 如何根据当前位置设置正确的纬度和经度

    我的目标是使用 Google Places API 进行自动完成预测 现在我想制作某种算法 该算法将采用当前位置的纬度和经度 并仅对直径为 100 200 公里的地点进行预测 那么 此时我获取用户当前位置的纬度和经度 如何设置100 200
  • 龙目岛与休眠

    这可能吗 没有看到太多关于它的讨论 当然 根据我的经验 它效果很好 这是一个示例实体 Entity Cache usage CacheConcurrencyStrategy READ WRITE public class PingerEnt
  • 避免 JSF Web 应用程序上的后退按钮

    我正在显示非常敏感的数据 用户从我的服务器注销后 我不希望其他用户能够看到点击浏览器后退按钮的数据 我怎样才能实现这个目标 默认情况下 浏览器的后退按钮根本不会向服务器发送 HTTP 请求 相反 它从浏览器缓存中检索页面 这本质上是无害的
  • 如何显示信息窗口而不显示谷歌地图中标记的图标

    我可以只显示谷歌地图中的信息窗口吗 我正在使用 Google Map 的 V2 api 开发 Android 应用程序 我想在信息窗口中显示路线信息 但不想显示标记图标 那么信息窗口可以与标记分开吗 如果是这样 我怎样才能在隐藏标记的同时只
  • 在 $stateProvider.state 中分配多个控制器

    对于高级角度用户来说 这可能是一个简单的问题 但我没有在某个地方找到这个问题得到很好的解释 所以我正在重构我的代码 当我意识到一个视图中有两个控制器时 当控制器 ACtrl 由 stateProvider 绑定并且控制器 BCtrl 由 n
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127