Redis安装管理, RDB, AOF ubuntu使用

news/2024/12/22 0:44:38/文章来源:https://www.cnblogs.com/ludingchao/p/18447674

1.1 Redis 基础

redis单线程处理用户请求,不用加锁。其他线程做别的工作

1.2 Redis 安装

Ubuntu 安装 Redis

范例:基于官方仓库包安装 (可以安装最新版本)

#官方地址
https://redis.io/docs/install/install-redis/install-redis-on-linux/#导入key
[root@ubuntu2204 ~]#curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
#生成对应仓库配置文件
[root@ubuntu2204 ~]#echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
#查看生成的文件
[root@ubuntu2204 ~]#ls /etc/apt/sources.list.d
redis.list[root@ubuntu2204 ~]#apt update
#查看版本
[root@ubuntu2204 ~]#apt list -a redis
#安装最新版
[root@ubuntu2204 ~]#apt -y install redis
#指定版本安装,注意:因为依赖关系可能会失败
[root@ubuntu2204 ~]#apt -y install redis=6:7.2.4-1rl1~jammy1

范例:内置仓库

[root@ubuntu2204 ~]#apt list redis
[root@ubuntu2004 ~]#apt -y install redis

1.2.2 编译安装 Redis

编译安装

#Redis 源码包官方下载链接: 
http://download.redis.io/releases/
#官方的安装方法:
https://redis.io/docs/getting-started/installation/install-redis-from-source/

范例: 编译安装

#安装依赖包
[root@centos8~]#yum -y install gcc make jemalloc-devel#如果支持systemd需要安装下面包
[root@ubuntu2204 ~]#apt update && apt -y install make gcc libjemalloc-dev libsystemd-dev
[root@ubuntu2004 ~]#apt update && apt -y install make gcc libjemalloc-dev libsystemd-dev
[root@ubuntu1804 ~]#apt update && apt -y install make gcc libjemalloc-dev libsystemd-dev
[root@centos8 ~]#yum -y install gcc jemalloc-devel systemd-devel
[root@centos7 ~]#yum -y install gcc jemalloc-devel systemd-devel#下载源码
[root@centos8 ~]#wget http://download.redis.io/releases/redis-6.2.4.tar.gz
[root@centos8 ~]#tar xvf redis-6.2.4.tar.gz#编译安装
[root@centos8 ~]#cd redis-6.2.4/
#如果支持systemd,需要执行下面
[root@centos8 redis-6.2.4]#make -j 2 USE_SYSTEMD=yes PREFIX=/apps/redis install
#如果不支持systemd,执行下面
[root@centos8 redis-6.2.4]#make -j 2 PREFIX=/apps/redis install #指定redis安装目录#配置环境变量
[root@centos8 ~]#echo 'PATH=/apps/redis/bin:$PATH' >> /etc/profile
[root@centos8 ~]#. /etc/profile#目录结构
[root@centos8 ~]#tree /apps/redis/
/apps/redis/
└── bin├── redis-benchmark├── redis-check-aof├── redis-check-rdb├── redis-cli├── redis-sentinel -> redis-server└── redis-server#准备相关目录和配置文件
[root@centos8 ~]#mkdir /apps/redis/{etc,log,data,run} #创建配置文件、日志、数据等目录#默认配置文件有问题,需要修改
[root@centos8 redis-6.2.4]#cp redis.conf /apps/redis/etc/

前台启动 Redis

#前台启动 redis
[root@centos8 ~]#redis-server /apps/redis/etc/redis.conf

创建 Redis 用户和设置数据目录权限及修改默认配置文件

[root@centos8 ~]#useradd -r -s /sbin/nologin redis
#设置目录权限
[root@centos8 ~]#chown -R redis.redis /apps/redis/
#修改配置(如果是dpkg安装的,去查找配置文件位置)
#[root@ubuntu redis]#dpkg -L redis-server| grep 'redis\.conf'
[root@ubuntu redis]#vim /apps/redis/etc/redis.conf
#修改配置内容
bind 0.0.0.0    #支持所有其他主机访问
logfile "/path/redis.log" #日志路径,示例:logfile "/apps/redis/log/redis_6379.log"
dir ./ #数据路径。快照文件保存路径,示例:dir "/apps/redis/data"
pidfile /var/run/redis_6379.pid #pid文件路径,可以修改为/apps/redis/run/redis_6379.pid
protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将提示警告信息并拒绝远程访问,redis-7版本后,只要没有密码就不能远程访问

