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

Is jedis synchronous or async? What consistency guarantee does redis provide?

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


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

jedis调用是同步的还是异步的?

从client-server的角度来看,是sync,就是jedis client发出请求,redis server会进行处理,return结果作为对请求的response。但是对于像 unlink 这样的命令,情况会有所不同,在某些情况下,redis 会直接 return 并在后台处理它。所以命令是同步还是异步,取决于redis服务器的动作。

当我通过jedis进行两次连续写入时,我能确定它们在我进行时会以相同的顺序命中redis吗?

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

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

如果读命令在写命令之后到达,则保证读会看到写。正是因为单线程模型让世界变得简单。但是如果通过sentinel或者redis cluster模式使用master-slave模式,情况就不一样了。如果从slave读取,则不能保证读取的是最新的写入,因为从master到slave的redis复制是异步的,但在单个redis实例中不会发生同样的事情。