如何更改排序集中的数据?

时间:2015-09-23 21:29:35

标签: redis node-redis phpredis

我在Redis中使用有序集数据类型。 我使用命令zadd添加数据。添加数据是JSON格式。

如何通过分数更改此排序集中的值? 我需要获取JSON值并更改一个字段,并在更新此有序集后。

我尝试使用相同的分数添加againg数据,但我得到了dublicates

3 个答案:

答案 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