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采用的过时策略
惰性删除+按期删除