《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文件:save
和bgsave
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
喜欢就支持一下吧
相关推荐