当前位置: 首页 > 面试题库 >

Redis中的高效索引类型操作

胡俊贤
2023-03-14
问题内容

我正在尝试在Redis中创建一组索引,以进行AND操作。

像这样:

inx:haircolor:金发=设置(key1,key2,key3)
inx:eyecolor:blue =设置(key1,key2)

而且我可以sinter用来查找所有金发和蓝眼睛的钥匙。

我有这样的哈希:

key1:名称=瑞克发色=金发眼色=蓝色

获取结果密钥并检索匹配的哈希值的最快方法是什么。

这只是演示数据,以使其更易于理解,我正在使用它来存储分析数据,并且我需要进行一些大型的键查找。

我可以想到的2个选项是流水线多获取+ exec或使用Lua脚本来避免通过网络发送一堆密钥。

如果有更好的方法来存储对象数据并对其进行索引,或者是一种有效的方法来提取所有这些哈希值而无需通过网络发送一堆ID,请填写我的信息!

编辑

我最终使用了LUA脚本(使用redis脚本分支)

local fkeys = redis.call('sinter', unpack(KEYS))
local r = {}
for i, key in ipairs(fkeys) do
  r[#r+1] = redis.call('hgetall',key)
end
return r

这将所有处理保留在数据库端。


问题答案:

获取键列表然后执行一些操作以获取值几乎是处理此问题的唯一方法。对于实验性的Lua脚本,它看起来确实是一个很好的用例,尽管没有它,您可能也可以相当有效地获得密钥-
在看到实际的性能问题之前,数字必须非常大。

您可能还可以进行其他优化,可以使用临时或排序集,也可以仅从每个哈希中检索单个相关属性,但是这些优化在很大程度上取决于您尝试检索的数据类型。



 类似资料:
  • 下面是一个常见的 JavaScript 函数,实现从一个对象中选取指定属性,得到它们的属性值: function pluck(o, names) { return names.map(n => o[n]) } 实现这样一个函数的类型定义要满足: 数组参数 names 中的元素,只能是对象 o 身上有的属性。 返回类型取决于参数 o 身上属性值的类型。 我们可以通过索引类型实现这样的类型定义。

  • PostgreSQL 提供了多种索引类型:B 树、hash、GiST 和 GIN,每种索引类型都有适合的应用场景,可以根据场景选择合适的索引以提高效率。 B 树 B 树适合相等判断和有序的区间查询,通常来说,经常使用这些查询时推荐使用 B 树索引: <、>、<=、>= 以及 =。 此外,对于判断字符串开头的 LIKE 和 ~ 查询也可以考虑使用 B 树索引。比如: col LIKE 'foo%'

  • 无论建立主键索引还是普通索引,都要在表的对应列上创建,可以对单列创建索引,也可以对多列创建索引。 创建和删除主键索引 查询数据库,按主键查询速度最快的,每个表只能有一个主键列,但是可以有多个普通索引列。主键列要求列的所有内容必须唯一,而索引列不要求内容必须唯一。 在建表的时候指定(如上述典型建表语句) 建表后通过alter命令增加、删除主键索引 mysql> alter table app_mem

  • 按照文档的规范示例,假设我想在elasticsearch中存储推文,但我想指定一个处理两个以上字段的endpoint,例如。 在本例中,我想在推特上建立索引,但也要在推特句柄和月份上建立索引,包括推特类型和id。 这是可能的,还是唯一可能的映射类似于他们提供的东西,一个和一个,例如?

  • 本文向大家介绍Redis中五种数据类型简单操作,包括了Redis中五种数据类型简单操作的使用技巧和注意事项,需要的朋友参考一下 Redis中五种数据类型简单操作 提出问题 Redis五种数据类型的简单增删改查命令??? 解决问题 假设你已经安装Redis服务器; 假设你已经打开Redis cli命令行工具; 假设你对Redis有所了解; Redis简单增删改查例子 例一:字符串的增删改查 例二:S

  • 主要内容:1 索引扫描排序,2 索引下推,3 压缩(前缀压缩)索引,4 重复、冗余索引和未使用的索引,5 常见索引失效情况,6 三星索引详细介绍了各种高性能的索引使用策略,比如索引排序、索引下推、压缩索引等等,以及常见索引失效的情况。 前面我们已经介绍了各种类型的索引结构及其对应的优缺点: BTREE索引的数据结构以及具体实现原理深入解析 哈希索引的数据结构以及索引的优缺点 正确的创建和使用索引是实现高性能查询的基础。我们通常会看到一些查询不当的使用索引,或者使用MySQL无法使用已有的索引,下