国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Redis (四 redis的虛擬內(nèi)存管理)

2019-11-14 10:21:16
字體:
供稿:網(wǎng)友

Redis的數(shù)據(jù)保存在內(nèi)存中,會(huì)出現(xiàn)內(nèi)存不足的情況,redis2.0以后,新增了虛擬內(nèi)存的功能,redis的VM與操作系統(tǒng)的VM類似,它把訪問很少的key放到內(nèi)存里,卻把value放到磁盤上,從而實(shí)現(xiàn)快速把val導(dǎo)入內(nèi)存。

操作系統(tǒng)自己有虛擬內(nèi)存的概念,redis為什么要自己造輪子 ?

1  操作系統(tǒng)的VM是基于頁的概念,比如linux中每頁的大小是4k,而redis中的對象大多小于4K,一個(gè)頁上可能有多個(gè)redi對象,另外redis的集合可能對象類型,如set,list可能存在于多個(gè)頁上,redis自己實(shí)現(xiàn)可以達(dá)到更好的換入粒度

2  redis將交換到磁盤的對象壓縮,保存到磁盤的對象可以去除指針和對象元數(shù)據(jù)信息,一般壓縮后的對象比在內(nèi)存中的對象小10倍,這樣redis的VM比操作系統(tǒng)的VM少很多IO操作

## VM的配置文件

vm-enabled yes   ##開啟vm

vm-swap-file  /tmp/redis.swap  ##交換出來的value保存的文件路徑(swap過大會(huì)造成磁盤空間浪費(fèi),過小會(huì)造成過多的磁盤碎片)

vm-max-memory  268435456   ##redis使用的最大內(nèi)存上限,超過這個(gè)值后開始交換value到硬盤中

vm-page-size  32  ##設(shè)置每個(gè)頁面的大小為32字節(jié)

vm-pages   134217728  ##最多使用多少個(gè)頁面 vm-swap-file = vm-page-size*vm-pages

vm-max-threads  4  ##對象換入換出的工作線程的數(shù)量0表示不使用工作線程,使用主線程(會(huì)阻塞其它用戶)

redis的VM只是把value放到磁盤,所以,并不能解決key過多造成的內(nèi)存不足

和操作系統(tǒng)一樣,redis也是按照頁來交換對象,一個(gè)頁只能保存一個(gè)對象,但是一個(gè)對象可以分布于多個(gè)頁

redis在內(nèi)存中維護(hù)一個(gè)bitmap來映射這些頁是否被占用

redis默認(rèn)fork出一個(gè)子進(jìn)程來備份rdb文件,子進(jìn)程在執(zhí)行保存時(shí)與父進(jìn)程共享swap文件,為避免父子進(jìn)程同時(shí)操作,redis在子進(jìn)程備份時(shí),不允許父進(jìn)程操作swap文件

redis允許debug操作,eg: set key val 

>debug key

### 阻塞式VM交換redisObject到磁盤的步驟,采用vmSwapObjectBlocking進(jìn)行

(1)找到準(zhǔn)備交換到磁盤的RedisObject對象

(2)調(diào)用vmSwapObjectBlocking將對象所關(guān)聯(lián)的value值交換至硬盤,它返回一個(gè)包含value存儲(chǔ)信息的vmPointer指針

(3)使用vmSwapObjectBlocking返回的vmPointer指針把RedisObject替換,把storage字段設(shè)為REDIS_VM_SWAPPED

(4)釋放對象所關(guān)聯(lián)的value所占用的內(nèi)存空間

###非阻塞式VM采用vmSwapOneObjectThreaded進(jìn)行,利用io線程實(shí)現(xiàn)

IO線程的處理如下

(1)從io_newjobs隊(duì)列取出一個(gè)IO任務(wù)

(2)處理IO任務(wù)

(3)把處理完成的IO任務(wù)放到io_PRocessd任務(wù)隊(duì)列

主線程收到io線程的信號就調(diào)用vmThreadedIOComletedJob對io_processd隊(duì)列中的任務(wù)進(jìn)一步處理


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌邑市| 安庆市| 紫云| 张掖市| 安远县| 桦南县| 民权县| 云阳县| 容城县| 邻水| 南和县| 大竹县| 潞西市| 梅河口市| 平遥县| 常德市| 曲松县| 邮箱| 苏尼特左旗| 弥渡县| 太保市| 吉首市| 蓬溪县| 临澧县| 新巴尔虎右旗| 乌拉特前旗| 康平县| 宜阳县| 永济市| 滕州市| 府谷县| 海兴县| 华池县| 瑞金市| 新津县| 成武县| 庆安县| 合水县| 淄博市| 建平县| 九龙县|