redis那些事
第一次接触redis
项目第一次用redis,我的学习过程是这样的,首先在网上找了两个相关的视频 劈头盖脸的看,等了解大概之后再从网上搜如何安装redis,一定要找最近日期的文章,redis 版本也一定要高点,什么2.8 之前的版本 还是抛弃吧,从3.0后加了集群和一些新的东西。总之建议看新文档。
运行先加载谁
redis 启动后,会根据配置appendonly no和yes 选择加载aof文件还是rdb文件,如果是yes,很明显只加载aof文件到内存,如果是no 则加载rdb文件,实际上rdb文件比aof小接近一半,rdb数据有压缩。
主从同步的时候,如果数据库达到G级别 从库同步需要多久
这个主要看两台机器之间的带宽了,没什么好说的
主从同步的细节
主从开始的时候,主会把当前进程 原样复制一份给子进程,子进程把所有内存数据复制到数据目录dump.rdb,然后通过网络把这个rdb文件发送给从库,从库会在数据目录生成一个临时rdb文件接收,接收完成后把临时文件更改成dump.rdb 然后载入内存,(如果从库没有开启rdb持久化只有aof的话,数据目录下的rdb会千年不变,除非你在从库执行save或者bgsave命令,即使配置表中把save设置“”了,也会生成一个rdb,出乎意料啊!)
AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上,等服务器维护的时候手动执行bgrewriteaof
ls -lR|grep “^-“|wc -l ls -lR|grep “^-” 通过这个命令检测文件夹下文件数变动
正式上线后
密码设置复杂点,数据库端口改掉,添加防火墙
maxmemory 设置服务器内存的一半为好
auto-aof-rewrite-min-size 设置大一点比如5G 可以避免redis自动重写,停服后可以手动执行
设置flushdb flushdball config 禁用 如下设置
rename-command FLUSHALL joYAPNXRPmcaarcR4ZDgC81TbdkSmLAzRPmca4rcR
rename-command FLUSHDB qf69aZbLAX3cdf3eddnHM3SOlbpH71yEXLAX3c4f3e
rename-command CONFIG FRaqbC8wSA1XvpFsVjCRGryWtIIZS2TRvpFVjC4RG
rename-command KEYS eIiGXix4A2DreBBsQdwY6YHkidcDjoYA2DreBB4sQ
知识点:不管是主从触发的 主 bgsave 还是主 满足条件自己bgsave 同一时间只会fork一个子进程,有且只会有一个子进程,同时收到两个bgsave会顺序执行
如果大家有什么想讨论的欢迎评论,谢谢!