与SQL语句相比,在Redis数据库中使用二级索引

ttygqcqt  于 2022-11-28  发布在  Redis
关注(0)|答案(1)|浏览(154)

我正在使用一个redis数据库,我已经实现了访问redis服务器的Python代码,问题是实现的代码非常复杂,不易维护。
Redis数据库中的二级索引
为了简化问题,我假设在我的数据库中存在一组4键,由以下命令插入:

hset key:1 id 1 field1 1001
hset key:2 id 2 field1 999
hset key:3 id 3 field1 1002
hset key:4 id 4 field1 1000

前面的键集是按id字段排序的,我已经使用Redis文档中的Secondary indexing guide实现了一个二级索引,以获取按field1排序的键列表。
为了做到这一点,根据guide,我通过以下命令在数据库中创建了一个名为zfield1排序集

zadd zfield1 1001 1
zadd zfield1 999 2
zadd zfield1 1002 3
zadd zfield1 1000 4

排序集合zfield1由字段field1排序。
使用命令zrange,我得到了按field1排序的id字段列表:

zrange zfield1 0 -1
1) "2"
2) "4"
3) "1"
4) "3"

通过zrange得到的列表的第一个元素是"2",这个元素提供了获取所有具有较低field1值的键值的信息。因此,通过下面的命令,我可以获取与key:2相关的所有键值:

hgetall key:2
1) "id"
2) "2"
3) "field1"
4) "999"

使用一个执行命令hgetall的合适循环,我可以得到按field1排序的所有键值。

与SQL数据库比较

我认为前面的演示是以下SQL查询的实现(其中TABLE1是通用SQL数据库中的表):

SELECT * from TABLE1 order by field1

这是我第一次使用Redis,如果我把它和SQL查询进行比较,我认为它的使用是SQL数据库中更复杂的方面。所以我怀疑是否有其他更简单的方法来用Redis实现一个SQL查询SELECT * from TABLE1 order by field1

问题

有人可能知道是否有其他Redis命令(例如Redis命令KEYS的特殊用法)可以帮助获得按二级索引排序的键?

**注:**也欢迎提供有关此主题的有用链接。

q3qa4bjr

q3qa4bjr1#

这是我第一次使用Redis,如果我把它和SQL查询进行比较,我认为它的使用是SQL数据库的更复杂的方面
事实上,Redis的主要目标是性能,它的数据结构和命令都是基于这一点设计的。Redis中没有原生二级索引,因为保留一个二级索引的成本是不可忽略的:事实上,the guide you referenced展示了一种模式,你可以用它来 * 模仿 * 一个数据库,因为它使用的数据类型只是一个排序集--这是Redis生态系统中的第一个公民。
如果你想在Redis中使用多个索引,那么我建议你在创建/修改/删除主键的同时创建和维护多个键(使用前面提到的排序集合数据类型就可以了)。

相关问题