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

【Redis源碼】setrange命令

pic

簡(jiǎn)介

setrange命令主要用于設置value的部分子串,設置時(shí)將值從偏移量offset開(kāi)始覆蓋成value值。如果偏移值大于原值的長(cháng)度,則偏移量之前的字符串由“\x00”填充。

命令格式:

setrange key offset value

setrange 命令

由于要指定值的偏移量,所以setrange在執行時(shí)會(huì )首先判斷offset參數必須為long類(lèi)型且必須大于等于0,否則設置失敗。

與append命令一樣,原key在Redis中不存在時(shí),Redis會(huì )創(chuàng )建一個(gè)robj對象,并將robj先設置到數據庫;當key在Redis中存在時(shí),會(huì )要求原值必須為string類(lèi)型,并且由于Redis的限制,value的長(cháng)度加offset值必須小于512 MB。

if (checkStringLength(c,offset+sdslen(value)) != C_OK)
            return;

setrange命令會(huì )修改原value值,如果原值是共享類(lèi)型的,則需解除共享,新創(chuàng )建一個(gè)新robj對象,對新對象進(jìn)行操作。代碼實(shí)現:

/* Create a copy when the object is shared or encoded. */
        o = dbUnshareStringValue(c->db,c->argv[1],o);

考慮到當value的長(cháng)度加offset會(huì )大于原值長(cháng)度時(shí),需要額外分配空間用于存儲新值并返回。此時(shí)調用了sdsgrowzero函數。sdsgrowzero函數會(huì )進(jìn)行識別,只有當offset+sdslen(value)大于原值長(cháng)度時(shí)才會(huì )擴充空間,否則直接返回原字符串。

o->ptr = sdsgrowzero(o->ptr,offset+sdslen(value));
memcpy((char*)o->ptr+offset,value,sdslen(value));

當有了robj的地址之后,從offset位置開(kāi)始將value覆蓋掉原值,通過(guò)memcpy函數來(lái)實(shí)現。

通過(guò)以上步驟,實(shí)現了字符串的setrange操作。



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

評論

取消
亚洲成a人片在线观看69,中文字幕免费无线观看,日韩精品无码一区二区三区四区,92精品国产自产在线观看直播,亚洲精品无码不卡在线观看屁,亚洲成av人片在www色猫咪 亚欧洲精品视频免费观看mv| 亚洲综合欧美色五月俺也去| 亚洲激在线观看情网站| 日韩欧美高清视频在线观看| 日韩一区视频电影在线观看| 久久无码潮喷无码高潮| 亚洲女初尝黑人巨高清| 欧美精品一区视频在线观看| 午夜福利三级理论电影| 一区二区三区欧美日韩不卡| 永久免费aV无码| 在线亚洲高清揄拍自拍一品区| 中文字幕人妻少妇av| 国产在线91一区二区| 亚洲ww国产a大作| 亚洲AV男人的天堂在线观看| 成人精品国产日本语音| 亚洲中文字幕无码爆乳app| 亚洲永久免费视频网站| 亚洲最大成人一区久久久| 国产精品福利视频萌白酱| 中文字幕电影免费高清播放| 一区二区视频在线观看免费的| 亚洲AV永久无码精品大全| 国产晚上碰视频全国免费| 最新色吊丝永久网站| 在线成人超碰在线播放| 亚洲精品无码久久久久YW| 亚洲成a人v欧美综合天堂| 中文字幕乱码人妻二区三区| 亚洲乱亚洲乱妇24p| 日本最大色倩网站www在线观看| 在线国产精品91| 在线欧美日韩免费观看| 亚洲aV无码成H人在线观看| 精品亚洲一区二区三区视频| 亚洲精品无码成人片久久不卡| 香蕉久久国产超碰青草| 中国新疆xxxxxl19| 亚洲黄片美女视频| 熟女少妇人妻精品视频在线| http://feinuo8.com http://jswjsm.com http://xzj0755.com http://zhaybyz.com http://gxhzpc.com http://tzjzs.com