我曾经使用PostgreSQL序列SELECT nextval('number');
来确保我得到一个新号码,即使有多个客户端,因为nextval
保证返回不同的和增加的值。Redis INCR和多进程?
我想在Redis中使用相同的机制。 我以为使用INCR
命令,但我想确保我很清楚它会给出与nextval
命令相同的保证吗? 当几个进程运行此命令或者我必须使用Redis锁时,没有获得相同编号的风险吗?
由于
我曾经使用PostgreSQL序列SELECT nextval('number');
来确保我得到一个新号码,即使有多个客户端,因为nextval
保证返回不同的和增加的值。Redis INCR和多进程?
我想在Redis中使用相同的机制。 我以为使用INCR
命令,但我想确保我很清楚它会给出与nextval
命令相同的保证吗? 当几个进程运行此命令或者我必须使用Redis锁时,没有获得相同编号的风险吗?
由于
Redis是一个单线程发动机,因此,所有命令的执行串行化。它总是为每个单独的命令提供原子性和隔离性(就ACID而言)。
结果是应用单个INCR命令并利用其结果是安全的(即使多个连接同时进行)。
谢谢。基于此,我添加了一个与使用INCR有关的新问题,但是有一个每日计数器:http://stackoverflow.com/questions/26443804/redis-reset-counter-every-day – Michael 2014-10-18 19:45:13
[Redis INCR并发性]的可能重复(http://stackoverflow.com/questions/16672355/redis-incr-concurrency) – 2014-10-18 15:42:50