[root@ubuntu redis]#systemctl restart redis

创建 Redis 服务 Service 文件

[root@centos8 ~]#vim /lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID        #此行可省略
Type=notify #如果支持systemd可以启用此行
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=1000000   #指定此值才支持更大的maxclients值(redis支持更多并发连接)

[Install]
WantedBy=multi-user.target

Redis 通过Service方式启动

[root@centos8 ~]#systemctl daemon-reload
[root@centos8 ~]#systemctl start redis

消除启动时的三个Warning提示信息(可选)

前面直接启动Redis时有三个Waring信息,可以用下面方法消除告警,但非强制消除

Tcp backlog (优化全连接队列长度)

#ubuntu新版内核该参数已为4096,满足511,不用修改
#rocky系统进行修改
[root@rocky ~]# sysctl -a |grep somaxconn
net.core.somaxconn = 128
[root@rocky ~]# vim /etc/sysctl.conf
net.core.somaxconn = 4096
#加载
[root@rocky ~]# sysctl -p
net.core.somaxconn = 4096

overcommit_memory

内核参数说明: 官方建议设成1

内核参数overcommit_memory 实现内存分配策略,可选值有三个:0、1、2
0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则内存
申请失败,并把错误返回给应用进程
1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何
2 表示内核允许分配超过所有物理内存和交换空间总和的内存

范例:

[root@rocky ~]# vim /etc/sysctl.conf
vm.overcommit_memory = 1
[root@rocky ~]# sysctl -p

transparent hugepage

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. 
This will create latency and memory usage issues with Redis. To fix this issue 
run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as 
root, and add it to your /etc/rc.local in order to retain the setting after a 
reboot. Redis must be restarted after THP is disabled.
警告:您在内核中启用了透明大页面(THP,不同于一般4k内存页,而为2M)支持。 这将在Redis中造成延迟
和内存使用问题。 要解决此问题,请以root 用户身份运行命令“echo never> 
/sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到您的/etc/rc.local中,以便在
重启后保留设置。禁用THP后,必须重新启动Redis。

注意:Ubuntu22.04默认值满足要求,不再有此告警 (rocky要改)

范例:

#查看默认值
[root@ubuntu2204 ~]#cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never#ubuntu开机配置(ubuntu满足,不用配,这里只是演示)
[root@ubuntu2004 ~]#cat /etc/rc.local 
#!/bin/bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@ubuntu2004 ~]#chmod +x /etc/rc.local#CentOS开机配置(这个命令重启就没了,所以要开机自启)
[root@centos8 ~]#echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local 
#该文件默认没执行权限,需要加上
[root@centos8 ~]#chmod +x /etc/rc.d/rc.local

 

1.2.3 Docker 容器方式部署

[root@ubuntu ~]#apt update && apt install -y docker.io
#dockerhub官网上搜redis,通过tag找一个版本,这里找了一个alpine系统的
[root@ubuntu ~]#docker pull redis:7.2.4-alpine3.19

[root@ubuntu2204 ~]#docker run -d -p 6379:6379 --name myredis redis:7.2.4-alpine3.19
#指定连接密码
[root@ubuntu2204 ~]#docker run -d -p 6379:6379 --name myredis redis:7.2.4-alpine3.19 --requirepass 123456#数据持久化目录在容器/data下,可以用卷或挂载的方式挂在宿主机上保证容器被删,数据还在

redis内存不建议太多,8g,16g查不到。如果一个redis64g,save的时候,就要把64g的内容写入磁盘,不合适。一个物理服务器可以开几个redis的docker,每个给8g,16g。

另外这样的好处,可以利用到多核cpu的性能

也可以使用redis多实例,不同端口的方式实现

 

1.2.4 Redis 的多实例

测试环境中经常使用多实例,需要指定不同实例的相应的端口,配置文件,日志文件等相关配置

范例: 以编译安装为例实现 redis 多实例

