我想在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名和排序等等。
答案 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对此有好处。