为什么Redis中没有有序的hashmap?

2024-05-15

Redis 数据类型 http://redis.io/topics/data-types包括排序集 http://redis.io/topics/data-types-intro#sorted-sets以及其他用于键值存储的必要数据结构。但我想知道为什么它没有像 Java 那样的排序映射TreeMap或 C++ 的std::map。我认为底层数据结构与排序集大部分相似,因为两者都应该是平衡的二叉搜索树。

肯定有一些用例,我们必须根据键以特定顺序存储键值对。但当前的排序集仅用于根据分数存储键的目的。


一定有一些用例,我们必须根据键以特定顺序存储键值对

由于 Redis 键是二进制字符串,我假设您提到的特定顺序是字典顺序(具体来说,键与memcmp功能)。在这种情况下,您可以轻松地实现 C++ 的std::map with SORTED SET。您可以通过 2 个步骤实现此目的:

使用 Redis 的有序集构建 std::set

如果a中有2个元素SORTED SET如果分数相同,则按字典顺序排列。所以为了建立一个std::set,只需给所有成员一个SORTED SET相同分数:

zadd std::set 0 c
zadd std::set 0 a
zadd std::set 0 b

// since all these members have the same score,
// the result is lexicographical ordered:
// a b c
zrange std::set 0 -1

// the following command will fail, since 'c' already exists.
zadd std::set 0 c

从 Redis 2.8 开始,它支持一些命令 http://redis.io/topics/data-types-intro#lexicographical-scores对字典范围进行操作,这样你就可以构建类似的东西std::set::lower_bound, or std::set::upper_bound

