【学习笔记】Redis学习笔记——第9章 数据库

第9章 数据库

9.1 服务器中的数据库

redisServer对象中保存了redisDb数组,这个数组中保存了当前服务器中所有的数据库,默认为16个。

9.2 切换数据库

可以使用select命令显式的切换数据库

9.3 数据库键空间

redisDb对象中的dict字段对象存储了当前数据库所有的键值对。

9.3.6 读写键空间时的维护操作

1>读取一个键后,会更新键空间命中次数及不命中次数。
2>读取后更新键的最后一次使用时间。
3>在读取一个键时,若发现过期,则先删除该键再操作。
4>被WATCH监视的键,服务器修改后会标记为脏。
5>每次修改键会让脏计数器+1。
6>数据库通知功能触发。

9.4 设置键的生存时间或过期时间

9.1 设置过期时间

不管是以何种单位设置生存时间或者过期时间,最后都会转换成一个毫米级的过期时间。

9.4.2 保存过期时间

会为dict中的键绑定一个存储在过期时间字典中的long型对象。

9.4.3 移除过期时间

在过期时间字典中删除long对象。

9.4.4 过期键的判定

1>查看该键是否存在于过期时间字典中
2>判断当前时间是否大于过期时间

9.5 过期键删除策略

9.5.1 定时删除

设置过期键时,生成一个定时器,到时则删除。(内存友好,cpu不友好)

9.4.2 惰性删除

在使用该键时才查看是否过期,是否删除。(cpu友好,内存不友好)

9.4.3 定期删除

以一定频率删除过期键,但要注意删除时长,不进行太久的删除。(这个过期删除最终的思想跟JVM的垃圾回收是一样的,只不过判断需要回收的对象没有那么复杂)

9.6 Redis的过期键删除策略

Redis实际使用了惰性删除与定期删除两种策略

9.6.1 惰性删除策略的实现

在读写数据库键之前检查并删除相应的过期键。

9.6.2 定期删除策略的实现

通过一个周期函数执行,从数据库中随机获取一定数量的键,检查是否过期并进行删除。

9.7 AOF、RDB和复制功能对过期键的处理

9.7.1 生成RDB文件

在生成RDB文件时,不会保存已过期的键。

9.7.2 载入RDB文件

1>主服务器不会载入已过期的键。
2>从服务器会载入已过期的键及其过期时间。

9.7.3 AOF文件写入

1>已过期键没被删除时不做处理。
2>当过期键被删除时,会追加一条DEL命令至AOF文件。

9.7.4 AOF重写

在重写时,因为是通过物理数据重写,所以会忽略掉已过期的键。

9.7.5 复制

当从服务器收到已过期键的命令时,会像这个键没过期一样正常返回,而在主服务器处理这个过期键的命令时,会删除并向从服务器发送DEL同步命令,所以有时已经过期了的键还是会被查询到的。

9.8 数据库通知

可以订阅两种数据库通知:
1>数据库的某个键执行了那些命令。
2>数据库的某个命令对哪些键执行了。

9.8.1 发送通知

在各种命令后切入了通知方法。

9.8.2 发送通知实现

主要会检测服务器是否允许发送通知及允许发送何种类型的通知。

★引申:Redis数据库可以访问到已经过期的键吗?

这边有两种情况:
1>如果是无主从的数据库,不可以,因为存在过期键的惰性删除。
2>如果是主从模式,有时可以,因为如果从服务器接收到了已过期键的命令,会当做没过期的键正常进行处理。

相关推荐

  1. 学习笔记Redis学习笔记——9 数据库

    2024-07-14 11:14:02       25 阅读
  2. 学习笔记Redis学习笔记——7 压缩列表

    2024-07-14 11:14:02       22 阅读
  3. 学习笔记Redis学习笔记——13 客户端

    2024-07-14 11:14:02       21 阅读
  4. 学习笔记Redis学习笔记——11 AOF持久化

    2024-07-14 11:14:02       22 阅读
  5. Mysql学习笔记—事务

    2024-07-14 11:14:02       47 阅读
  6. c++学习笔记9

    2024-07-14 11:14:02       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 11:14:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 11:14:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 11:14:02       57 阅读
  4. Python语言-面向对象

    2024-07-14 11:14:02       68 阅读

热门阅读

  1. 基于gunicorn+flask+docker模型高并发部署

    2024-07-14 11:14:02       22 阅读
  2. 求助大佬——期末考试评分标准(浙大)C语言

    2024-07-14 11:14:02       26 阅读
  3. 如何解决数据分析问题:IPython与Pandas结合

    2024-07-14 11:14:02       17 阅读
  4. 【团队成长】2024-28周周报

    2024-07-14 11:14:02       23 阅读
  5. Mysql第八次作业

    2024-07-14 11:14:02       18 阅读
  6. SQLite DISTINCT 关键字

    2024-07-14 11:14:02       26 阅读
  7. 显式等待、隐式等待、强制等待

    2024-07-14 11:14:02       25 阅读
  8. HttpUtil工具

    2024-07-14 11:14:02       24 阅读
  9. 中文科技核心论文

    2024-07-14 11:14:02       23 阅读
  10. 解决npm install 安装报错记录贴

    2024-07-14 11:14:02       28 阅读
  11. 山洪灾害研究

    2024-07-14 11:14:02       25 阅读
  12. 小白C语言基础详解:函数

    2024-07-14 11:14:02       24 阅读