jedis是同步还是异步? redis提供什么一致性保证?

时间:2017-11-30 16:01:59

标签: asynchronous redis distributed synchronous jedis

1)jedis是否同步调用异步?当我通过jedis进行两次连续写操作时,我可以确定当我制作它们时它们会以相同的顺序命中redis吗?

2)redis提供什么一致性保证?当我通过jedis设置一些值时,是否保证每次后续读取都会看到写入?我知道在最终的一致性系统中你没有这样的保证。 它是像zookeeper一样的顺序一致性吗?我读了这份文件。它只是说它不是很强的一致性,这意味着我可以假设线性化吗?

1 个答案:

答案 0 :(得分:1)

jedis是否同步调用异步?

从客户端 - 服务器的角度来看,它是同步的,这意味着当jedis客户端发送请求时,redis服务器将处理它并返回结果作为请求的响应。但是对于像 unlink 这样的命令,事情会有所不同,在某些情况下,redis会直接返回并在后台处理它。因此,无论命令是同步还是异步,都取决于redis服务器的操作。

当我通过jedis进行两次连续写操作时,我可以确定他们在制作时会以相同的顺序命中redis吗?

是的,redis是具有请求队列的单线程模型,因此所有命令都是顺序处理的。但是在某些情况下你应该注意:如果有多个客户端(或进程)向服务器发送命令,则会出现数据不一致的情况。您可以使用multi / exec或watch或分布式锁来解决不同的情况。

redis提供的一致性保证是什么?当我通过jedis设置一些值时,是否保证每次后续读取都会看到写入?

如果在写入命令之后到达读取命令,则保证读取将看到该写入。这只是因为单线程模型使世界变得简单。但是如果你通过sentinel或redis集群模式使用主从模式,情况会有所不同。如果从slave读取,则不能保证读取最近的写入,因为从主服务器到从服务器的redis复制是异步的,但在单个redis实例中不会发生同样的事情。