非常教程

Redis参考手册

列表 | Lists

rpoplpush

RPOPLPUSH source destination

自1.2.0起可用。

时间复杂度: O(1)

原子返回并移除存储在列表中的列表的最后一个元素(尾部)source,并按下存储在列表中第一个元素(头部)的元素destination

例如:考虑source拿着清单a,b,c,然后destination拿着清单x,y,z。执行RPOPLPUSH导致source持有a,bdestination持有c,x,y,z

如果source不存在,nil则返回该值并且不执行任何操作。如果sourcedestination相同,该操作相当于从列表中删除最后一个元素,并将其作为列表的第一个元素推入,因此可以将其视为列表旋转命令。

返回值

批量字符串回复:正在弹出和推送的元素。

例子

redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> RPOPLPUSH mylist myotherlist "three" redis> LRANGE mylist 0 -1 1) "one" 2) "two" redis> LRANGE myotherlist 0 -1 1) "three"

模式:可靠的队列

Redis通常用作消息传递服务器来实现后台作业或其他类型的消息传递任务的处理。通常可以通过将值推入生产者端的列表中,并使用RPOP(使用轮询)在消费者端等待此值,或通过阻止操作为客户端提供更好的服务来实现BRPOP,从而获得简单的队列形式。

然而,在这种情况下,所获得的队列是不可靠的,因为可能会丢失消息,例如在存在网络问题的情况下或消费者在收到消息之后崩溃但仍然要处理的情况下。

RPOPLPUSH(或阻止变体的BRPOPLPUSH)提供了一种避免此问题的方法:消费者提取消息并同时将其推入处理列表。一旦消息已被处理,它将使用LREM命令来从处理列表中删除消息。

额外的客户端可能会监视处理列表中保留的项目太多时间,并且会在需要时再次将这些超时项目推入队列中。

模式:循环列表

使用具有相同源和目标密钥的RPOPLPUSH,客户端可以使用单个LRANGE操作在O(N)中一个接一个地访问N元素列表中的所有元素,而无需使用单个LRANGE操作将完整列表从服务器传输到客户端。

即使有以下两个条件,上述模式仍然有效:

  • 有多个客户端轮换列表:他们将获取不同的元素,直到列表中的所有元素都被访问,并且进程重新启动。
  • 即使其他客户在列表末尾积极推出新项目。

上述内容使得实现一套系统必须由N名工作人员尽可能快地处理一套物品变得非常简单。一个例子是一个监控系统,它必须使用大量的并行工作人员来检查一组网站是否可以访问,并尽可能缩短延迟。

请注意,这种工作者的实现是可升级且可靠的,因为即使消息丢失,项目仍然在队列中,并且将在下一次迭代中处理。

Redis

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 它通常被称为数据结构服务器,因为值( value )可以是 字符串( String ), 哈希(Map),列表(list),集合( sets ) 和 有序集合( sorted sets )等类型。

主页 https://redis.io/
源码 https://github.com/antirez/redis
发布版本 4.0.2

Redis目录

1.集合 | Cluster
2.连接 | Connection
3.Geo
4.Hashes
5.HyperLogLog
6.键 | Keys
7.列表 | Lists
8.Pub/Sub
9.脚本 | Scripting
10.服务器 | Server
11.设定 | Sets
12.排序集 | Sorted Sets
13.字符串 | Strings
14.事务 | Transactions
15.Redis Dump 命令
16.Redis DEL 命令
17.Redis 键(key)
18.Redis 命令
19.Redis 配置
20.Redis 简介
21.Redis RANDOMKEY 命令
22.Redis TTL 命令
23.Redis Pttl 命令
24.Redis PERSIST 命令
25.Redis Move 命令
26.Redis PEXPIREAT 命令
27.Redis Keys 命令
28.Redis Expireat 命令
29.Redis Expire 命令
30.Redis EXISTS 命令
31.Redis Mget 命令
32.Redis Getbit 命令
33.Redis Getset 命令
34.Redis Getrange 命令
35.Redis Get 命令
36.Redis SET 命令
37.Redis 字符串(String)
38.Redis Type 命令
39.Redis Renamenx 命令
40.Redis Rename 命令
41.Redis Incrby 命令
42.Redis Incr 命令
43.Redis Psetex 命令
44.Redis Msetnx 命令
45.Redis Mset 命令
46.Redis Strlen 命令
47.Redis Setrange 命令
48.Redis Setnx 命令
49.Redis Setex 命令
50.Redis Setbit 命令
51.Redis Hincrby 命令
52.Redis Hgetall 命令
53.Redis Hget 命令
54.Redis Hexists 命令
55.Redis Hdel 命令
56.Redis 哈希(Hash)
57.Redis Append 命令
58.Redis Decrby 命令
59.Redis Decr 命令
60.Redis Incrbyfloat 命令
61.Redis Blpop 命令
62.Redis 列表(List)
63.Redis Hvals 命令
64.Redis Hsetnx 命令
65.Redis Hset 命令
66.Redis Hmset 命令
67.Redis Hmget 命令
68.Redis Hlen 命令
69.Redis Hkeys 命令
70.Redis Hincrbyfloat 命令
71.Redis Lrem 命令
72.Redis Lrange 命令
73.Redis Lpushx 命令
74.Redis Lpush 命令
75.Redis Lpop 命令
76.Redis Llen 命令
77.Redis Linsert 命令
78.Redis Lindex 命令
79.Redis Brpoplpush 命令
80.Redis Brpop 命令
81.Redis Sdiff 命令
82.Redis Scard 命令
83.Redis Sadd 命令
84.Redis 集合(Set)
85.Redis Rpushx 命令
86.Redis Rpush 命令
87.Redis Rpoplpush 命令
88.Redis Rpop 命令
89.Redis Ltrim 命令
90.Redis Lset 命令
91.Redis Sunion 命令
92.Redis Srem 命令
93.Redis Srandmember 命令
94.Redis Spop 命令
95.Redis Smove 命令
96.Redis Smembers 命令
97.Redis Sismember 命令
98.Redis Sinterstore 命令
99.Redis Sinter 命令
100.Redis Sdiffstore 命令