2012-04-24 80 views
1

刚开始研究redis。Redis读取/写入

Redis是一个单线程进程。

这是否意味着所有操作(例如,hset,hget等)都是以串行方式执行的 - 也就是说,通过以下操作:

hset foo:bar name 'Redis' 
hget foo:bar name 

hget只会在hset后执行吗?

回答

3

是的Redis实例是单线程的,所有的基本操作都是原子操作和序列化操作。借助Redis,您可以获得并发性,但不具有并行性。

在你的例子中,你有保证hget总是在hset后执行。

您还可以保证,当您在Redis连接上发送多个查询时,应答将以相同的顺序返回(即Redis支持协议流水线)。

请注意,只有与Redis实例的给定连接才是真实的。如果数据在多个实例中分片,则将使用多个连接,并且在不同连接上发送的查询之间不存在这样的保证。

+0

通常在一台机器上启动多个Redis实例,比如每个内核启动一个Redis实例以充分利用CPU。 – 2012-04-26 03:06:40

+0

是的,在这种情况下,您不能保证在不同实例上的操作顺序。但是,您仍然保证涉及给定键(存储在给定实例中)的操作是序列化的。 – 2012-05-19 08:44:03