loadlj / blog

17 stars 6 forks source link

redis相关 #22

Open loadlj opened 6 years ago

loadlj commented 6 years ago

redis相关

数据库

redis默认情况下会创建16个db,并使用0号数据库,可以通过select语句切换数据库。是通过切换redisClient里面的redisDb指针来实现的

过期算法有三种:

持久化

RDB

RDB是将数据库状态保存为文件,RDB可以手动执行,也可以在redis定期执行。有两个命令可以保存RDB文件,save和bgsave。save命令会阻塞redis服务进程,直到RDB文件创建完成,在这个期间服务器不能处理其它命令。bgsave会fork一个子进程,子进程负责RDB文件的写入,主线程负责处理请求。

AOF的载入与还原:redis服务端创建一个不带网络连接的伪客户端,从aof文件读取命令,使用伪客户端执行命令

AOF文件写入

当数据库某个键已经过期,AOF不会因为这个过期键产生影响,当被删除之后,会向AOF文件apped一条del命令。在AOF重写的时候的过程中会去检查过期的键,已过期的键不会被写入AOF文件

AOF重写(BGREWRITEAOF)会去除一些冗余的写命令,重写后会用新的AOF文件去覆盖旧的。AOF重写是在子进程中进行的,在服务器处理完写操作后,会把命令同时追加到AOF缓冲区和AOF重写缓冲区。

复制

redis复制的步骤:

watch是一个乐观锁,可以在exec执行之前监控任意数量的数据库键,并在exec执行的时候,检查被监控的键是否修改过,如果是的话则拒绝事务 redis的事务是不支持回滚的,事务只会因为语法的错误而失败