Redis 学习 ---- 9.数据库
来源:互联网 发布:大数据 培训 编辑:程序博客网 时间:2024/05/21 15:01
9.1 服务器中的数据库
所有数据库都保存在服务器状态redis.h/redisServer的db数组中
9.2 切换数据库
Redis是一个键值对数据库服务器,服务器中的每个数据库都由一个redis.h/redisDb结构表示
redisDb结构的dict字典保存了数据库中的所有键值对,将这个字典称为键空间(key space)
当使用Redis命令对数据库就行读写时,还会执行一些额外的维护操作:
Ⅰ当读取一个键之后(读操作和写操作都要对键进行读取),更新键空间命中次数和不命中次数
Ⅱ在读取一个键之后,更新LRU(最后一次使用)时间
Ⅲ读取键时发现键过期,服务器会删除这个过期键
Ⅳ如果有客户端使用WATCH监视了某个键,当键修改后,会标记这个键为脏
Ⅴ当服务器修改一个键后,都会对脏键计数器的值增1
9.4 设置键的生存时间或过期时间
9.5 过期键删除策略
惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,
如果过期的话删除该键;如果没有过期,就返回该键。
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至少要删除多少过期键,以及要检查多少个数据库,由算法决定。
所有数据库都保存在服务器状态redis.h/redisServer的db数组中
struct redisServer{ redisDb *db; // 保存着服务器中所有数据库 int dbnum; // 数据库数量}
9.2 切换数据库
typedef struct redisClient{redisDb *db; // 记录客户端当前正在使用的数据库}redisClient;
Redis是一个键值对数据库服务器,服务器中的每个数据库都由一个redis.h/redisDb结构表示
redisDb结构的dict字典保存了数据库中的所有键值对,将这个字典称为键空间(key space)
typedef struct redisDb{dict *dict; // 数据库键空间,保存着数据库中的所有键值对}redisDb;
当使用Redis命令对数据库就行读写时,还会执行一些额外的维护操作:
Ⅰ当读取一个键之后(读操作和写操作都要对键进行读取),更新键空间命中次数和不命中次数
Ⅱ在读取一个键之后,更新LRU(最后一次使用)时间
Ⅲ读取键时发现键过期,服务器会删除这个过期键
Ⅳ如果有客户端使用WATCH监视了某个键,当键修改后,会标记这个键为脏
Ⅴ当服务器修改一个键后,都会对脏键计数器的值增1
9.4 设置键的生存时间或过期时间
9.5 过期键删除策略
惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,
如果过期的话删除该键;如果没有过期,就返回该键。
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至少要删除多少过期键,以及要检查多少个数据库,由算法决定。
9.9 重点回顾
①Redis服务器的素有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存
②客户端通过修改目标数据库指针,让它指向redisServer.db数组中的不同元素来切换不同的数据库。
③数据库主要由dict和expires俩个字典构成,其中dict字典负责保存键值对,而expires字典则负责保存键的过期时间。
④因为数据库由字典构成,所有对数据库的操作都是建立在字典操作之上的。
⑤数据库的键重视一个字符串对象,而值则可以是任意一种Redis对象类型
⑥expires字典的键指向数据库中的某个键,而值则记录了数据库键的过期时间,过期时间是一个以毫秒为单位的UNIX时间戳。
⑦Redis使用惰性删除和定期删除俩种策略来删除过期的键:惰性删除策略只在碰到过期键时才进行删除操作,定期删除策略则每隔一段时间主动查找并删除过期键。
⑧执行SAVE命令或者BGSAVE命令所产生的新RDB文件不会包含已经过期的键。
⑨执行BGREWRITEAOF命令锁产生的重写AOF文件不会包含已经过期的键。
⑩当一个过期键被删除之后,服务器会追加一条DEL命令到现有AOF文件的末尾,显式地删除过期键。
十一、当主服务器删除一个过期键之后,它会向所有从服务器发送一条DEL命令,显式删除过期键。
十二、从服务器即使发现过期键也不会自作主张地删除它,而是等待主节点发来DEL命令,
十三、这种统一、中心化的过期键删除策略可以保证主从服务器数据的一致性。
十四、当Redis命令对数据库进行修改之后,服务器会根据配置向客户端发送数据库通知。
0 0
- Redis 学习 ---- 9.数据库
- Redis数据库学习笔记
- redis 数据库 学习
- redis 数据库学习一
- 【数据库】Redis学习
- Redis数据库学习
- redis学习笔记(15)---redis数据库
- 【Redis学习】:Java操作redis数据库
- redis数据库的学习链接
- Redis学习8-数据库管理
- Redis数据库教程——系统详解学习Redis全过程
- 1.redis学习笔记:redis数据库的安装
- Redis学习笔记(一)Redis数据库入门
- java连接redis数据库-redis学习笔记(二)
- Ruby On Rails 学习:使用Redis数据库
- NoSQL数据库学习笔记之 初识Redis
- Nosql数据库学习-Redis初使用
- Redis系列学习笔记8 数据库
- 给eclipse安装color-theme插件
- Spring AOP
- 欧拉函数
- IOS开发ARC forbids explicit message send of 'autorelease'错误解决办法
- 用C++实现在键盘上输入任意个数
- Redis 学习 ---- 9.数据库
- Visual Studio 2010配置Opencv2.4.9
- 第四周实践项目1————求最大公约数
- Ubuntu配置Bind9
- 【iOS】原生微信登录和分享
- 递归函数
- Java用freemarker导出word
- 第五回,谈中国式产品创新
- J2EE --- Servlet 生命周期与工作原理