我在Redis中使用有序集数据类型。
我使用命令zadd
添加数据。添加数据是JSON格式。
如何通过分数更改此排序集中的值? 我需要获取JSON值并更改一个字段,并在更新此有序集后。
我尝试使用相同的分数添加againg数据,但我得到了dublicates
答案 0 :(得分:7)
这很简单!
ZREM key data;
ZADD key score newdata;
你根本无法更新SET结构中的元素。根据定义,这是不可能的!就像我不能喝一杯水,我只能喝它^ _ ^
如果您有任何其他问题,请回复。
顺便说一下,我不知道您的应用需求,但我强烈认为SORTED SET不适合您的应用程序。
答案 1 :(得分:4)
一个不更新集合(已排序或未排序)的成员。您必须删除旧成员并使用相关分数在其位置添加新的(更新的JSON)。您可以将其包装在Lua或WATCH / MULTI / EXEC块中以获得原子性。
答案 2 :(得分:0)
如果您将列表用作键(分数)=>值存储,则可以按分数先删除。
def nearest_point_on_edge(G, lat, lng, edge):
''' Return nearest point to lat/lng on edge
'''
orig_point = Point(lng, lat)
a_point = Point(G.nodes[edge[0]]['x'], G.nodes[edge[0]]['y'])
b_point = Point(G.nodes[edge[1]]['x'], G.nodes[edge[1]]['y'])
a_latlng = (G.nodes[edge[0]]['y'], G.nodes[edge[0]]['x'])
b_latlng = (G.nodes[edge[1]]['y'], G.nodes[edge[1]]['x'])
dist_ab = LineString([a_point, b_point]).project(orig_point)
projected_orig_point = list(LineString([a_point, b_point]).interpolate(dist_ab).coords)
nearest_latlng = (projected_orig_point[0][1], projected_orig_point[0][0])
return nearest_latlng