[root@ubuntu ~]#vim /lib/systemd/system/redis6379.service
[Unit]
Description=Redis persistent key-value database
After=network.target[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis6379.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=1000000[Install]
WantedBy=multi-user.target[root@ubuntu ~]#vim /lib/systemd/system/redis6380.service
...
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis6380.conf --supervised systemd
...[root@ubuntu ~]#vim /lib/systemd/system/redis6381.service
...
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis6381.conf --supervised systemd
...[root@ubuntu ~]#cd /apps/redis/etc
[root@ubuntu etc]#cp redis.conf redis6379.conf
[root@ubuntu etc]#vim redis6379.conf
dbfilename dump6379.rdb
[root@ubuntu etc]#sed 's/6379/6380/g' redis6379.conf > redis6380.conf
[root@ubuntu etc]#sed 's/6379/6381/g' redis6379.conf > redis6381.conf

[root@ubuntu etc]#systemctl daemon-reload
[root@ubuntu etc]#systemctl enable --now redis6379 redis6380 redis6381

 

2 Redis 配置管理

2.1 Redis 配置文件说明

#如果是dpkg安装的,去查找配置文件位置
[root@ubuntu redis]#dpkg -L redis-server| grep 'redis\.conf'
#如果按照上面编译安装的配置路径 /apps/redis/etc/redis.conf
bind 0.0.0.0    #支持所有其他主机访问
port 6379       #监听端口,默认6379/tcp
tcp-backlog 511 #三次握手的时候server端收到client ack确认号之后的队列值,即全连接队列长度
timeout 0 #客户端和Redis服务端的连接超时时间,默认是0,表示永不超时
tcp-keepalive 300 #tcp 会话保持时间300s

logfile "/path/redis.log" #日志路径,示例:logfile "/apps/redis/log/redis_6379.log"
loglevel notice #日志级别
databases 16 #设置数据库数量,默认:0-15,共16个库

requirepass foobared #设置redis连接密码,之后需要AUTH pass,如果有特殊符号,用" "引起来,生产建议设置

maxclients 10000 #Redis最大连接客户端

maxmemory <bytes> #redis使用的最大内存,单位为bytes字节,0为不限制,建议设为物理内存一半,8G内存的计算方式8(G)*1024(MB)1024(KB)*1024(Kbyte),需要注意的是缓冲区是不计算在maxmemory内,生产中如果不设置此项,可能会导致OOM
         
rdbcompression yes #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
dbfilename dump.rdb #快照文件名
dir ./ #数据路径。快照文件保存路径,示例:dir "/apps/redis/data"
pidfile /var/run/redis_6379.pid #pid文件路径,可以修改为/apps/redis/run/redis_6379.pid
protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将提示警告信息并拒绝远程访问,redis-7版本后,只要没有密码就不能远程访问

客户端程序 redis-cli

#默认为本机无密码连接
redis-cli
#远程客户端连接,注意:Redis没有用户的概念
redis-cli -h <Redis服务器IP> -p <PORT> -a <PASSWORD> --no-auth-warning

查看redis状态(内存使用情况,最大限制,当前连接数,最大连接数)

[root@ubuntu etc]#redis-cli info

动态修改redis参数 (临时生效,重启就失效了)

#如果还要永久生效,那就把配置文件也改了
[root@ubuntu ~]#redis-cli
#获取所有redis参数
127.0.0.1:6379> config get *
#获取最大客户端数量
127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"
#修改参数
127.0.0.1:6379> config set maxclients 77777
OK
#修改密码
127.0.0.1:6379> config set requirepass 123456#Redis5.0有些设置无法修改,Redis6.2.6版本支持修改bind
127.0.0.1:6379> CONFIG SET bind 127.0.0.1
(error) ERR Unsupported CONFIG parameter: bind

2.3 慢查询

[root@centos8 ~]#vim /etc/redis.conf
slowlog-log-slower-than 10000    #单位为us,指定超过1us即为慢的指令,默认值为10000us127.0.0.1:6379> SLOWLOG LEN  #查看慢日志的记录条数
(integer) 14
127.0.0.1:6379> SLOWLOG GET [n] #查看慢日志的最近n条记录,默认为10
1) 1) (integer) 14
2) (integer) 1544690617       #第2)行表示命令执行的时间戳,距离1970-1-1的秒数,date -d +@1544690617 可以转换
3) (integer) 4                #第3)行表示每条指令的执行时长
4) 1) "slowlog"127.0.0.1:6379> SLOWLOG RESET #清空慢日志

