列表
RPOPLPUSH命令
命令:rpoplpush popKey pushKey,一共分为两个顺序操作并且是原子性操作。第一步:将列表popKey进行rpop操作,移除popKey的表尾(右侧)元素,并将rpop的返回值(被移除的元素)作为命令的返回值。第二部:将上面rpop的元素通过lpush命令添加到pushKey的表头(左侧)。
特殊情况:
1.因为是原子性操作,所以当popKey不存在时,rpop将会不做任何操作,整个命令也就不会执行任何操作,返回nil
2.popKey和pushKey为同一个列表的情况,这时等于是把自身的表尾(右侧)元素移动到表头(左侧)。
#######################当popKey和pushKey不是同一个列表时########################
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> rpoplpush popKey pushKey ##popKey和pushKey都不存在,返回nil
(nil)
127.0.0.1:6379> rpush pushKey 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange pushKey 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> rpoplpush popKey pushKey ##popKey不存在,pushKey存在时,也返回nil
(nil)
127.0.0.1:6379> rpush popKey 6 7 8 9 10 ##popKey和pushKey都存在时
(integer) 5
127.0.0.1:6379> lrange popKey 0 -1
1) "6"
2) "7"
3) "8"
4) "9"
5) "10"
127.0.0.1:6379> rpoplpush popKey pushKey ##返回值为rpop操作的返回值
"10"
127.0.0.1:6379> lrange popKey 0 -1 ##popKey的表尾(右侧)元素被移除
1) "6"
2) "7"
3) "8"
4) "9"
127.0.0.1:6379> lrange pushKey 0 -1 ##被移除的元素追加到了pushKey的表头(左侧)
1) "10"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
##################当popKey和pushKey是同一个列表时###################
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> rpush sameKey 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange sameKey
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange sameKey 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> rpoplpush sameKey sameKey ##表尾(右侧)被移除并返回
"5"
127.0.0.1:6379> lrange sameKey 0 -1 ##移除的元素被追加到表头(左侧)
1) "5"
2) "1"
3) "2"
4) "3"
5) "4"