Redis - 如何 RPUSH/LPUSH 一个空列表

use*_*774 5 python caching push redis empty-list

我们想对一个空列表的键进行 RPUSH/LPUSH。
这是出于一致性原因:当使用 LRANGE 读取键时,无论列表是否为空,其余代码的行为都相同。

为什么如果一个键有一个空列表,它会被删除是一个问题?
因为我们使用 Redis 作为缓存,并想区分两种情况:
1. 尚未缓存具有相应值的特定键。在这种情况下,我们要计算值(需要很长时间)并缓存它们。计算的结果可能是一个空列表。
2. 一个空列表的键已经被缓存。在这种情况下,我们不希望执行计算并返回一个空列表。

以下选项不起作用:

1. rpush 键 --> 没有“参数数量错误”的列表值结果。
2. rpush key [] --> 添加一个'[]'项

我们目前使用的(丑陋的)解决方案是存储一个带有“EMPTY-ITEM”项的单项列表,并在我们阅读列表时进行检查。

有任何想法吗?

谢谢

Ita*_*ber 10

Redis 中不存在空列表——一个列表必须有一个或多个项目。空列表(例如,作为弹出非空列表的结果)会被自动删除。