首页 > 数据库 >Redis安装管理, RDB, AOF ubuntu使用

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

时间:2024-10-05 10:45:49浏览次数:1  
标签:AOF 6379 Redis rdb redis etc aof ubuntu root

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即为慢的指令,默认值为10000us

127.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=123456

color () {
    RES_COL=60
    MOVE_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_COL
    echo -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 ] ;do
    sleep 1
    result=`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

 

标签:AOF,6379,Redis,rdb,redis,etc,aof,ubuntu,root
From: https://www.cnblogs.com/ludingchao/p/18447674

相关文章

  • Redisson 3.37.0 发布,官方推荐的 Redis 客户端
    Redisson3.37.0发布,官方推荐的Redis客户端来源:OSCHINA编辑: 白开水不加糖2024-10-0411:38:36 0Redisson3.37.0 现已发布,这是一个Java编写的Redis客户端,具备驻内存数据网格(In-MemoryDataGrid)功能,并获得了Redis的官方推荐。此版本更新内容如下:F......
  • django + redis + celery 异步任务
    目录结构E:.│db.sqlite3│Dockerfile│manage.py│requirements.txt│├─celery_tasks#自定义一个celery的工作目录││config.py#celery配置文件││__init__.py│││├─sms│tasks.py#worker任务│__init__.py│......
  • 八、Redis key空间通知
    redis的key空间通知是实时监控Redis键和值的更改。那什么是key空间通知呢?当客户端执行一些命令,比如setnameTom,会创建或更新key。此时Redis服务器会将这些事件发布到通道中,客户端可以通过subscribe通道,以便接收以某种方式影响Redis数据集的事件。如果发布/订阅客户端断开连接,然......
  • Ubuntu+Cuda+cudnn安装
    问题描述实验室的Ubuntu主机重启之后显示器分辨率显示异常,双屏只亮了一个,另外一个显示无信号。打开nvidia-smi显示找不到驱动,遂从网上搜集重新安装驱动以及cudnn的教程。此文记录此过程,方便后续查阅。软硬件版本:Rtx3090+Ubuntu22.041.安装驱动#removenivida*sudoapt-g......
  • 七、Redis之sorted set
    sortedset也是Redis中常用的类型。可以用来解决热搜,排名前十等问题。ZADDZADDkey[NX|XX][GT|LT][CH][INCR]scoremember[scoremember...]zadd将多个分数和元素对添加到sortedset中。还有些选项影响了zadd的行为:XX:仅更新已存在的元素。不要添加新元素。NX:只添加......
  • 【SpringBoot】结合Redis实现缓存
    Redis经常用于缓存。接下来,我们以Springboot框架为例。实现一些Redis的基础操作,创建完SpingBoot项目后,具体步骤如下图:  pom中添加项目依赖<!--Redis缓存--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-re......
  • wsl重装Ubuntu遇到的一些问题( WslRegisterDistribution failed with error: 0x800410
        不知道什么原因,VSCode连接WSLUbuntu总是失败,遂决定重装Ubuntu。    但是卸载原来的Ubuntu后,安装新的Ubuntu报错:WslRegisterDistributionfailedwitherror:0x80041002Error:0x80041002(null),查了比较多的帖子,使用了以下方法最终解决:1.关闭"适用于l......
  • How to use the Ubuntu
    HowtousetheUbuntuIntroduction‍AsfarasIhavenoted,IwillforcemyselftowriteallmyblogsinEnglish.So,ifyouareluckyorunlucky,youhavereadthisblog,andIhopeitcanbehelpfultoyou.ReadinganEnglishdocumentcanbeatrickyt......
  • How to use the Ubuntu
    HowtousetheUbuntuIntroduction‍AsfarasIhavenoted,IwillforcemyselftowriteallmyblogsinEnglish.So,ifyouareluckyorunlucky,youhavereadthisblog,andIhopeitcanbehelpfultoyou.ReadinganEnglishdocumentcanbeatrickyt......
  • 25赛季算法组第一阶段第二次培训(ubuntu安装与基本使用)
    25赛季算法组第一阶段第二次培训1.Ubuntu的介绍1.1.操作系统和操作系统的选择操作系统,英文名称OperatingSystem,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心。操作系统的作用是管理和控制计算机系统中的......