Redis 記憶體回收
阿新 • • 發佈:2020-12-23
因為 C 語言並不具備自動的記憶體回收功能, 所以 Redis 在自己的物件系統中構建了一個引用計數(reference counting)技術實現的記憶體回收機制, 通過這一機制, 程式可以通過跟蹤物件的引用計數資訊, 在適當的時候自動釋放物件並進行記憶體回收。
每個物件的引用計數資訊由redisObject
結構的refcount
屬性記錄:
typedef struct redisObject { // ... // 引用計數 int refcount; // ... } robj;
物件的引用計數資訊會隨著物件的使用狀態而不斷變化:
- 在建立一個新物件時, 引用計數的值會被初始化為
1
- 當物件被一個新程式使用時, 它的引用計數值會被增一;
- 當物件不再被一個程式使用時, 它的引用計數值會被減一;
- 當物件的引用計數值變為
0
時, 物件所佔用的記憶體會被釋放。
表 8-12 列出了修改物件引用計數的 API , 這些 API 分別用於增加、減少、重置物件的引用計數。