如何在redis中存储多个字段,并根据某些字段获得前10个结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在redis中存储多个字段,并根据某些字段获得前10个结果相关的知识,希望对你有一定的参考价值。

我想从redis文件中存储CSV中的多个字段

我的file.CSV看起来很像。

SC_CODE,SC_NAME,OPEN,HIGH,LOW,CLOSE,
500002,ABB LTD.,1372,1372.40,1339.95,1348.45,
500003,AEGIS LOGIS,275.00,275.00,261.50,266.70,
500008,AMAR RAJA BA,787.00,788.00,768.05,771.85,

我编写了以下代码将数据插入redis。

import csv
with open('file.CSV', 'r') as csvfile:
    csvReader = csv.reader(csvfile)
    next(csvReader)
    for row in csvReader:
        print ('HMSET {} open {} other "{},{},{},{}"
'.format(row[0], row[2], row[1], row[3], row[4], row[5]))

我正在运行:python redis.py | redis-cli --pipe

这基本上意味着在redis-cli

HMSET 500002 open 1372 other "ABB LTD.,1372.40,1339.95,1348.45"

但我不知道如何根据上面的不同领域获得前十大股票。所以我想得到前10名,最低10名和排序等等。

答案

你不能仅仅通过在键空间中放入哈希来做到这一点;在redis中,您必须维护自己的数据结构,以适合您想要执行的每种查询。在前N个查询的情况下,正确的数据结构是一个有序集(redis中的Z命令)。例如,如果你

ZADD开放1372 50002

它会将关键50002添加到“开放”集合中,得分为1372。然后你可以

ZRANGE开放0 9

要么

ZREVRANGE开-10 -1

根据他们在“开放”中设置的得分来获得底部10或前10个键。 (添加WITHSCORES标志使查询返回分数和键)。排序集也支持ZRANGEBYSCORE来获取两个值之间的所有键,等等...查看文档了解更多!

如果你为每个想要查询的列维护一个这样的集合,那么你可以做你想要的事情。您仍然可以使用哈希值将每个对象的所有详细信息存储在一个位置,以便在找到ID后可以通过ID查找它。 HMGET对此有好处。

以上是关于如何在redis中存储多个字段,并根据某些字段获得前10个结果的主要内容,如果未能解决你的问题,请参考以下文章

请教各位,如何获得redis中key的已经存在的时间

如何使用 NodeJS 仅将 NeDB 数据库中的某些字段存储到数组中

如何根据多个by-record标准从data.table中提取特定字段?

我们如何使用文件系统中的某些动态字段搜索存储在 zip 文件中的 xml 文件?

如何在 MySQL 的某个范围内获得结果,其中某些字段有字母?

如何从子查询中的 2 个或多个字段中获取最大值