Redis深入之記憶體回收和對象共用

來源:互聯網
上載者:User

Redis深入之記憶體回收和對象共用

記憶體回收

C語言並不具備自動記憶體回收功能,Redis在自己的對象系統中構建了一個引用計數技術實現的記憶體回收機制,通過這一機制,程式可以通過跟蹤對象的引用計數資訊,在適當的時候自動釋放對象並進行記憶體回收。每個對象的引用計數資訊由redis對象結構的refcount屬性記錄,建立一個新對象時,引用計數值會初始化為1;對象被一個新程式使用時,它的引用計數值會被增1;不再被一個程式使用時,減1;引用計數值變為0,對象所佔用的記憶體會被釋放。

對象共用

對象的引用計數屬性還帶有對象共用的作用。Redis會共用值為0到9999的字串對象。如果鍵A建立了一個包含整數值100的字串對象作為值對象,鍵B也要建立一個同樣儲存了整數值100的字串對象作為值對象,伺服器可以讓鍵A和鍵B共用同一個字串對象,Redis中需要兩步,1)將資料庫鍵的值指標指向一個現有的值對象;2)將被共用的值對象的引用計數增一。共用對象機制對於節約記憶體非常有協助,資料庫中儲存的相同值對象越多,對象共用機制就能節約越多的記憶體。

問:Redis為什麼只對包含整數值得字串對象進行共用?

當伺服器考慮將一個共用對象設定為鍵的值對象時,程式需要先檢查給定的共用對象和鍵想建立的目標對象是否完全相同。一個共用對象儲存的值越複雜,驗證共用對象和目標對象是否相同所需的複雜度就會越高,消耗的CPU時間也會越多。

如果共用對象是儲存整數值的字串對象,驗證操作的複雜度O(1)

如果共用對象是儲存字串值的字串對象,驗證操作的複雜度O(N)

如果共用對象是包含多個值(比如列表對象或者雜湊對象)對象,驗證操作的複雜度O(N2)

故儘管共用更複雜的對象可以節約更多的記憶體,但受到CPU時間的限制,Redis只對包含整數值得字串對象進行共用。

 

Ubuntu 14.04下Redis安裝及簡單測試

Redis叢集明細文檔

Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis串連Redis

Redis系列-安裝部署維護篇

CentOS 6.3安裝Redis

Redis安裝部署學習筆記

Redis設定檔redis.conf 詳解

Redis 的詳細介紹:請點這裡
Redis 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.