我正在想办法对redis列表进行排序。此列表包含[X,Y]值的列表。我想按X升序排序。
我的一个问题是,如果元素首先是字符串,我只能弄清楚如何添加到redis列表中,所以我
json.dumps()
在将每个列表添加到redis之前:
for i in some_loop:
redis_json_str = json.dumps(
[
unix_time_millis(time), # <--- Need to sort on this, ascending
str(algorithm_value)
]
)
# Then I add it to redis (and trim it after to only keep the 50th "freshest" values)
rds.rpush("alg-" + str(algorithm_parameter.id), redis_json_str)
rds.ltrim("alg-" + str(algorithm_parameter.id), -50, -1)
价值观
redis_json_str[0]
是从纪元开始的MS时间值。它们旨在用于基于时间的图形。
当我从redis检索列表时,我需要排序。我试图首先在redis中找到一种方法来执行此操作,但如果这是不可能的,我可以在检索后尝试在python中执行。
我在另一个视图中检索列表,如下所示:
result_values = rds.lrange("algo-" + str(param_id), 0, -1)
我在用
RPUSH
将插入项放入列表中,然后
LRANGE
在网站的其他地方检索它。
这是检索时的输出示例:
(我添加了'x'和'y',以便更容易阅读示例,我还修剪了一些'x'值,因为epoch中的MS是一个很大的数字)
'x': 940880.7622, 'y': '0.5685352436168158'
'x': 935089.762, 'y': '0.5685352436168158'
'x': 935661.762, 'y': '0.5685352436168158'
'x': 938553.762, 'y': '0.21320071635628374'
'x': 937978.762, 'y': '0.9949366763293833'
'x': 940309.762, 'y': '0.9949366763293833'
'x': 939138.762, 'y': '0.9949366763293833'
'x': 939716.762, 'y': '0.21320071635628374'
'x': 936235.762, 'y': '0.5685352436168158'
'x': 955547.3489, 'y': '0.21320071635628374'
'x': 955547.3489, 'y': '0.21320071635628374'
'x': 956696.3489, 'y': '0.21320071635628374'
'x': 955547.3489, 'y': '0.21320071635628374'
'x': 956123.3489, 'y': '0.5685352436168158'
'x': 957268.3489, 'y': '0.9949366763293833'
'x': 957268.3489, 'y': '0.9949366763293833'
'x': 958415.349, 'y': '0.9949366763293833'
'x': 955547.3489, 'y': '0.21320071635628374'
'x': 956696.3489, 'y': '0.21320071635628374'
'x': 957841.3489, 'y': '0.21320071635628374'
'x': 956123.3489, 'y': '0.5685352436168158'
如您所见,整个列表中的“x”值顺序错误。理想情况下,列表检索应该按每个列表的第一个元素的升序返回列表列表。
我刚开始使用redis(我们以前使用DB调用,但我们需要它更快,所以我们跳过了这个非常时间敏感的图的磁盘操作),我正在研究
Redis SORT
,但我不确定这是否是我的用例,而且我还没能让它工作。