《Redis设计与实现》笔记1 | Redis单机数据库的实现

《Redis设计与实现》笔记1 | Redis单机数据库的实现

《Redis设计与实现》的笔记,包括redis中对象的概念、内存回收、RDB、AOF、事件、客户端、服务器等

1.对象

1.1 类型

创建键值对时包含 键对象 和 值对象 ,键对象总是一个字符串对象,值对象则有五种常用对象:字符串对象、列表对象、哈希对象、集合对象、有序集合对象。查看对象类型 type [key]

1.2 内存回收

采用引用计数实现内存回收机制,计数次数会根据使用状态变化。

  • 创建新对象时,引用计数+1
  • 对象被新程序使用,引用计数+1
  • 对象不在被使用时,引用计数-1
  • 引用计数为0时,内存释放

查看引用次数 object refcount [key]

1.3 对象共享

在值相同的情况下,该对象的内存可以被多个键共享,每共享一次,引用计数次数+1。

目前:redis会在初始化服务器时创建1万个字符串对象,包含0-9999的所用整数值,优先使用这些共享值,而不是新创建对象

1.4 对象空转时长

空转时长表示某个键从现在起距离最后一次访用的间隔时长,命令 object idletime [key]

2.单机数据库

redis服务器默认会创建16个数据库(0-15),默认为0号数据库,切换命令为select [num]

2.1 RDB

RDB全称Redis DataBase,Redis是内存数据库,把数据存储在内存,但是不能持久,所以redis提供了RDB持久化功能,可以把内存中的数据库状态保存到磁盘中,避免数据意外丢失。

过程:redis内存数据库状态——>RDB文件(经过压缩的二进制文件),落盘——>还原为数据库状态


两个命令生成RDB文件:savebgsave

save命令会阻塞服务器进程,拒绝客户端发送的所有请求,直到RDB文件创建完毕

bgsave命令则是派生一个子进程负责创建RDB文件,服务器进程继续执行客户端的命令请求

在启动redis服务器后会自动载入RDB文件(载入期间服务器会处于阻塞状态)

$redis-server
49917:M 23 Dec 2021 14:03:26.107 # Server initialized
49917:M 23 Dec 2021 14:03:26.108 * Loading RDB produced by version 6.2.4
49917:M 23 Dec 2021 14:03:26.108 * RDB age 81588 seconds
49917:M 23 Dec 2021 14:03:26.108 * RDB memory usage when created 0.98 Mb
49917:M 23 Dec 2021 14:03:26.108 * DB loaded from disk: 0.000 seconds
49917:M 23 Dec 2021 14:03:26.108 * Ready to accept connections
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享