Redis(四)-日志

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis(四)-日志相关的知识,希望对你有一定的参考价值。

参考技术A

本节主要分析下Redis日志持久化机制,包括RDB、AOF以及360开源的Pika

AOF是 写后日志 ,即先写内存再记录日志;日志中记录用户的操作命令(类似mysql的binlog)

由于Redis是单线程,如果主线程处理写AOF务必会影响用户请求,因此Redis提供了三种写策略

小结
Always 可靠性高,数据基本不丢失,但是每个命令都要写磁盘,性能影响较大;
Everysec 性能适中,宕机时最多丢失1秒数据,Redis的默认策略
No 性能好,但是宕机时丢失数据较多

思考此时AOF日志机制存在什么问题?
写AOF日志的目的是为了给数据做持久化,以便宕机或重启时还原内存数据,要实现这个目标需要考虑几个问题:

触发写AOF有两种方式:

再来思考下:重写机制之后AOF日志用于重启或宕机恢复redis还存在什么问题?

要想解决这两个问题就需要引入下面的RDB,gogogo...

RDB即内存快照,就是指内存中的数据在某一个时刻的状态记录(类似thread dump),把这一时刻的状态以文件的形式写到磁盘文件上,用于数据恢复;

触发RDB快照跟AOF一样,同样有两种方式:

看完AOF和RDB的方案,再继续思考下要想实现即高效又完全不丢失数据的目标,还存在哪些问题:

Pika 主要解决的是用户使用 Redis 的内存大小超过 50G、80G 等等这样的情况,会遇到启动恢复时间长,一主多从代价大,硬件成本贵,缓冲区容易写满等问题。Pika 就是针对这些场景的一个解决方案。

本节分析了AOF、RDB、Pika三种缓冲方案的实现,以及各自解决了什么问题,又带来了什么问题;具体使用时还要具体分析权衡利弊,下面几点建议

redis.conf 配置

daemonize yes #以后台daemon方式运行redis


pidfile "/var/run/redis.pid" #redis以后台运行,默认pid文件路径/var/run/redis.pid


port 6379 #默认端口


bind 127.0.0.1 #默认绑定本机所有ip地址,为了安全,可以只监听内网ip


timeout 300 #客户端超时设置,单位为秒


loglevel verbose #设置日志级别,支持四个级别:debug、notice、verbose、warning


logfile stdout #日志记录方式,默认为标准输出,logs不写文件,输出到空设备/deb/null


logfile "/usr/local/redis/var/redis.log" #可以指定日志文件路径


databases 16 #开启数据库的数量


save 900 1
save 300 10
save 60 10000
创建本地数据库快照,格式:save * *
900秒内,执行1次写操作
300秒内,执行10次写操作
60秒内,执行10000次写操作


rdbcompression yes #启用数据库lzf压缩,也可以设置为no


dbfilename dump.rdb #本地快照数据库名称


dir "/home/zsg//program/redis/var/" #本地快照数据库存放目录


requirepass 123456 #设置redis数据库连接密码


maxclients 10000 #同一时间最大客户端连接数,0为无限制


maxmemory 1024MB #设定redis最大使用内存,值要小于物理内存,必须设置


appendonly yes #开启日志记录,相当于MySQL的binlog


appendfilename "appendonly.aof" #日志文件名,注意:不是目录路径


appendfsync everysec #每秒执行同步,还有两个参数always、no一般设置为everysec,相当于MySQL事物日志的写方式

























以上是关于Redis(四)-日志的主要内容,如果未能解决你的问题,请参考以下文章

图解Redis,谈谈Redis的持久化,RDB快照与AOF日志

Redis-慢查询分析

redis日志配置

redis 日志文件

redis的日志存在啥地方

ELK日志分析系统