我正在使用 redis-py 和 Redis 列表数据类型实现堆栈数据结构。当对应的列表数据类型为空时,我不清楚如何处理。默认 Redis 行为似乎是,一旦列表为空,相关键就会被删除。例如,当我在 Python 端弹出或清除堆栈数据结构中的所有元素时,会在 Redis 上命中空列表案例。基本上,我的设置是我的代码中有堆栈对象,它调用 Redis 列表上的操作。例如,当堆栈对象的客户端执行 stack.pop() 时,堆栈对象然后使用 redis-py 在 Redis 中的相应列表上调用 BRPOP。另外,在我的设置中,stack 对象具有 key 属性,它是 Redis 中相关列表的键。
到目前为止,我已经考虑了两种可能的解决方案:
永远不要完全清空 Redis 列表。至少维护列表中的一个元素。从客户端的角度来看,如果 Redis 列表仅包含 1 个元素,则堆栈为空。这种方法有效,但我主要不喜欢它,因为它涉及跟踪推送/弹出的元素数量。
如果列表为空,则删除相关键。在后续推送时,只需在 Redis 上创建一个新列表。这种方法也有效,但这里增加的复杂性是我无法确定其他人是否使用与我的堆栈对象相同的键在 Redis 上创建了 k,v 对。
所以,我基本上是在寻找一种方法来保留一个带有空列表的键,它不涉及上述两种方法所需的簿记。谢谢。