我们使用Redis作为缓存服务器,并且经常需要处理缓存列表.当我们缓存简单对象时,我们执行GET,如果对象不存在,Redis将返回null,并且我们将知道该对象未缓存并且必须从数据库加载.
但是我们如何才能最好地处理相同的列表 - 空列表可以是有效值.我们是否需要调用EXISTS来检查列表是否存在(但是使操作2调用而不是一个)或者是否有人更好地了解如何处理这种情况?
/谢谢
如果您绝对需要这样做,那么在创建列表时,您可以将"sentinel"作为从未删除的第一个元素.为了以原子方式执行此操作,您可以使用MULTI/EXEC/WATCH,但是Watch仅在Redis 2.2中可用,目前是预览版(即使非常稳定,您也可以从github master分支中获取它).
我认为在你的用例中你可能也想要RPUSHX和LPUSHX,只有当它已经存在时才会原子地推送到列表中.
请注意,由于Redis 2.2存在意味着列表中至少有1个元素,因为有很多理由会自动删除将达到零元素的列表;)