比如对于空列表 list1list2 来说,执行以下命令将创建图 4-9 所示的两个列表:


    图 4-9 两个只包含单个元素的列表


    除了 LPUSH 命令和 RPUSH 命令之外,Redis 还提供了 LPUSHX 命令和 RPUSHX 命令:

    这两个命令对待空列表的方式跟 LPUSH 命令和 RPUSH 命令正好相反:

    如果给定列表并不存在,那么 LPUSHX 命令和 RPUSHX 命令将放弃执行推入操作。

    LPUSHX 命令和 命令在成功执行推入操作之后,将返回列表当前的长度作为返回值;如果推入操作未能成功执行,那么命令将返回 0 作为结果。

    举个例子,如果我们对不存在的列表 list3 执行以下 LPUSHX 命令和 RPUSHX 命令,那么这两个推入操作都将被拒绝:

    另一方面,如果我们先使用 LPUSH 命令,将一个元素推入到 list3 列表里面,使得 list3 变成非空列表,那么 LPUSHX 命令和 RPUSHX 命令就可以成功地执行推入操作:

    图 4-10 展示了列表 list3 的整个变化过程:

    • 执行 LPUSHX 命令,将元素 "item-x" 推入列表,使得列表包含两个元素。

    • 执行 RPUSHX 命令,将元素 "item-y" 推入列表,使得列表包含三个元素。


    图 4-10 LPUSHX 命令和 RPUSHX 命令的执行过程_images/IMAGE_LPUSHX_RPUSHX.jpeg


    LPUSH 命令和 RPUSH 命令不一样,LPUSHX 命令和 RPUSHX 命令每次只能推入一个元素,尝试向 LPUSHX 命令或 RPUSHX 命令给定多个元素将引发错误:

    其他信息