1、服務器中的數據庫redis
Redis服務器將全部數據庫信息保存在redis.h/redisServer, redisServer包含db數組,以下:數據庫
1 struct redisServer { 2 //... 3 redisDb *db; 4 //... 5 };
每一個Redis客戶端都有本身的目標數據庫,默認狀況是db[0],客戶端能夠經過SELECT命令切換數據庫。數組
例如,某個客戶端使用SELECT 1命令切換到1號數據庫,服務器
每一個redisDb的結構爲:性能
1 typedef struct redisDb { 2 dict *dict; /* The keyspace for this DB */ 3 dict *expires; /* Timeout of keys with a timeout set */ 4 dict *blocking_keys; /* Keys with clients waiting for data (BLPOP) */ 5 dict *ready_keys; /* Blocked keys that received a PUSH */ 6 dict *watched_keys; /* WATCHED keys for MULTI/EXEC CAS */ 7 struct evictionPoolEntry *eviction_pool; /* Eviction pool of keys */ 8 int id; /* Database ID */ 9 long long avg_ttl; /* Average TTL, just for stats */ 10 } redisDb;
下面介紹各個部分做用。this
2、數據庫鍵空間spa
Redis是一個key-value數據庫,redisDb中的dict字典元素存儲了DB中的全部key-value pair,這個字典dict即爲數據庫的鍵空間。指針
鍵空間的鍵即爲數據庫的鍵,每一個鍵是一個字符串對象code
鍵空間的值即爲數據庫的值,每一個值能夠是字符串對象、hash對象、列表對象等。對象
一個典型的鍵空間以下:
2.1 數據庫增刪查改
一、增長鍵
直接調用SET <key> <value>。
二、刪除鍵
調用DEL <key>
三、更新鍵
一樣使用SET 命令,覆蓋以前的value。
4 獲取鍵內容
GET <key>
2.2 鍵的超時時間
經過EXPIRE <key> <ttl>能夠設置鍵的生存時間,通過指定的秒數之後,服務器會自動刪除超過生存時間的鍵。
redisDb中的expires字典保存數據庫中全部鍵的過時時間,記爲過時字典。
過時字典中的鍵是一個指針,指向鍵空間dict中的某個對象。
過時字典的值是一個long long類型的整數,保存過時字典鍵指向的數據庫對象的過時時間。
過時刪除策略包括:
、Redis採用的過時策略
惰性刪除+按期刪除