// something similar to lower_bound: find all members not less than b
zrangebylex std::set [b +
// something similar to upper_bound: find all members greater than b
zrangebylex std::set (b +

将集合中的每个键映射为一个值

既然你已经得到了std::set,然后将键与值映射,可以得到std::map.

set a value_a
set b value_b
set c value_c

将这 2 个步骤结合在一起

您可以将整个工作包装到 lua 脚本中以得到built-in std::map。并像这样使用它:

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

为什么Redis中没有有序的hashmap? 的相关文章

随机推荐

  • Python - 不使用复制模块的深度复制

    本质上 问题是创建一个函数 deepcopy L 它将返回列表 L 的深层副本 但是 我们被告知不要使用 copy 模块或其中的任何函数 我是入门课程的初学者 老实说我在这方面很挣扎 我们真正被告知的唯一一件事是我们应该使用递归来解决问题
  • 使用 VBA 通过简单命令从非连续范围的并集获取值到数组中(无循环)

    我有以下任务 表面上很简单 使用 VBA 将电子表格上多个列的值复制到二维数组中 为了让生活更有趣 这些柱子并不相邻 但它们的长度都相同 显然 可以通过依次循环每个元素来做到这一点 但这看起来非常不优雅 我希望有一个更紧凑的解决方案 但我很
  • Powershell日期类型无法找到

    我正在尝试使用PowerShell连接virustotal API 代码来自virustotal网站 我得到 无法找到类型 System Security Cryptography ProtectedData 错误信息 代码如下 funct
  • 使用 Retrofit 2 解析 XML

    我试图从央行获取汇率 不幸的是他们没有可以提供 JSON 数据的 api 仅在 XML 中 我正在使用 Retrogit 2 我已经创建了两个类 它们描述了我从网站获得的 xml 但是当我尝试获取回调的响应时 我收到了 404 错误代码 也
  • Elastic Search 启动错误 - “\Common 此时出现意外。”

    我已经下载并解压了elasticsearch 当我运行批处理文件 elasticsearch bat 时 出现以下错误 Common was unexpected at this time Solved 通过编辑 bat 文件的第 46 行
  • 在SwiftUI中,如何高性能地绘制阴影?

    我用 shadow color radius x y 在我的应用程序中绘制阴影 这是我所知道的在 SwiftUI 中绘制应用程序的唯一方法 我用 sheet isPresented content 方法弹出一个视图 其中包含很多阴影 当我调
  • 为什么“finally”中的 return 会覆盖“try”?

    try catch 块中的 return 语句如何工作 function example try return true finally return false 我期望这个函数的输出是true 但相反它是false Finally alw
  • App 对象中的 Log4Net?

    我正在开始在 WPF 桌面应用程序中进行日志记录 使用 Log4Net 作为日志记录组件 这是我的问题 在一个简单的桌面应用程序中 是否有任何理由不将我的记录器实例化为 App 类 App xaml cs 的属性 就像这样 public p
  • 如何在 Oxyplot 中显示折线图的绘图点?

    这是我的图表的 xaml 代码
  • Meteor 更新卡在下载包中

    我正在尝试更新到 Meteor 1 2 但是当我运行 Meteor update 时 它 开始运行并到达 Downloading 8 packages 然后旋转器就停止了 这样持续了20分钟左右 我尝试过退出该过程并再次启动它 但结果相同
  • 显示器连接或断开连接时的通知

    我正在开发一个 OS X 应用程序 该应用程序在所有连接的显示器的所有可用空间上显示自定义窗口 我可以通过调用 NSScreen Screens 获取可用显示对象的数组 我目前缺少的是一种判断用户是否将显示器连接到系统或从系统断开屏幕的方法
  • CakePHP - 选择性 SSL

    如何对网站的某些部分强制使用 HTTPS 例如登录页面或注册页面 并使用 HTTP 来完成网站的其余部分 我最喜欢的强制转换为 https 的方法是将其作为 php 脚本中的第一件事 它可以在 Joomla 中运行 也可以在 CakePHP
  • “ActionBarDrawerToggle”何时显示其“openDrawerContentDescRes”和“closeDrawerContentDescRes”字符串?

    背景 ActionBarDrawerToggle 的CTOR是这样的 public ActionBarDrawerToggle Activity activity DrawerLayout drawerLayout int openDraw
  • 满足条件时终止所有进程

    我正在使用星图来运行测试功能 当进程首次找到排列 5 2 4 3 1 时 终止所有进程的最佳 最安全方法是什么 import multiprocessing as mp import time def testing lts code st
  • Doctrine 装置如何覆盖 purger 类?

    From doctrine fixture bundle the console doctrine fixtures load n命令定义如下 https github com doctrine DoctrineFixturesBundle
  • 对话框动画被 webview 弄乱了:android bug?

    我制作了一个带有 进入 和 退出 慢速动画的对话框 但对话框包含一个 webviewmyMsg 加载本地文件 因此没有延迟 并弄乱了动画 使用下面的代码 无 Web 视图 对话框可以完美运行 在 Enter 和 Exit 时都具有动画效果
  • 如何从 Neo4j 服务器插件登录?

    我正在尝试调试我正在编写的 Neo4J 服务器插件中的问题 有可以输出的日志吗 在哪里或如何执行此操作并不明显 好问题 我想你可以使用 Java 日志记录吗 这应该被路由到正常的日志系统中
  • Javascript Date.parse 以破折号分隔并以年份开头时的错误

    我正在寻求确认这是否是真正的文档和 或 Javascript 的 Date parse 方法的实现错误 我所指的文档位于https developer mozilla org en JavaScript Reference Global O
  • Jquery Draggable()、clone() 附加 div...请拨动我的 jsfiddle

    UPDATE http jsfiddle net wJUHF 7 http jsfiddle net wJUHF 7 对于任何可能阅读本文的人来说 这是更新且有效的小提琴 我正在努力让这个小提琴发挥作用 这就是问题所在 我可以将图像拖到容器
  • 为什么Redis中没有有序的hashmap?

    Redis 数据类型 http redis io topics data types包括排序集 http redis io topics data types intro sorted sets以及其他用于键值存储的必要数据结构 但我想知道