文章目录
- 一、下载安装
- 1. 升级 GCC
- 2. 重编译安装
- 3. 添加环境变量
- 4. Redis可执行文件
- 二、安装 Redis 服务
- 1. 手动安装并配置 Redis
- 2. 配置开机自启动服务
- 3. 配置 chkconfig 开机重启
- 4. 设置service启动信息
- 5. systemctl 管理 Redis 服务
- 三、Redis 配置
- 1. NETWORK配置
- 2. GENERAL 配置
- 3. SNAPSHOTTING 配置
- 4. REPLICATION 主从配置
- 5. SECURITY 安全配置
- 6. CLIENTS 连接配置
- 7. MEMORY MANAGEMENT 内存管理配置
- 8. THREADED I/O 多线程配置
- 9. APPEND ONLY MODE AOF 配置
- SLOW LOG 慢日志
- 四、其它
Redis官网推出新版本(v6.0及之后),在Centos 7 下安装与配置记录。
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
一、下载安装
像往常一样下载、解压 make,却收获了一堆错误
默认会安装到/usr/local/bin 目录下,不想安装到默认目录,所以这里用 PREFIX 指定了安装目录
$ wget http://download.redis.io/releases/redis-6.0.6.tar.gz
$ tar xzf redis-6.0.6.tar.gz
$ cd redis-6.0.6
$ make && make PREFIX=/usr/local/redis install
截取部分错误信息:
.....
In file included from server.c:30:0:
server.h:1051:5: 错误:expected specifier-qualifier-list before ‘_Atomic’
_Atomic unsigned int lruclock; /* Clock for LRU eviction */
^
server.c: 在函数‘serverLogRaw’中:
server.c:1032:31: 错误:‘struct redisServer’没有名为‘logfile’的成员
int log_to_stdout = server.logfile[0] == '\0';
^
server.c:1035:23: 错误:‘struct redisServer’没有名为‘verbosity’的成员
if (level < server.verbosity) return;
^
server.c:1037:47: 错误:‘struct redisServer’没有名为‘logfile’的成员
fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
^
server.c:1050:47: 错误:‘struct redisServer’没有名为‘timezone’的成员
nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
^
server.c:1050:63: 错误:‘struct redisServer’没有名为‘daylight_active’的成员
nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
^
server.c:1053:19: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
if (server.sentinel_mode) {
^
server.c:1058:32: 错误:‘struct redisServer’没有名为‘masterhost’的成员
role_char = (server.masterhost ? 'S':'M'); /* Slave or Master. */
^
server.c:1066:15: 错误:‘struct redisServer’没有名为‘syslog_enabled’的成员
if (server.syslog_enabled) syslog(syslogLevelMap[level], "%s", msg);
^
server.c: 在函数‘serverLog’中:
server.c:1076:30: 错误:‘struct redisServer’没有名为‘verbosity’的成员
if ((level&0xff) < server.verbosity) return;
.....
查了下,报错原因:Linux一般默认GCC版本是4.8.5,Redis新版本使用了更高版本的GCC
1. 升级 GCC
$ gcc -v # 查看gcc版本
$ yum -y install centos-release-scl # 升级到9.1版本
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
$ scl enable devtoolset-9 bash
#以上为临时启用,如果要长期使用gcc 9.1的话:
$ echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
2. 重编译安装
$ make && make PREFIX=/usr/local/redis install
看到最后打印 “It’s a good idea to run ‘make test’” 这一次安装成功了,
......
Hint: It's a good idea to run 'make test' ;)
make[1]: 离开目录“/root/redis-6.0.6/src”
cd src && make install
make[1]: 进入目录“/root/redis-6.0.6/src”
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: 离开目录“/root/redis-6.0.6/src”
3. 添加环境变量
编辑 /etc/profile
$ vi /etc/profile
在配置文件末尾添加环境变量
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin
$ . /etc/profle
运行 Redis 服务 (默认端口是6379)
$ redis-server –port 6379
4. Redis可执行文件
redis-server #Redis服务器
redis-cli #Redis命令行客户端
redis-benchmark #Redis性能测试工具
redis-check-aof #AOF文件修复工具
redis-check-dump #RDB文件检测工具
redis-sentinel #Sentinel 服务器
二、安装 Redis 服务
Make & install 只是安装了二进制文件到系统,并没有配置初使化脚本和配置。
参考 README.md 执行 ./utils/install_server.sh 命令对 Redis 进行初使化配置,并设置随系统自启动。
$ ./utils/install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
This systems seems to use systemd.
Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!
好吧,也不行了。改手动安装配置吧。
1. 手动安装并配置 Redis
拷贝conf配置文件,在redis的目录下有一个redis.conf文件,拷贝至/etc/redis目录下,没有则需要创建目录。然后 vi /etc/redis/6379.conf 进行手动配置。
新建目录用来存放Redis的配置文件
$ mkdir /etc/redis
新建目录用来存放Redis的持久化文件
$ mkdir -p /var/redis/6379
将配置文件模版复制到/etc/redis目录中,修改6379.conf 配置
由于初使化脚本中是以端口号做为参数命名配置文件的,所以这里重命为7379.conf
$ cp redis.conf /etc/redis/6379.conf
$ vi /etc/redis/6379.conf
# 使Redis以守护进程模式运行
daemonize yes
# 设置pid文件位置
pidfile /var/run/redis_6379.pid
#Redis监听的端口号
port 6379
#设置持久化文件存放位置
dir /var/redis/6379
2. 配置开机自启动服务
配置自启动 init.d/redis_6379,这里要注意下,由于前面 make install 的时候用了“PREFIX=/usr/local/redis” 重设置 redis 的安装目录,所以需要改下 redis_6379 中默认的目录。
$ cp utils/redis_init_script /etc/init.d/redis_6379
$ vi /etc/init.d/redis_6379
# 找到下面两行并注释掉
# EXEC=/usr/local/bin/redis-server
# CLIEXEC=/usr/local/bin/redis-cli
# 改正后的目录
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
现在可以通过service来管理服务:
$ service redis_6379 start|stop|status
3. 配置 chkconfig 开机重启
每 个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。
第一行告诉chkconfig缺省启动的运行级以及启动和 停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。
第二行对服务进行描述,可以用\ 跨行注释。
修改/etc/init.d/redis_6379
在第一行后插入内容
# chkconfig: 2345 99 10
# description: Start or Stop Redis server
关于chkconfig: 2345 99 10
第一位(X):是指定该脚本在哪个系统启动级别下运行,这里配置的2345,参考后面的 --level
第二位(Y):系统启动时,服务启动顺序。(需要注意的是,有的程序依赖与别的程序的话,启动顺序就要注意了,比如A程序的启动依赖于B程序的启动,那么A程序的这个值一定要比B程序大。)
第三位(Z):系统终止时,服务终止顺序。
–level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕。
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
4. 设置service启动信息
$ chkconfig redis_6379 on
# chkconfig name on/off/reset
on、off、reset用于改变service的启动信息。
on表示开启,off表示关闭,reset表示重置。
默认情况下,on和off开关只对运行级2,3,4,5有效,reset可以对所有运行级有效。
# 重启系统
$ reboot
# 检查服务是否正常启动
$ ps -ef | grep redis
# ping命令检查连接是否正常,正常就会收到PONG
$ redis-cli ping
# 关闭服务
$ redis-cli shutdown
# 手启服务时指定配置文件,(前面默认配置在/etc/redis/6379.conf)
$ redis-server /etc/redis/6379.conf
# 通过-h和-p参数指定IP和端口信息
$ redis-cli -h 127.0.0.1 -p 6379
5. systemctl 管理 Redis 服务
在systemctl中,与 service 类似,文件目录有所不同,
- 将 Redis 解压后的 utils 目录下找到文件:systemd-redis_server.service
- 复制到 /lib/systemd/syste 目录下并重命名为 redis_6379.service
cp systemd-redis_server.service /lib/systemd/system/redis_6379.service
vi
编辑 redis_6379.service 文件,找到并修改 ExecStart 这行
修改前:
[Service]
ExecStart=/usr/local/bin/redis-server --supervised systemd --daemonize no
## Alternatively, have redis-server load a configuration file:
#ExecStart=/usr/local/bin/redis-server /path/to/your/redis.conf
修改后 :
# --daemonize 参数根据自己需要可选
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf --daemonize no
## Alternatively, have redis-server load a configuration file:
#ExecStart=/usr/local/bin/redis-server /path/to/your/redis.conf
- 现在可以通过systemctl来管理服务:
systemctl start|stop|status redis_6379
三、Redis 配置
$ vi /etc/redis/6379.conf
1. NETWORK配置
bind:绑定IP地址,只允许来自指定网卡的Redis请求,如果想允许任意地址访问将 bind 注释掉就行。
protected-mode: Redis 安全访护层,默认开启:
- 关闭protected-mode模式,此时外部网络可以直接访问
- 开启protected-mode保护模式,需配置bind ip或者设置访问密码
port: 连接端口
# 配置外网可访问
# bind 127.0.0.1
protected-mode no
port 6379
2. GENERAL 配置
# 设置 Redis 是否以守护进程模式运行。
daemonize yes
# 设置pid文件存放位置,如果 Redis 不能在该目录创建的话会忽略掉,直接正常运行
pidfile /var/run/redis_6379.pid
# 设置日志级别
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel warning
# 日志的文件名,如果配置空字符,Redis 会将日志写到标准输出,
# 如果启用的后台进程模式运行,日志将会被写入 /dev/null
logfile ""
# 设置DB 的总数量,默认的打开的DB 0,可以用`select <dbid>` 切换到别的数据库,
# <dbid> 就是0到 'databases-1' 之间的一个序号。
databases 16
3. SNAPSHOTTING 配置
RDB方式持久化是通过快照(snapshotting)完成的,当符合一定条件时自动将内存中的所有数据生成一份副本并存在硬盘上。
根据配置规则进行自动快照,由两个参数:时间窗口M和改动的键的个数N,每当时间M内被更改的键的个数大于N时,即符合自动快照条件,每条快照条件占一行并且以save参数开头
# save <seconds> <changes>: 配置将DB 数据保存到硬盘的策略。
# 900秒内至少有一个 keys 改动,就会触发持久到硬盘
save 900 1
# 300秒内至少有10个 keys 改动,就会触发持久到硬盘
save 300 10
# 60秒内至少有10000个 keys 改动,就会触发持久到硬盘
save 60 10000
# 当Redis开启了RDB 并且在最后一次做写RDB失败时,会停止接收写入请求,导至Redis 不可用。
# 以提醒用户数据没有正确的持久化到硬盘。
# 如果RDB进程恢复正常工作后,将会自动恢复接上写入请求。
#
# 如果已经有设置对Redis 服务和持久化进行监控,且在持久化出错时,不想停止写入服务。可以禁用该配置。
stop-writes-on-bgsave-error yes
# 默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。
# 如果不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。
rdbcompression yes
# 在 Redis 5 开始会在 RDB 文件末尾生成一个 CRC64 校验值。启用该校验需要额外消耗10%的性能。
# 如果想要更好的性能,可以禁用该设置。
rdbchecksum yes
# 设置RDB 快照的文件名,默认是 dump.rdb
dbfilename dump.rdb
# 设置持久化文件的存放目录,默认是和当前配置文件保存在同一目录。
dir /var/redis/6379
- 当执行SAVE命令时,Redis同步地进行快照操作,在快照执行的过程中会阻塞所有来自客户端的请求。当数据比较多时,这一过程会导致Redis较长时间不能响应
- BGSAVE命令可以在后台异步地进行快照操作,快照的同时服务器还能继续响应客户端的请求。
- LASTSAVE命令获取最近一次成功快照的时间,返回Unix时间戳
- FLUSHALL会清除数据库中的所有数据,不论清空数据库的过程是否触发了自动快照条件,只要自动快照条件不为空,Redis就会执行一次快照操作。如果没有定义自动快照条件,执行FLUSHALL则不会进行快照
- 执行复制(replication)时,当设置了主从模式时,Redis会在复制初使化时进行快照。
- Radis默认会将快照文件存储在Redis当前进程的工作目录中的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件存储的路径和文件名。
4. REPLICATION 主从配置
# 主从同步配置。
# 1) redis主从同步是异步的,但是可以配置在没有指定slave连接的情况下使master停止写入数据。
# 2) 连接中断一定时间内,slave可以执行部分数据重新同步。
# 3) 同步是自动的,slave可以自动重连且同步数据。
#
# 设置当本机为slave节点时,设置master节点的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
# replicaof <masterip> <masterport>
# 当master服务设置了密码保护时,slave服务连接master的密码和名称
# masterauth <master-password>
# masteruser <username>
# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:
# 1) 如果 replica-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。
# 2) 如果 replica-serve-stale-data 设置为 "no",slave会回复"正在从master同步(SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
replica-serve-stale-data yes
# 可以配置salve实例是否接受写操作。
replica-read-only yes
# 同步策略: 磁盘或socket,默认磁盘方式
repl-diskless-sync no
# 如果非磁盘同步方式开启,可以配置同步延迟时间,以等待master产生子进程通过socket传输RDB数据给slave。
# 默认值为5秒,设置为0秒则每次传输无延迟。
repl-diskless-sync-delay 5
# slave根据指定的时间间隔向master发送ping请求。默认10秒。
# repl-ping-replica-period 10
# 设置数据备份的backlog大小。backlog是一个slave在一段时间内断开连接时记录slave数据的缓冲,所以一个slave在重新连接时,不必要全量的同步,而是一个增量同步就足够了,将在断开连接的这段
# 时间内把slave丢失的部分数据传送给它。
# 同步的backlog越大,slave能够进行增量同步并且允许断开连接的时间就越长。
# backlog只分配一次并且至少需要一个slave连接。
# repl-backlog-size 1mb
# 当master在一段时间内不再与任何slave连接,backlog将会释放。以下选项配置了从最后一个slave断开开始计时多少秒后,backlog缓冲将会释放。
# 0表示永不释放backlog
# repl-backlog-ttl 3600
# 从服务器的优先级, 当master不可用,Sentinel会根据slave的优先级选举一个master。
# 最低的优先级的slave,当选master。而配置成0,永远不会被选举
slave-priority 100
# 配置只有N个连接复制的时候才允许主实例写操作,这里的N 表示要是在线状态。
# lag 延迟单位为秒
# 当至少3个slave连接master的延迟时间小于10秒时,主实例才可以进行写操作
# min-replicas-to-write 3
# min-replicas-max-lag 10
5. SECURITY 安全配置
修改密码配置:
# 设置Redis连接密码,默认无,
# 如果配置了连接密码,客户端在连接Redis时需要通过【AUTH <password>】命令提供密码
requirepass 123456
# Redis的危险命令主要有:
# flushdb 清空数据库
# flushall 清空所有记录,数据库
# config 客户端连接后可配置服务器
# keys 客户端连接后可查看所有存在的键
# 作为服务端的redis-server,我们常常需要禁用以上命令来使服务器更加安全。
# 禁用的具体做法是,修改服务器的配置文件redis.conf,在SECURITY这一项中,来禁用远程修改 DB 文件地址。
# rename-command FLUSHALL ""
# rename-command FLUSHDB ""
# rename-command CONFIG ""
# rename-command KEYS ""
# 而如果想要保留命令,但是不能轻易使用,可以重命名命令来设定:
rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcR
rename-command FLUSHDB qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3e
rename-command CONFIG FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRG
rename-command KEYS eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ
命令行设置密码:
redis 127.0.0.1:6379> config set requirepass 123456
密码验证:
127.0.0.1:6379> auth 123456
查询密码:
redis 127.0.0.1:6379> config get requirepass
登录有密码的Redis,在登录的时候加上密码参数
redis-cli -p 6379 -a 123456
如果配置文件中没添加密码 那么redis重启后,密码失效;
AUTH命令跟其他redis命令一样,是没有加密的;阻止不了攻击者在网络上窃取你的密码;
认证层的目标是提供多一层的保护。如果防火墙或者用来保护redis的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问redis的。
6. CLIENTS 连接配置
# 设置最大客户端连接数。 默认为10000,最大值为当前'file limit - 32'
# 如果连接数用完了,新客户端连接时会报 'max number of clients reached'
maxclients 10000
7. MEMORY MANAGEMENT 内存管理配置
# 指定Redis最大内存限制, Redis在启动时会把数据加载到内存中,
# 达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,
# 当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。
maxmemory <bytes>
# 在内存达到上限后的处理策略
# 1. volatile-lru -> 回收 ***最久*** 没有使用的键(近似 LRU),但仅限于在过期集合的键。
# 2. allkeys-lru -> 所有键中回收 ***最久*** 使用的键(近似 LRU)。
# 3. volatile-lfu -> 回收使用 ***频率最少*** 的键(近似 LFU),但仅限于在过期集合的键。
# 4. allkeys-lfu -> 所有键中回收使用 ***频率最少*** 的键(近似 LFU)。
# 5. volatile-random -> 回收 ***随机*** 的键,但仅限于在过期集合的键。
# 6. allkeys-random -> 所有键中回收 ***随机*** 的键。
# 7. volatile-ttl ->回收在过期集合的键,并且 ***优先回收存活时间(TTL)较短*** 的键。
# 8. noeviction -> 直接返回错误,当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)。
# 近似LRU算法,样本数
# Redis的LRU, LFU and minimal TTL 算法并非完整的实现。它会尝试运行一个近似LRU的算法,通过对少量keys进行取样,然后回收其中一个最好的key。
maxmemory-samples 5
8. THREADED I/O 多线程配置
Redis在处理客户端的请求时,包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。除了主线程外,它也有后台线程在处理一些较为缓慢的操作,例如清理脏数据、空间碎片整理、无用连接的释放、大 key 的删除等等。
Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,对于小数据包,Redis服务器可以处理80,000到100,000 QPS,对于80%的公司来说,单线程的Redis已经足够使用了。
但随着越来越复杂的业务场景,有些公司可能需要更大的QPS。常见的解决方案是在分布式架构中对数据进行分区并采用多个服务器,但该方案有非常大的缺点,例如要管理的Redis服务器太多,维护代价大;某些适用于单个Redis服务器的命令不适用于数据分区;数据分区无法解决热点读/写问题;数据偏斜,重新分配和放大/缩小变得更加复杂等等。
从Redis自身角度来说,因为读写网络的read/write系统调用占用了Redis执行期间大部分CPU时间,瓶颈主要在于网络的 IO 消耗, 优化主要有两个方向:
• 提高网络 IO 性能,典型的实现比如使用 DPDK 来替代内核网络栈的方式
• 使用多线程充分利用多核,典型的实现比如 Memcached。
协议栈优化的这种方式跟 Redis 关系不大,支持多线程是一种最有效最便捷的操作方式。所以总结起来,redis支持多线程主要就是两个原因:
• 可以充分利用服务器 CPU 资源,目前主线程只能利用一个核
• 多线程任务可以分摊 Redis 同步 IO 读写负荷
Redis的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程顺序执行。所以我们不需要去考虑控制 key、lua、事务,LPUSH/LPOP 等等的并发及线程安全问题。
Redis6.0的多线程默认是禁用的,只使用主线程。如需开启需要修改redis.conf配置文件:io-threads-do-reads
# 如果是4核机器的话,建议用2至3个I/O线程,如果有8核,可以配置6个I/O线程。
io-threads 2
io-threads-do-reads yes
9. APPEND ONLY MODE AOF 配置
当使用Redis存储非临时数据时,一般需要打开AOF持久化来降低进程中止导致的数据丢失,AOF将Redis执行的每一条写命令追加到硬盘文件中。
Redis允许同时开始AOF和RDB,此时重启Redis会使用AOF来恢复数据.
# 默认是没有开启AOF(append only file)方式持久化,可以通过appendonly参数启用
appendonly true
# 目录和RDB文件目录一样,默认文件名是appendonly.aof,可通过append filename参数修改:
appendfilename "appendonly.aof"
#由于操作系统的缓存机制,数据并没有立即写入硬盘,而是进入了硬盘的缓存,默认系统每30秒会执行一次同步操作,以将缓存中的数据真正地写入硬盘,在这30的过程中如果异常退出则会导制硬盘缓存中的数据丢失,设置同步的时机:
# appendfsync always #每次修改同步一次
appendfsync everysec #每秒同步一次
# appendfsync no #no表示交同操作系统来做即30秒一次。
# 设置AOF文件的重写
# BGREWRITEAOF命令手动执行AOF重写
# 当目前的AOF文件大小超过上一次重写时的大少的百分之多少时会进行重写,如果之前没有重写,则以启动进的大小为依据
auto-aof-rewrite-percentage 100
# 限制允许重写的最小AOF文件大小
auto-oaf-rewrite-min-size 60mb
# aof-load-truncated的默认值为 yes。当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。
# 如果是no,用户必须手动redis-check-aof修复AOF文件才可以重启Redis服务器。
aof-load-truncated yes
# 对于 persistence 持久化存储,Redis 有两种持久化方案,RDB(Redis DataBase)和 AOF(Append-Only File)。其中RDB是一份内存快照,AOF则为可回放的命令日志,他们各有特点也相互独立。4.0开始允许使用RDB-AOF混合持久化的方式,结合了两者的优点,通过 aof-use-rdb-preamble 配置项可以打开混合开关。
#
# 表示是否开启混合存储,默认是开启的。
# 开启后Redis保证RDB转储跟AOF重写不会同时进行。
# 当Redis启动时,即便RDB和AOF持久化同时启用且AOF,RDB文件都存在,则Redis总是会先加载AOF文件,这是因为AOF文件被认为能够更好的保证数据一致性。
aof-use-rdb-preamble yes
SLOW LOG 慢日志
# 执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-log-slower-than 10000
# 慢查询日志长度, 当一个新的命令被写进日志的时候,最老的那个记录会被删掉。
# 这个长度没有限制。只要有足够的内存就行。可以通过 SLOWLOG RESET 来释放内存
slowlog-max-len 128
四、其它
- Redis是一个字典结构的存储服务器,一个Redis实例提供了16个用来存储数据的字典,客户端可以指定存储在哪个字典中。与关系型数据库可以创建多个数据库相似。
- Redis每个字典对外都是以0开始的递增数据命名。可以通过修改配置参数databases来修改这一数字。
- Redis 不支持自定义数据库的名称,也不能为每个数据库独立设置访问密码。
- 多个数据库之间并不是完全隔离的,比如 flushall 命令可以清空一个Redis实例中所有的数据库中的数据。
- 客户端与Redis建立连接后会自动选择0号数据库,可以能过select命令更换数据库,如要选择1号库 redis> select 1
- 不同的应用应使用不同的Redis实例