2.4 Redis 持久化

Redis支持两种数据持久化保存方法

1.RDB:Redis DataBase 
2.AOF:AppendOnlyFile  

2.4.1 RDB

完全快照,不能做到实时

RDB 支持save和bgsave两种命令实现数据文件的持久化

执行save后,会生成dump.rdb文件。即使redis服务重启,也会自动加载现有数据 dump.rdb(文件大,启动会慢些)
#先备份为temp-主进程号.pid,完成后再覆盖dump.rdb,temp文件就没了

注意: save 指令使用主进程进行备份,而不生成新的子进程,但是也会生成临时文件temp-<主进程 PID>.rdb文件
(主进程也就是处理用户请求的进程,且是单行程,其他命令像访问会排队等待) 
实际生产中,不会采用save来做文件持久化,耽误用户访问,而采用bgsave(后台)bgsave会单独开一个子进程进行备份,先备份为temp-子进程号.pid,完成后再覆盖dump.rdb,temp文件就没了。不影响原来的主线程
#如果备份中途停电或者失败了,也不会覆盖影响原来的dump.rdb

2.4.1.2 RDB 相关配置

#在配置文件中的 save 选项设置多个保存条件,只有任何一个条件满足,服务器都会自动执行 BGSAVE 命
#Redis7.0以后支持写在一行,如:save 3600 1 300 100 60 10000,此也为默认值
save 900 1         #900s内修改了1个key即触发保存RDB
save 300 10        #300s内修改了10个key即触发保存RDB
save 60 10000      #60s内修改了10000个key即触发保存RDB
dbfilename dump.rdb
dir ./             #编泽编译安装时默认RDB文件存放在Redis的工作目录,此配置可指定保存的数据目
录
stop-writes-on-bgsave-error yes  #当快照失败是否仍允许写入,yes为出错后禁止写入,建议为no
rdbcompression yes    #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
rdbchecksum yes        #是否对备份文件开启RC64校验,默认是开启

范例:RDB 相关配置 (自动触发bgsave)

[root@ubuntu2004 ~]#redis-cli config get save
1) "save"
2) "3600 1 300 100 60 10000"    #默认
#支持动态修改,注意:需要添加双引号
127.0.0.1:6379> config set save "30 3"    #30s超过3次就备份
OK
127.0.0.1:6379> config get save
1) "save"
2) "60 3"#直接修改配置文件
[root@ubuntu2004 ~]#vim /apps/redis/etc/redis.conf
sav3 30 3#禁止持久化(系统不自动持久化,用户还是可以手动持久化)
127.0.0.1:6379> config set save ""
[root@ubuntu2004 ~]#vim /apps/redis/etc/redis.conf
save ""#注意:通过redis-cli info查看rdb_bgsave_in_progress:0,如果0表示完成了
[root@ubuntu ~]#redis-cli info|grep rdb_bgsave_in_progress
rdb_bgsave_in_progress:0
#脚本可以通过此方法bgsave后查看是否备份完成

2.4.1.3 实现 RDB 方法

1.save: 同步,不推荐使用,使用主进程完成快照,因此会阻塞其它命令执行
2.bgsave: 异步后台执行,不影响其它命令的执行,会开启独立的子进程,因此不会阻赛其它命令执行
3.配置文件实现自动保存: 在配置文件中制定规则,自动执行bgsave

范例: 手动备份RDB文件的脚本

#配置文件
[root@centos7 ~]#vim /apps/redis/etc/redis.conf
save ""
dbfilename dump_6379.rdb
dir "/data/redis"
appendonly no #脚本
[root@centos8 ~]#cat redis_backup_rdb.sh 
#!/bin/bash
#********************************************************************
#Author:           wangxiaochun
#QQ:               29308620
#Date:             2020-10-21
#FileName:         redis_rdb.sh
#URL:               http://www.wangxiaochun.com
#Description:       The test script
#Copyright (C):     2020 All rights reserved
#********************************************************************

