亚洲成a人片在线观看69,中文字幕免费无线观看,日韩精品无码一区二区三区四区,92精品国产自产在线观看直播,亚洲精品无码不卡在线观看屁,亚洲成av人片在www色猫咪

【Redis源碼】append命令

0be0ff4c7bbfa411876c6ec75ec28c8f.jpg

簡(jiǎn)介

數據庫已經(jīng)有了key,它的值為value。當我們發(fā)現value值需要追加字符串卻又不想直接用set命令覆蓋原值時(shí),可以用append命令來(lái)實(shí)現。

命令格式:

append key value
  • 說(shuō)明: 將value追加到原值的末尾,如果key不存在,此命令等同于set key value命令。

append 實(shí)現

現在介紹在key已經(jīng)存在的情況下進(jìn)行的操作。我們知道,只有value為字符串時(shí)才可以追加字符串,數字是不可以追加的,所以當key存在時(shí),首先判斷下value的類(lèi)型是否為string類(lèi)型。如果不為string類(lèi)型時(shí)會(huì )報錯。

if (checkType(c,o,OBJ_STRING))
  return;

在追加字符串時(shí),需要判斷追加后的字符串長(cháng)度必須小于512MB,否則會(huì )報錯。

append = c->argv[2];
totlen = stringObjectLen(o)+sdslen(append->ptr);//檢查長(cháng)度
if (checkStringLength(c,totlen) != C_OK)

checkStringLength函數原型如下:

static int checkStringLength(client *c, long long size) {
    if (size > 512*1024*1024) {
        addReplyError(c,"string exceeds maximum allowed size (512MB)");
        return C_ERR;
    }
    return C_OK;
}

這里我們不禁要問(wèn),為什么在追加字符串時(shí)才考慮追加后的長(cháng)度不能大于512 MB,那么在set命令時(shí)為什么沒(méi)有限制最大長(cháng)度呢?在networking.c中找到如下代碼:

ok = string2ll(c->querybuf+1+c->qb_pos,newline-(c->querybuf+1+c->qb_pos),&ll);
if (!ok || ll > 1024*1024) {
     addReplyError(c,"Protocol error: invalid multibulk length");
     setProtocolError("invalid mbulk count",c);
     return C_ERR;
}

由此可見(jiàn),在服務(wù)端接收到命令的時(shí)候,就已經(jīng)判斷了命令的最大長(cháng)度不能大于1 MB,所以set命令不需要再次判斷了。

字符串追加會(huì )修改原字符串的值,所以必須保證字符串是非共享的。如果字符串是共享的,則需要解除共享,新創(chuàng )建一個(gè)值對象。實(shí)現代碼為:

robj *dbUnshareStringValue(redisDb *db, robj *key, robj *o) {
    serverAssert(o->type == OBJ_STRING);
    if (o->refcount != 1 || o->encoding != OBJ_ENCODING_RAW) {
        // 如果是共享的,則需要解除共享,創(chuàng  )建新的字符串
        robj *decoded = getDecodedObject(o);
        o = createRawStringObject(decoded->ptr, sdslen(decoded->ptr));
        decrRefCount(decoded);
        dbOverwrite(db,key,o);
    }
    return o;
}

值對象創(chuàng )建好之后,將新字符串追加到原字符串末尾。

o->ptr = sdscatlen(o->ptr,append->ptr,sdslen(append->ptr));

這樣就完成了字符串的append操作。



標 題:《【Redis源碼】append命令
作 者:zeekling
提 示:轉載請注明文章轉載自個(gè)人博客:浪浪山旁那個(gè)村

評論

取消
亚洲成a人片在线观看69,中文字幕免费无线观看,日韩精品无码一区二区三区四区,92精品国产自产在线观看直播,亚洲精品无码不卡在线观看屁,亚洲成av人片在www色猫咪 亚洲欧美国产一区二区在线看| 一区二区三区人妻少妇| 亚洲欧美日韩久久精品第一区| 99久久久无码国产精品免费人妻| 亚洲aV永久纯肉无码精品| 在线精品无码字幕无码AV| 国产高清免费视频一区一二区| AV中文字幕在线毛片| 91在线直播观看高清在线| 一级毛片电影免费看| 欧美福利电影在线观看| 精品国产免费人成电| 久久久综合亚洲色一区二区三区| 永久免费精品精品永久| 一区二区三区日韩在线| 综合精品欧美三级| 天堂资源网在线播放| 精品熟女少妇a∨免费久久| 亚洲97一区二区三区| 亚洲日本波多野结衣| 亚洲国产aⅴ精品视频| 国产一级做a爱免费视频| 亚洲日本va午夜| 亚欧日韩另类中文欧美| 中文日韩a精品乱码| 日韩一区二区精品乱码| 最新国产中文字幕| 中文字幕日本人妻久久久免费| 亚洲爱啪视频在线观看| 亚洲国产美女久久久久| 亚洲人色婷婷成人网| 国产福利电影一区二区三区| 亚洲av一区二区国色天香| 99久久免费国产精精品| 中文字幕永久免费观看| 精品无人区无码乱码大片国产| 91无码人妻一区二区成人aⅤ| 亚洲国产欧美日韩精品久久久| 亚洲成av人片天堂网无码| 亚洲最新无码成av人| 亚洲精品国产综合麻豆久久| http://yangdatou.com http://sdheadlighting.com http://cambridgecinemas.com http://kmqydhkj.com http://91shuige.com http://hljlqhb.com