[qishibo/AnotherRedisDesktopManager]lset key index value的时候数组数据顺序会变化

2024-08-15 277 views
7

1、我使用的是list结构。里面存放 [aa,bb,cc,dd]四个数据。假设key是users 2、在客户端直接更新bb为ee。 3、数据会变成[aa,cc,dd,ee]

但是我使用lset users 去更新数据的时候是正确的。所以应该是客户端实现的问题。我猜测你们的处理是否是:先删除,再增加?

回答

3

@qishibo 老哥,您看我这个问题是bug吗

8

已知问题,现在逻辑是先rpush,成功后再lrem,所以会在list尾部出现。之前讨论过如何更好的修改,但一直没有完美解决方案,目前想法是获取index然后用insert的方式实现(但一般list都是动态变化的,这样其实也有坑) 你有什么建议么

3

当然index的获取也只能从已经加载出来的条数里获取,也会存在不精准的问题

4

确实是的,因为从在客户端看到数据到操作提交数据之间数据可能出现变化。不过能做到这一步也很大概率符合用户期望了(顺序使用,没有插入数据的场景)。 对于由插入数据的场景,使用index可能都无法成功更新期望数据,所以你们现在的做法目前来看是比较优的方案了,能够保证列表数据正确。

3

linsert重写了一下,能够实现编辑后在list中的位置不变了。

编辑list时会找到之前的value,如果还存在,则用新值替换;不存在的话,那就说明已经被消费了,保存会报错“值不存在”,用户自己决定刷新列表还是手动新增