BACKUP=/backup/redis-rdb
DIR=/data/redis
FILE=dump_6379.rdb
PASS=123456color () {RES_COL=60MOVE_TO_COL="echo -en \\033[${RES_COL}G"SETCOLOR_SUCCESS="echo -en \\033[1;32m"SETCOLOR_FAILURE="echo -en \\033[1;31m"SETCOLOR_WARNING="echo -en \\033[1;33m"SETCOLOR_NORMAL="echo -en \E[0m"echo -n "$1" && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $" OK "    elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo
}redis-cli -h 127.0.0.1 -a $PASS --no-auth-warning bgsave 
result=`redis-cli -a $PASS --no-auth-warning info Persistence |grep 
rdb_bgsave_in_progress| sed -rn 's/.*:([0-9]+).*/\1/p'`
#result=`redis-cli -a $PASS --no-auth-warning info Persistence |awk -F: 
'/rdb_bgsave_in_progress/{print $2}'`
until [ $result -eq 0 ] ;dosleep 1result=`redis-cli -a $PASS --no-auth-warning info Persistence |awk -F: 
'/rdb_bgsave_in_progress/{print $2}'`
done
DATE=`date +%F_%H-%M-%S`[ -e $BACKUP ] || { mkdir -p $BACKUP ; chown -R redis.redis $BACKUP; }
scp $DIR/$FILE $BACKUP/dump_6379-${DATE}.rdb backup-server:/backup/color "Backup redis RDB" 0#执行
[root@centos8 ~]#bash redis_backup_rdb.sh
Background saving started
Backup redis RDB                                           [ OK ][root@centos8 ~]#ll /backup/redis-rdb/ -h
total 143M
-rw-r--r-- 1 redis redis 143M Oct 21 11:08 dump_6379-2020-10-21_11-08-47.rdb

 

2.4.2 AOF

在第一次启用AOF功能时,会做一次完全备份,后续将执行增量性备份,相当于完全数据备份+增量变化

AOF默认没有开启,需要手动开启。之后会把数据都备份在AOF中,之后采用追加的方法,追加到AOF中

rdb文件和aof文件同时存在, aof优先级高, 会优先加载aof文件(原本rdb依然会根据策略保存, 但aof是实时保存,更安全)

#默认没有开启AOF
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "no"
#AOF存放数据的路径(rdb也存放在这)
127.0.0.1:6379> config get dir
1) "dir"
2) "/apps/redis/data"#错误开启AOF(下面方法有问题,重启后原持久化rdb文件无法加载,用新aof文件,相当于数据重新开始记录)
[root@ubuntu ~]#vim /apps/redis/etc/redis.conf
appendonly yes
[root@ubuntu ~]#systemctl restart redis
#然后就会做一次全量备份(重启老数据丢失),会出现全量备份rdb文件和aof文件,后续存在aof文件中#正确开启AOF
#先动态修改,redis会做一次全量备份(有老数据)生成新的rdb文件,后续数据存到aof文件中
127.0.0.1:6379> config set appendonly yes
#然后再修改配置文件保证重启也开启AOF
[root@ubuntu ~]#vim /apps/redis/etc/redis.conf
appendonly yes
#后续不需要重启服务了,即使重启,数据也不会丢失

aof文件是文本文件,可以对其进行编辑

#如果redis执行中,误操作执行了一条错误命令
#对aof文件进行编辑(操作前对aof文件做一次备份,防止编辑错了)
删掉一条指令,*号开头到下一个信号开头前为一条指令,如
3        #保留
*1        #
$8        #
flushall #
*3        #保留#然后重启服务(让服务重新加载aof)
[root@ubuntu ~]#systemctl restart redis

2.4.2.2 AOF 相关配置

appendfsync everysec        #aof持久化策略的配置
#no表示由操作系统保证数据同步到磁盘,Linux的默认fsync策略是30秒,最多会丢失30s的数据
#always表示每次写入都执行fsync,以保证数据同步到磁盘,安全性高,性能较差
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据,此为默认值,也生产建议值

appendfilename "appendonly.aof"  #文本文件AOF的文件名,存放在dir指令指定的目录中(7版本后没用)
appenddirname "appendonlydir"    #7.X 版指定目录名称

2.4.2.3 AOF Rewrite 重写 (清理aof文件)

将一些重复的,可以合并的,过期的数据重新写入一个新的AOF文件,从而节约AOF备份占用的硬盘空间,也 能加速恢复过程

可以手动执行bgrewriteaof 触发AOF,第一次开启AOF功能,或定义自动rewrite 策略

AOF rewrite 过程

父进程生成一个新的子进程负责生成新的AOF文件,同时父进程将新的数据更新同时写入两个缓冲区aof_buf和aof_rewrite_buf
6.X版本之前新的AOF文件覆盖旧的AOF文件
7.X版本之后版本,新的AOF文件覆盖AOF目录中的RDB文件appendonly.aof.2.base.rdb,并生成一个新空的AOF文件appendonly.aof.2.incr.aof,
此文件的编号会加1,同时更新appendonly.aof.manifest中的内容

 AOF rewrite 重写相关配置

#同时在执行bgrewriteaof操作和主进程写aof文件的操作,两者都会操作磁盘,而bgrewriteaof往往会涉及大量磁盘操作,
这样就会造成主进程在写aof文件的时候出现阻塞的情形,以下参数实现控制
no-appendfsync-on-rewrite no #在aof rewrite期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。 #默认为no,表示"不暂缓",新的aof记录仍然会被立即同步到磁盘,是最安全的方式,不会丢失数据,但是要忍受阻塞的问题 #为yes,相当于将appendfsync设置为no,这说明并没有执行磁盘操作,只是写入了缓冲区,因此这样并不会造成阻塞(因为没有竞争磁盘),
但是如果这个时候redis挂掉,就会丢失数据。丢失多少数据呢?Linux的默认fsync策略是30秒,最多会丢失30s的数据,
但由于yes性能较好而且会避免出现阻塞因此比较推荐
#rewrite 即对aof文件进行整理,将空闲空间回收,从而可以减少恢复数据时间 auto-aof-rewrite-percentage 100 #当Aof log增长超过指定百分比例时,重写AOF文件,设置为0表示不自动重写Aof日志,重写是为了使aof体积保持最小,
但是还可以确保保存最完整的数据(100表示上次整理完如果100m,下次超过200m再整理)
auto-aof-rewrite-min-size 64mb #触发aof rewrite的最小文件大小

2.4.2.4 手动执行AOF重写 BGREWRITEAOF 命令

范例: 手动 bgrewriteaof

#生产中不会手动触发,都是自动触发的
#开一个子进程进行处理
127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started#7.X生成一个临时的AOF文件
[root@ubuntu2204 ~]#ll /apps/redis/data/
drwxr-xr-x 2 redis redis     4096  2月 19 09:41 appendonlydir/
-rw-r--r-- 1 redis redis       88  2月 19 09:24 dump.rdb
-rw-r--r-- 1 redis redis 85680128  2月 19 09:41 temp-rewriteaof-96239.aof#执行完成后incr文件清空,合并到RDB文件中(7版本以前是覆盖aof文件,不会并入rdb中)
[root@ubuntu2204 etc]#ll /apps/redis/data/appendonlydir/
-rw-r--r-- 1 redis redis 189855711  6月 26 17:10 appendonly.aof.3.base.rdb
-rw-r--r-- 1 redis redis         0  6月 26 17:10 appendonly.aof.3.incr.aof
-rw-r--r-- 1 redis redis        88  6月 26 17:10 appendonly.aof.manifest

2.4.3 RDB和AOF 的选择

如果主要充当缓存功能,或者可以承受较长时间,比如数分钟数据的丢失, 通常生产环境一般只需启用RDB
即可,此也是默认值
如果一点数据都不能丢失,可以选择同时开启RDB和AOF
一般不建议只开启AOF

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808367.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查找和管理数据库的具体步骤

登录MySQL命令行使用SSH连接到服务器。 登录MySQL命令行:bashmysql -u root -p输入MySQL root用户的密码。查看数据库列表在MySQL命令行中查看所有数据库:sqlSHOW DATABASES;选择织梦CMS数据库选择织梦CMS使用的数据库:sqlUSE dedecmsv56gbk;查看数据库表查看织梦CMS数据库中…

DedeCMS Error Track:DedeCMS错误警告:连接数据库失败

当织梦CMS(DedeCMS)出现“连接数据库失败”的错误时,可以通过以下几个步骤进行排查和解决: 1. 检查数据库配置文件打开配置文件打开织梦CMS的数据库配置文件 include/config.inc.php。 使用FTP工具或SSH连接到服务器,然后打开该文件。检查配置信息确认数据库配置信息是否正…

SpringMVC内容

SpringMVC简介 SpringMVC(Model View Controller) 是以Servlet API为基础的 Web 框架并可以部署到 Servlet容器(比如:Tomcat),是控制层框架,主要负责与前端交互,接收前端的参数,在服务层进行交互,并把结果返回会前端页面。 SpringMVC工作原理当发送请求的时候,Dis…

Linux系统安装Pycharm专业版【附破解方法】

​写在前面 本教程适用于 Pycharm 2022.2.3 以下所有版本 一、版本信息 虚拟机产品:VMware Workstation 17 Pro 虚拟机版本:17.0.0 build-20800274 ISO映像文件:ubuntukylin-22.04-pro-amd64.iso Pycharm版本:PyCharm 2022.3.3 (Professional Edition) 资源链接:https:/…

谷歌收录批量查询,谷歌收录批量查询的方法步骤

谷歌收录批量查询是网站管理员和SEO专家常用的一种方法,用于同时查询多个页面或网站在谷歌搜索引擎中的收录情况。以下是几种常见的谷歌收录批量查询方法及其步骤: 一、使用Google Search Console(谷歌搜索控制台) 虽然Google Search Console主要面向单个网站的监控和管理,…

怎么查看网站是否被谷歌收录,查看网站是否被谷歌收录的快速检测方法

查看网站是否被谷歌收录,有多种快速检测方法可供选择。以下是一些常用的方法: 一、使用“site:”指令 打开谷歌搜索引擎:在浏览器中打开Google.com,确保使用的是谷歌的官方搜索引擎。 输入查询指令:在搜索框中输入“site:”加上你的网站域名(注意使用英文状态下的冒号,并…

10 月 4 日 S 组 风 雨 大 作

智障行为+2T1 T2 T3 T40 0 0 0好吧至少下一次不会考更低了 T1 你有个 n 个点 m 条边的无向图,每条边都有红蓝两种颜色中的一种,保证红色的边形成了这个图的一个生成树。 你希望给这些边赋上边权,保证边权是 1 ∼ m 的排列,使得红色的边是最小生成树。 希望这些边权形成的序…

南沙C++信奥赛陈老师解一本通题: 1828:【02NOIP提高组】均分纸牌

​【题目描述】有n堆纸牌,编号分别为 1,2,…,n。每堆上有若干张,但纸牌总数必为nn的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为:在编号为1的堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 n 的堆上取的纸牌,只能移到编号为n−1的堆上;其他堆上取的纸…

反射容斥

好久没写了呃呃呃……反射容斥恋のうた あとどれくらいの距離を 月へ歩いたら あとどれくらいの 寒い夜を重ねたら あとどれくらいの さよならを流したら まぶたの奥の泉が枯れ果てるとか 千年後もきっと続くだろう そう思ってた空洞を 満たしてあふれてしまうほどの この気持ち…

快乐数学5虚数

5 虚数 虚数总是让我感到困惑:这是一个数学抽象概念,方程是可处理它。 大学才会用到它。我们将用我们最喜欢的工具来攻克这个课题:关注关系,而非机械公式。 将复数视为数字系统的升级,就像零、小数和负数一样。 使用直观的图表,而不仅仅是文字,来理解概念。5.1 真正理解负…

Cisco Secure Firewall 3100 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Secure Firewall 3100 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Secure Firewall 3100 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog…

冲刺 CSP 联训模拟 2

T1 挤压 概率期望,二进制拆位 看到异或想到拆位算贡献 \[\begin{aligned} ans&=\sum_xx^2P(x)\\ &=\sum_x(b_1+b_2+...+b_{30})^2P(x)\ \ \ (b_i表示\ x\ 二进制下\ i\ 位的值)\\ &=\sum_x(b_1b_1+b_1b_2+. . .b_{30}b_{29}+b_{30}b_{30})P(x)\\ &=\sum_i^{30…