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文件: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.10
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值