redis 超时时间小记

问题:redis中已存在key-value对,并对其设置超时时间事 如果再对该key设置新值,超时时间会怎么变化?
redis 超时时间小记_第1张图片

经过实验,结论:重新覆盖后将失去超时时间。

然后去看了下源码
首先是set命令
redis 超时时间小记_第2张图片

SET key value [EX sec][PX ms][NX|XX]

然后看了下源码
`

/* SET key value [NX] [XX] [EX ] [PX ] */
void setCommand(redisClient *c) {
    int j;
    robj *expire = NULL;
    ~~int unit = UNIT_SECONDS;
    int flags = REDIS_SET_NO_FLAGS;
    // 设置选项参数  是否val后面携带了参数啥的
    for (j = 3; j < c->argc; j++) {
        char *a = c->argv[j]->ptr;
        robj *next = (j == c->argc-1) ? NULL : c->argv[j+1];

        if ((a[0] == 'n' || a[0] == 'N') &&
            (a[1] == 'x' || a[1] == 'X') && a[2] == '\0') {
            flags |= REDIS_SET_NX;
        } else if ((a[0] == 'x' || a[0] == 'X') &&
                   (a[1] == 'x' || a[1] == 'X') && a[2] == '\0') {
            flags |= REDIS_SET_XX;
        } else if ((a[0] == 'e' || a[0] == 'E') &&
                   (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) {
            unit = UNIT_SECONDS;
            expire = next;
            j++;
        } else if ((a[0] == 'p' || a[0] == 'P') &&
                   (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) {
            unit = UNIT_MILLISECONDS;
            expire = next;
            j++;
        } else {
            addReply(c,shared.syntaxerr);
            return;
        }
    }
    // 尝试对值对象进行编码   =>  使用更节省内存的数据格式 将raw改为embstr
    c->argv[2] = tryObjectEncoding(c->argv[2]);// 函数说明在下
    setGenericCommand(c,flags,c->argv[1],c->argv[2],expire,unit,NULL,NULL);~~

}
`

你可能感兴趣的:(redis)