新聞中心
Redis是一個開源的,支持網(wǎng)絡,基于內(nèi)存的數(shù)據(jù)存儲系統(tǒng),非常適合做緩存來使用。Redis存儲的數(shù)據(jù)維護有一定的時間,這就涉及到Expiry處理,即舍棄指定時間后失效的數(shù)據(jù)。

10年積累的成都網(wǎng)站建設、網(wǎng)站建設經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先建設網(wǎng)站后付款的網(wǎng)站建設流程,更有老城免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
#### Expiry實現(xiàn)機制
Redis使用兩個二叉樹來完成Expiry操作:一個是鍵值對結(jié)構的字典(dict),用來存放數(shù)據(jù);另一個是定時器紅黑樹(TTL RB-tree),用來記錄緩存時間信息。字典中的每個成員都會同時關聯(lián)節(jié)點紅黑樹中的一個節(jié)點,這個節(jié)點中有個時間屬性表示緩存的失效時間。
每次Redis在數(shù)據(jù)庫中增加一個鍵值對時,都會在ttl RB-tree中增加相應的節(jié)點,并設置失效時間。隨后,Redis會每秒掃描一次ttl RB-tree,將失效的節(jié)點從字典和ttl RB-tree移除。
Redis中的Expiry還使用了懶惰刪除的方法,即在每次查詢時,先檢查這個節(jié)點是否失效,失效則移除,而不需要每次查詢都去移除失效值。
#### Expiry原理圖示
下面是Redis中Expiry實現(xiàn)操作的原理示意圖:

圖中表示,當一個新數(shù)據(jù)鍵值對被添加進字典(dict)中時,會同時在ttl RB-tree中增加一個節(jié)點,并設置節(jié)點的失效時間;隨后,Redis會每秒掃描ttl RB-tree,將失效的節(jié)點從字典和ttl RB-tree中移除。
#### 代碼實現(xiàn)
下面是Redis中Expiry實現(xiàn)代碼:
dict *d = server.db[id].dict;
rb_tree *t = &server.db[id].expires;
/* 添加一個新節(jié)點 */
dictEntry *de = entry;
/* 新建ttl節(jié)點插入到紅黑樹t中 */
t->key = dict->key;
t->val = dict->val;
/* 設置節(jié)點失效時間 */
t->expire = expire;
/* 添加到綁定字典 */
dict linked list;
/* 掃描紅黑樹,移除失效的節(jié)點 */
rb_tree *scan = rb_search_gt(t, expire);
if (scan) {
/* 移除待移除節(jié)點 */
dict_delete(d, scan->key);
/* 移除紅黑樹節(jié)點 */
rb_delete_node(t, scan);
/* 移除綁定字典元素 */
dict_unlink(linked_list, scan);
}
從上面的實現(xiàn)可以看出,Redis中Expiry處理的數(shù)據(jù)結(jié)構和操作比較復雜,但是機制是非常好的,無論是從性能上還是安全性上都得到很好的保障。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設,網(wǎng)頁設計制作,網(wǎng)站維護,網(wǎng)絡營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務。IDC基礎服務:云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務器租用、服務器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務。
當前文章:Redis中Expiry處理的底層實現(xiàn)機制研究(redis過期底層實現(xiàn))
轉(zhuǎn)載源于:http://m.5511xx.com/article/cdcohee.html


咨詢
建站咨詢
