非常教程

Redis参考手册

键 | Keys

wait

WAIT numslaves timeout

自3.0.0起可用。

时间复杂度: O(1)

该命令将阻止当前客户端,直到所有先前的写入命令成功传输并且至少由指定数量的从站确认。如果达到超时(以毫秒为单位),则即使尚未达到指定数量的从站,该命令也会返回。

在达到指定数量的从站或达到超时时,该命令将始终返回确认在WAIT命令之前发送的写入命令的从站数量。

几句话:

  1. 当 WAIT 返回时,在当前连接的上下文中发送的所有先前的写入命令被保证由 WAIT 返回的从站的数量接收。
  1. 如果该命令是作为 MULTI 事务的一部分发送的,则该命令不会阻塞,而是仅返回 ASAP 确认先前写入命令的从站的数量。
  1. 超时0意味着永远阻止。
  1. 由于 WAIT 返回在失败和成功时都达到的从站数量,客户端应检查返回的值是否等于或大于它所要求的复制等级。

一致性和等待

请注意,WAIT 不会使 Redis 成为一个强大的一致性存储:虽然同步复制是复制状态机的一部分,但它不是唯一需要的。但是,在Sentinel或Redis群集故障转移的情况下,WAIT 可以提高现实世界的数据安全性。

具体而言,如果给定的写入被传输到一个或多个从属设备,则更有可能(但不能保证),如果主设备出现故障,我们将能够在故障转移期间提升接收写入的从设备:Sentinel 和 Redis Cluster 将尽最大努力尝试在可用的从站集合中提升最佳的从站。

但是,这只是尽力而为的尝试,所以仍然可能会丢失同步复制到多个从服务器的写入。

实施细节

由于引入了与从节点的部分重新同步(PSYNC 功能),Redis 从节点使用它们已在复制流中处理的偏移量异步地对其主节点进行ping 操作。这用于多种方式:

  1. 检测超时的奴隶。
  1. 断开连接后执行部分重新同步。
  1. 实施 WAIT。

在执行 WAIT 的特定情况下,Redis会记住,对于每个客户端,当给定的写入命令在给定客户端的上下文中执行时,生成的复制流的复制偏移量。当调用WAIT时,Redis会检查指定数量的从站是否已经确认了此偏移量或更大的偏移量。

返回值

整数应答:该命令返回在当前连接的上下文中执行的所有写操作所达到的从服务器的数量。

例子

> SET foo bar
OK
> WAIT 1 0
(integer) 1
> WAIT 2 1000
(integer) 1

在以下示例中,首次调用 WAIT 时不使用超时,并要求写入达到1个从站。它返回成功。在第二次尝试中,我们放了一个超时,并要求将写入复制到两个从站。由于有一个可用的从站,所以在 WAIT 解除阻塞并返回1秒之后,达到了从站的数量。

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 命令