Redis SET命令不能失败,但可以吗?

时间:2012-10-16 09:11:05

标签: redis

我正在尝试调试我遇到的一些Redis问题,并且是关于SET命令的一些不确定的文档。

在我的Redis配置中;我有以下几行(摘录):

# Note: with all the kind of policies, Redis will return an error on write
#       operations, when there are not suitable keys for eviction.
#
#       At the date of writing this commands are: set setnx setex append

documentation page for the SET command我发现:

Status code reply: always OK since SET can't fail.

关于明确行为的任何见解?

1 个答案:

答案 0 :(得分:8)

tl; dr :如果redis实例内存不足,SET将返回错误响应。

据我所知,redis.c中的源代码,当处理命令时,流程就像这样(伪代码):

IF memory is needed
    IF we can free keys
        Free keys
        Process the command
            SET -> process and return OK response
    ELSE return error response
ELSE
    Process command
        SET -> process and return OK response

它并不是用这种方式编写的,但基本思想归结为:在处理命令之前正在检查内存,因此即使命令不能失败,如果有&#,也会返回错误响应39;无论命令的实际响应如何,都没有记忆。