如何在redis中存储多个字段,并根据某些字段

时间:2017-12-16 07:23:35

标签: python csv redis

我想在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名,最低10名和排序等等。

1 个答案:

答案 0 :(得分:1)

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

  

ZADD打开1372 50002

它会将密钥50002添加到设置为“open”的分数1372。那你可以

  

ZRANGE打开0 9

  

ZREVRANGE打开-10 -1

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

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