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

问题描述 投票:0回答:1

我想从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 \"{},{},{},{}\"\r'.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名和排序等等。

python csv redis
1个回答
1
投票

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

ZADD开放1372 50002

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

ZRANGE开放0 9

要么

ZREVRANGE开-10 -1

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

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

© www.soinside.com 2019 - 2024. All rights reserved.