01 NoSQL之Redis配置与优化

目录

1.1 Redis介绍

1.1.1关系数据库与非关系型数据库

1 . 关系型数据库

2. 非关系型数据库

3.非关系型数据库产生背景

(1)  High performance--对数据库高并发读写需求

(2)  Huge Storage--对海量数据高效存储与访问需求

(3)  High Scalability && High Availability--对数据库高可扩展性与高可用性需求

1.1.2 Redis 基础

1.Redis 简介

2.Redis 安装部署

3.配置参数

1.1.3 Redis 命令工具

1.redis-cli 命令行工具

2.redis-benchmark 测试工具

(1)测试请求性能

(2)测试存取性能 

1.1.4 Redis 常用命令

1.基本命令

2.Key 相关命令

示例

1.添加键值对

2.查看当前数据库中所有键 

3.查看以特定前缀开头的键

4.检查键是否存在 

5.删除键 

 6.获取键的类型

7.重命名键 

8.尝试重命名键,但目标已存在时不执行 

9.查看当前数据库中键的数量 

1.1.5 Redis 多数据库常用命令

1. 多数据库间切换

2. 多数据库间移动数据

3. 清除数据库内数据

1.1.6 Redis 持久化

1.概述

2.RDB 和 AOF 的区别

3.RDB 持久化配置实例

4.AOF 持久化配置实例

5.注意事件

1.1.7  redis设置密码


1.1 Redis介绍

        Redis 数据库是一个非关系型数据库,在正式学习 Redis 之前,先来了解关系型数据库与非关系型数据库的概念。

1.1.1关系数据库与非关系型数据库

        数据库按照数据库的结构可以分为关系型数据库与其他数据库,而这些其他数据库我们将其统称为非关系型数据库。

1 . 关系型数据库

        关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向于记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。现实世界中,各种实体与实体之间的各种联系都可以用关系模型来表示。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。

        主流的关系型数据库包括 Oracle、MySQL、SQLServer、Microsoft Access、DB2 等

2. 非关系型数据库

        NoSQL(NoSQL= Not Only SQL),意思是“不仅仅是 SQL",是非关系型数据库的总称。主流的 NoSQL 数据库有 Redis、MongBD、Hbase、CouhDB 等等。以上这些非关系型数据库,他们的存储方式、存储结构以及使用的场景都是完全不同的。所以我们认为它是一个非关系型数据库的集合,而不是像关系型数据库一样,是一个统称。换言之,除了主流的关系型数据库以外的数据库,都可以认为是非关系型的。NOSQL数据库凭借着其非关系型、分布式、开源及横向扩展等优势,被认为是下一代数据库产品。

3.非关系型数据库产生背景

        关系型数据库已经诞生很久了,而且一直在使用。面对这样的情况,为什么还会产生NoSQL?那么,下面就来介绍一下 NoSQL产生的背景。随着Web2.0 网站的兴起,关系型数据库在应对 Web2.0网站,特别是海量数据和高并发的 SNS(Social Networking Services,即社交网络服务)类型的 Web2.0 纯动态网站时暴露出很多难以解决的问题,例如三高问题。

(1)  High performance--对数据库高并发读写需求

        Web2.0网站会根据用户的个性化信息来实时生成动态页面和提供动态信息,因此无法使用动态页面静态化技术。所以数据库的并发负载非常高,一般会达到10000次/s 以上的读写请求。关系型数据库对于上万次的查询请求还是可以勉强支撑的,但出现上万次的写数据请求,硬盘 10 就已经无法承受了。对于普通的 BBS 网站,往往也会存在高并发的写数据请求。

(2)  Huge Storage--对海量数据高效存储与访问需求

        类似于 Facebook、Friendfeed 这样的 SNS 网站,每天会产生大量的用户动态信息。如 Friendfeed,一个月就会产生不少于 2.5 亿条用户动态信息,对于关系型数据库来说,在一个包含 2.5 亿条记录的表中执行 SQL查询,查询效率是非常低的。

(3)  High Scalability && High Availability--对数据库高可扩展性与高可用性需求

        在 Web 架构中,数据库是最难进行横向扩展的。当应用系统的用户量与访问量与日俱增时,数据库是没办法像 Web 服务一样,简单地通过添加硬件和服务器节点来扩展其性能和负载能力的。尤其对于一些需要 24 小时对外提供服务的网站来说,数据库的升级与扩展往往伴随着停机维护与数据迁移,其工作量是非常庞大的。

        关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的 MVSQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。

1.1.2 Redis 基础

了解关系型数据库与非关系型数据库之后,我们重点来学习非关系型数据库Redis的相关知识。

1.Redis 简介

        Redis(RemoteDictionaryServer,远程字典型)是一个开源的、使用C语言编写的NOSQL数据库。Redis 基于内存运行并支持持久化,采用 key-value(键值对)的存储形式是目前分布式架构中不可或缺的一环。

        Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis 进程,而 Redis 的实际处理速度则是完全依靠于主进程的执行效率。若在服务器上只运行一个Redis 进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;若在同一台服务器上开启多个 Redis 进程,Redis 在提高并发处理能力的同时会给服务器的 CPU造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis 进程。若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若 CPU 资源比较紧张,采用单进程即可。

        Redis 具有以下几个优点:

  • 具有极高的数据读写速度,数据读取的速度最高可达到110000次/s,数据写入速度最高可达到 81000 次/s。
  • 支持丰富的数据类型,不仅仅支持简单的 key-value 类型的数据,还支持 Strings, ListsHashes,Sets 及 Ordered Sets 等数据类型操作。
  • 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • 原子性,Redis 所有操作都是原子性的,
  • 支持数据备份,即 master-salve 模式的数据备份。
  • Redis 作为基于内存运行的数据库,缓存是其最常应用的场景之一。除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。

        Redis 作为基于内存运行的数据库,缓存是其最常应用的场景之一。除此之外,Redis常见应用场景还包括获取最新 N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。

2.Redis 安装部署

        Redis的安装相对于其他服务来说比较简单。首先需要到Redis 官网(https:/www.redis.io)下载相应的源码软件包,然后上传至 Linux 系统的服务器中进行解压安装。本章中以 redis-4.0.9.tar.gz 为例进行 Redis 服务的安装和配置讲解。

        通常情况下,在 Linux 系统中进行源码编译安装,需要先执行./configure 进行环境检查与配置,从而生成 Makefile 文件,再执行 make && make instal 命令进行编译安装。而 Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,可直接进入解压后的软件包目录,执行make与 make install 命令进行安装。

[root@localhost ~]# ll
总用量 1704
-rw-------. 1 root root    1592 6月  10 15:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1737022 9月   9 2019 redis-4.0.9.tar.gz
[root@localhost ~]# tar -zxvf  redis-4.0.9.tar.gz 
[root@localhost ~]# yum -y install gcc* zlib-devel                          //下载需要的语言
[root@localhost redis-4.0.9]# make 
[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install          //指定安装路径
[root@localhost redis-4.0.9]# ln -s /usr/local/redis/bin/* /usr/local/bin/   //做个软连接

        解决方法1:用make MALLOC=libc指定内存分配器为 libc进行编译

        解决方法2:make clean && make distclean

        make install 只是安装了二进制文件到系统中,并没有启动脚本和配置文件。软件包中默认提供了一个 install server.sh 脚本文件,通过该脚本文件可以设置 Redis 服务所需要的相关配置文件。当脚本运行完毕,Redis 服务就已经启动,默认侦听端口为6379。

Welcome to the redis service installer
This script will help you easily set up a running redis serverPlease select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379    
Config file    : /etc/redis/6379.conf             //配置文件路径 
Log file       : /var/log/redis_6379.log             //日志文件路径 
Data dir       : /var/lib/redis/6379             //数据文件路径 
Executable     : /usr/local/bin/redis-server        //可执行文件路径 
Cli Executable : /usr/local/bin/redis-cli            //客户端命令行工具
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# netstat -anpt | grep redis            //查看redis进程是否启动
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      5442/redis-server 1 
[root@localhost utils]# 

3.配置参数

        Redis 主配置文件为/etc/redis/6379.conf,由注释行与设置行两部分组成。与大多数Linux 配置文件一样,注释性的文字以“#”开始,包含了对相关配置内容进行的说明和解释。除了注释行与空行以外的内容即为设置行。可根据生产环境的需求调整相关参数,如下

[root@localhost utils]# vim /etc/redis/6379.conf bind 127.0.0.1 192.168.10.102      //监听的主机地址 
port 6379         //端口 
daemonize yes     //启用守护进程 
pidfile /var/run/redis_6379.pid     //指定 PID 文件 
loglevel notice     //日志级别 
logfile /var/log/redis_6379.log     //指定日志文件 
[root@localhost~]#/etc/init.d/redis_6379 restart 
[root@localhost utils]# netstat -anpt | grep redis

        除了上述配置参数外,Redis 主配置文件中还包含很多其它的配置参数,具体内容如表

配置选项

作用

timeout 300

当客户端闲置300秒后关闭连接,如果指定为0,则表示关闭该功能

dbfilename dump.rdb

指定本地数据库文件名,默认值为dump.rdb

dir /var/lib/redis/6379

指定本地数据库存放目录

maxclients 10000

设置同一时间最大客户端连接数,默认为10000。Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置为0,表示不限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回“max number of clients reached”错误信息

rdbcompression yes

指定存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩,如果为了节省CPU资源,可以关闭该选项,但会导致数据库文件变得巨大

slaveof

当本机为从服务器时,设置主服务的IP地址及端口。在Redis启动时,从服务器会自动从主服务进行数据同步

masterauth

当主服务设置了密码保护时,从服务连接主服务的密码

maxmemory

指定Redis最大内存限制。Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以读取数据

appendonly

如果设置为yes,则启用Redis的AOF(Append Only File)持久化机制。这意味着每次写操作都会记录到一个追加文件中,从而可以在服务器重启时恢复数据。如果设置为no,则不启用AOF持久化。

appendfsync

控制AOF持久化的同步频率。如果设置为

everysec,则每秒同步一次AOF文件到磁盘。其他选项包括always(每次写操作都同步)和no(让操作系统决定何时同步)。

include /path/to/local.conf

这不是Redis标准配置中的一个选项。通常,Redis配置文件(如

redis.conf)可以包含include指令来包含其他配置文件,但格式应该是include /path/to/other.conf,指向另一个配置文件的路径。这可能是一个误解或特定环境下的自定义配置。

maxmemory

设置Redis可以使用的最大内存量(以字节为单位)。当达到这个限制时,Redis将根据配置的策略(如volatile-lru、allkeys-lru等)来删除键以释放内存。

maxmemory-policy

定义当达到maxmemory限制时,Redis应该使用哪种内存回收策略。常见的策略包括基于LRU(最近最少使用)的淘汰算法、基于TTL(生存时间)的淘汰算法等。

requirepass

设置Redis服务器的密码。如果设置了密码,客户端在连接时需要提供AUTH命令和相应的密码才能进行操作。

1.1.3 Redis 命令工具

        Redis 软件提供了多个命令工具。安装 Redis 服务时,所包含的软件工具会同时被安装到系统中,在系统中可以直接使用。这些命令工具的作用分别如下所示。

  • redis-server:用于启动 Redis 的工具:
  • redis-benchmark:用于检测 Redis 在本机的运行效率:
  • redis-check-aof:修复 AOF 持久化文件;
  • redis-check-rdb:修复 RDB 持久化文件:
  • redis-cli:Redis 命令行工具。

        本小节只介绍 redis-cli、redis-benchmark 命令工具的使用。

1.redis-cli 命令行工具

        Redis 数据库系统也是一个典型的 C/S(客户端/服务器端)架构的应用,要访问 Redis数据库需要使用专门的客户端软件。Redis 服务的客户端软件就是其自带的redis-ci 命令行工具。使用 redis-cli 连接指定数据库,连接成功后会进入提示符为"远程主机IP 地址:端口号>”的数据库操作环境,例如“127.0.0.1:6379>"。用户可以输入各种操作语句对数据库进行管理。如执行 ping 命令可以检测 Redis 服务是否启动。

[root@localhost utils]#  redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 

        在进行数据库连接操作时,可以通过选项来指定远程主机上的Redis 数据库。命令语法为redis-cli -h host -p port -a password,其中-h指定远程主机、-p 指定 Redis 服务的端口号、-a指定密码。若不添加任何选项表示,连接本机上的 Redis 数据库;若未设置数据库密码可以省略-a选项。例如执行以下命令可连接到主机为 192.168.10.161,端口为6379的 Redis 数据库,并査看 Redis 服务的统计信息。若要退出数据库操作环境,执行“exit"或"quit”命令即可返还原来的 Shell 环境。 

[root@localhost utils]# redis-cli -h 192.168.10.102 -p 6379
192.168.10.102:6379> exit
[root@localhost utils]# 
2.redis-benchmark 测试工具

        redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

参数

描述

-h

指定服务器主机名

-p

指定服务器端口

-s

指定服务器socket

-c

指定并发连接数

-n

指定请求数

-d

以字节的形式指定SET/GET值的数据大小

-k

1=keep alive(保持连接), 0=reconnect(重新连接)

-r

SET/GET/INCR使用随机key, SADD使用随机值

-P

通过管道传输请求

-q

强制退出redis,仅显示query/sec值

--csv

以CSV格式输出

-l

生成循环,永久执行测试

-t

仅运行以逗号分隔的测试命令列表

-I

Idle模式。仅打开N个idle连接并等待

(1)测试请求性能
root@localhost utils]# redis-benchmark -h 192.168.10.102 -p 6379 -c 100 -n 1000000
====== PING_INLINE ======1000000 requests completed in 20.24 seconds100 parallel clients        ##100个并发连接3 bytes payloadkeep alive: 127.65% <= 1 milliseconds
95.42% <= 2 milliseconds
99.83% <= 3 milliseconds
99.96% <= 4 milliseconds
99.97% <= 5 milliseconds    ##99.97%的命令执行时间小于等于1毫秒
99.98% <= 6 milliseconds
99.98% <= 7 milliseconds
99.98% <= 8 milliseconds
99.99% <= 9 milliseconds
99.99% <= 11 milliseconds
99.99% <= 12 milliseconds
99.99% <= 13 milliseconds
99.99% <= 14 milliseconds
100.00% <= 19 milliseconds
100.00% <= 19 milliseconds
49412.00 requests per second        #每秒的请求数====== PING_BULK ======1000000 requests completed in 19.82 seconds100 parallel clients3 bytes payloadkeep alive: 129.83% <= 1 milliseconds
96.37% <= 2 milliseconds
99.84% <= 3 milliseconds
99.99% <= 4 milliseconds
100.00% <= 4 milliseconds
50456.63 requests per second====== SET ======1000000 requests completed in 19.23 seconds100 parallel clients3 bytes payloadkeep alive: 130.81% <= 1 milliseconds
97.85% <= 2 milliseconds
99.95% <= 3 milliseconds
99.99% <= 4 milliseconds
99.99% <= 5 milliseconds
100.00% <= 6 milliseconds
100.00% <= 7 milliseconds
100.00% <= 7 milliseconds
51993.97 requests per second====== GET ======1000000 requests completed in 20.21 seconds100 parallel clients3 bytes payloadkeep alive: 128.11% <= 1 milliseconds
95.28% <= 2 milliseconds
99.74% <= 3 milliseconds
99.98% <= 4 milliseconds
100.00% <= 5 milliseconds
100.00% <= 5 milliseconds
49487.80 requests per second====== INCR ======1000000 requests completed in 20.57 seconds100 parallel clients3 bytes payloadkeep alive: 126.09% <= 1 milliseconds
93.96% <= 2 milliseconds
99.81% <= 3 milliseconds
99.99% <= 4 milliseconds
100.00% <= 5 milliseconds
100.00% <= 6 milliseconds
48616.85 requests per second====== LPUSH ======1000000 requests completed in 20.09 seconds100 parallel clients3 bytes payloadkeep alive: 126.60% <= 1 milliseconds
95.27% <= 2 milliseconds
99.68% <= 3 milliseconds
99.94% <= 4 milliseconds
99.98% <= 5 milliseconds
99.99% <= 7 milliseconds
99.99% <= 8 milliseconds
100.00% <= 9 milliseconds
100.00% <= 9 milliseconds
49773.53 requests per second^CUSH: 51656.71
[root@localhost utils]# 
(2)测试存取性能 
[root@localhost utils]# redis-benchmark -h 192.168.10.102 -p 6379 -q -d 100
PING_INLINE: 51466.80 requests per second            //每秒完成多少次PING操作
PING_BULK: 51867.22 requests per second
SET: 50403.23 requests per second                    //SET:每秒完成多少次SET key vlaue
GET: 51203.28 requests per second                    //每秒完成多少次GET key vlaue
INCR: 50761.42 requests per second                     //INCR:每秒完成多少次原子计数
LPUSH: 48638.13 requests per second               
RPUSH: 47460.84 requests per second
LPOP: 48285.85 requests per second
RPOP: 49825.61 requests per second
SADD: 50377.83 requests per second
HSET: 49875.31 requests per second
SPOP: 50377.83 requests per second
LPUSH (needed to benchmark LRANGE): 45766.59 requests per second
LRANGE_100 (first 100 elements): 28901.73 requests per second
LRANGE_300 (first 300 elements): 11215.79 requests per second
LRANGE_500 (first 450 elements): 7436.60 requests per second
LRANGE_600 (first 600 elements): 4990.27 requests per second
MSET (10 keys): 43497.17 requests per second                MSET:每秒多个key vlaue请求次数

 (3)set 与 lpush 操作性能

[root@localhost utils]# redis-benchmark -t set,lpush -n 10000 -q
SET: 51813.47 requests per second
LPUSH: 47169.81 requests per second
[root@localhost utils]# 

1.1.4 Redis 常用命令

1.基本命令

命令

描述

示例

set

存放数据

127.0.0.1:6379> set teacher zhanglong

get

获取数据

127.0.0.1:6379> get teacher

2.Key 相关命令

命令

描述

示例

keys

取符合规则的键值列表

127.0.0.1:6379> keys *

exists

判断键值是否存在

127.0.0.1:6379> exists teacher

del

删除指定 key

127.0.0.1:6379> del v5

type

获取 key 对应的 value 值类型

127.0.0.1:6379> type k1

rename

对已有 key 进行重命名

127.0.0.1:6379> rename v22 v2

renamenx

对已有 key 进行重命名,并检测新名是否存在

127.0.0.1:6379> renamenx v2 teacher

dbsize

查看当前数据库中 key 的数目

127.0.0.1:6379> dbsize

示例

1.添加键值对
127.0.0.1:6379> set k1 1 OK 
127.0.0.1:6379> set k2 2 OK  ...
2.查看当前数据库中所有键 
127.0.0.1:6379> KEYS *
1)"teacher"  
2) "k1"  
3) "k2"  ...
3.查看以特定前缀开头的键
127.0.0.1:6379> KEYS v*  
1) "v1"  
2) "v5"  
3) "v22"  ...
4.检查键是否存在 
127.0.0.1:6379> exists teacher  (integer) 1  
127.0.0.1:6379> exists tea  (integer) 0
5.删除键 
127.0.0.1:6379> del v5  (integer) 1  
127.0.0.1:6379> get v5  (nil)
 6.获取键的类型
127.0.0.1:6379> type k1  
string
7.重命名键 
127.0.0.1:6379> rename v22 v2  
OK  
127.0.0.1:6379> get v2  "5"
8.尝试重命名键,但目标已存在时不执行 
127.0.0.1:6379> renamenx v2 teacher  
(integer) 0
9.查看当前数据库中键的数量 
127.0.0.1:6379> dbsize 
(integer) 5

1.1.5 Redis 多数据库常用命令

1. 多数据库间切换

Redis 默认包含 16 个数据库(编号 0-15),可以通过 SELECT 命令进行切换。

命令

描述

示例

SELECT index

切换到指定编号的数据库

SELECT 10

(切换到编号为10的数据库)

127.0.0.1:6379> SELECT 10  
OK

2. 多数据库间移动数据

Redis 支持使用 MOVE 命令将数据从一个数据库移动到另一个数据库。

命令

描述

示例

MOVE key db

将key从当前数据库移动到db指定的数据库

MOVE k1 1(将k1从当前数据库移动到编号为1的数据库)

实例:

127.0.0.1:6379> SET k1 100  
OK  
127.0.0.1:6379> SELECT 1  
OK  
127.0.0.1:6379[1]> GET k1  
(nil)  
127.0.0.1:6379[1]> SELECT 0  
OK  
127.0.0.1:6379> GET k1  
"100"  
127.0.0.1:6379> MOVE k1 1  
(integer) 1  
127.0.0.1:6379> SELECT 1  
OK  
127.0.0.1:6379[1]> GET k1  
"100"  
127.0.0.1:6379[1]> SELECT 0  
OK  
127.0.0.1:6379> GET k1  
(nil)

3. 清除数据库内数据

  • FLUSHDB 命令用于清空当前数据库的所有数据。
  • FLUSHALL 命令用于清空所有数据库的数据。

实例:

127.0.0.1:6379[0]> SET key1 value1  
OK  
127.0.0.1:6379[0]> FLUSHDB  
OK  
127.0.0.1:6379[0]> GET key1  
(nil)  # 切换到数据库 1  
127.0.0.1:6379[0]> SELECT 1  
OK  
127.0.0.1:6379[1]> SET key2 value2  
OK  
# 清空所有数据库  
127.0.0.1:6379[1]> FLUSHALL  
OK  
127.0.0.1:6379[1]> SELECT 0  
OK  
127.0.0.1:6379[0]> GET key1  
(nil)  
127.0.0.1:6379[0]> SELECT 1  
OK  
127.0.0.1:6379[1]> GET key2  
(nil)

1.1.6 Redis 持久化

1.概述

Redis 支持两种持久化方式:RDB(Redis DataBase)和 AOF(Append Only File)。这两种方式分别通过不同的机制来确保数据在 Redis 重启后能够恢复。

2.RDB 和 AOF 的区别

特性

RDB

AOF

原理

定时将内存中的数据生成快照保存到磁盘

以追加的方式记录每次写命令到文件中,重启时重新执行命令恢复数据

触发方式

手动(save)、自动(bgsave,基于配置的时间间隔和变化量)

配置文件控制,自动进行

优点

1. 紧凑的二进制文件,适合备份和全量复制
2. 恢复数据快

1. 实时性高,丢失数据少
2. 可读性高,便于调试

缺点

1. 数据无法做到实时持久化
2. fork 操作较重,频繁执行成本高
3. 可能存在版本兼容性问题

1. 文件体积可能较大
2. 恢复数据较慢,尤其是大文件

3.RDB 持久化配置实例

[root@localhost ~]# vim /etc/redis/6379.conf 
# RDB 持久化配置  
save 900 1   # 900秒内有1个key变化则触发  
save 300 10  # 300秒内有10个key变化则触发  
save 60 10000 # 60秒内有10000个key变化则触发  
dbfilename dump.rdb  # RDB文件名  
dir /var/lib/redis/6379  # RDB文件存储路径  
rdbcompression yes  # 是否压缩  # 启动和重启Redis服务  
[root@localhost ~]# /etc/init.d/redis_6379 restart

4.AOF 持久化配置实例

[root@localhost ~]# vim /etc/redis/6379.conf 
# AOF 持久化配置 
# AOF 持久化配置  
appendonly yes  # 开启AOF  
appendfilename "appendonly.aof"  # AOF文件名  # AOF 同步策略  
# appendfsync always  # 每次写操作都同步  
appendfsync everysec  # 每秒同步一次(推荐)  
# appendfsync no  # 交给操作系统处理  # AOF 重写相关配置  
no-appendfsync-on-rewrite no  # 重写时不阻塞新写操作  
auto-aof-rewrite-percentage 100  # AOF文件增长比例达到100%时重写  
auto-aof-rewrite-min-size 64mb  # AOF文件最小重写大小  # 重启Redis服务  
[root@localhost ~]# /etc/init.d/redis_6379 restart  # 手动触发AOF重写  
127.0.0.1:6379> bgrewriteaof  
Background append only file rewriting started
5.注意事件
  • 如果 Redis 同时配置了 RDB 和 AOF,重启时 Redis 会优先加载 AOF 文件。
  • 如果先执行了 RDB 持久化,再开启 AOF,RDB 文件中的数据会被后续的 AOF 文件覆盖(因为 AOF 记录了所有的写操作)。
  • AOF 重写可以减小 AOF 文件的体积,避免文件过大影响性能。
  • no-appendfsync-on-rewrite 设置为 yes 时,在 AOF 重写期间,新的写操作不会被立即同步到磁盘,以减轻磁盘 IO 压力。
  • auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 控制了 AOF 重写的触发条件。

1.1.7  redis设置密码

  方法一:通过配置文件redis.conf设置密码

  找到requirepass关键字,后面就是跟的密码,默认情况下是注释掉的,即默认不需要密码,如下:

   打开注释,设置为自己的密码,重启即可

  方法二:通过命名设置密码

  使用redis-cli连接上redis,执行如下命令

config set requirepass 123456

  执行完毕,无需重启,退出客户端,重新登录就需要输入密码了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

gitlab cicd快速入门有哪些方法 gitlabcicd和Jenkins哪个更好用

在现代软件开发中&#xff0c;持续集成和持续交付&#xff08;CI/CD&#xff09;已成为必不可少的流程。它们不仅能提高开发效率&#xff0c;还能保证代码的质量和稳定性。在众多CI/CD工具中&#xff0c;GitLab和Jenkins是最为常用的两种。本文将围绕“gitlab ci/cd快速入门有哪…

vuex properties of undefined (reading ‘getters‘)

前言&#xff1a; 最近打算用vue 写个音乐播放器&#xff0c;在搞 vuex 的时候遇到一个很神奇报错&#xff1b;vuex 姿势练了千百次了&#xff0c;刚开始的时候我一直以为是代码问题&#xff0c;反复检查了带了&#xff0c;依旧报错。 Error in mounted hook: "TypeError:…

[Android] [解决]Bottom Navigation Views Activity工程带来的fragment顶部空白间距问题

用Android Stuio创建一个Bottom Navigation Views Activity工程&#xff0c; 我们刻意设置一下fragment背景为黑色&#xff0c;会发现&#xff0c;这个fragment离顶部还有一段不小空白距离&#xff0c; 怎么解决呢&#xff1f; 在activity_main.xml里面&#xff0c;删掉这句&a…

极狐GitLab安全版本:16.10.1、16.9.3、16.8.5

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

数据结构之线性表(单链表的实现)

目录 一、单链表的原理 二、单链表的实现 1.单链表的定义 2.单链表的初始化 3.清空单链表 4.单链表是否为空 5.单链表的长度 6.获取指定位置 i 的元素 7.获取指定元素 e 的位置 8.向链表中插入指定位置的元素 9.向链表中删除指定位置的元素 10.遍历链表中的元素 …

告别手动操作!KeyMouseGo实现自动化工作流

前言 在这个快节奏的时代&#xff0c;我们每天都在与电脑打交道&#xff0c;重复着那些繁琐而单调的操作&#xff1b;你是否曾想过&#xff0c;能让电脑自己完成这些任务&#xff0c;而你则悠闲地喝着咖啡&#xff0c;享受着生活&#xff1f;今天&#xff0c;就让我们一起揭开一…

【sdk】- 对接阿里云抠图

文档地址&#xff1a;https://help.aliyun.com/zh/viapi/use-cases/general-image-segmentation?spma2c4g.11186623.0.0.3814173cenldIs java对接阿里云的通用分割&#xff0c;将代码原封不动复制进来&#xff0c;执行结果失败&#xff0c;咨询阿里云的人员之后&#xff0c;由…

优盘数据救援:应对文件与目录损坏的全方位指南

一、问题剖析&#xff1a;优盘文件或目录损坏的困境 在数字化时代&#xff0c;优盘&#xff08;USB闪存驱动器&#xff09;作为便携、高效的数据存储工具&#xff0c;广泛应用于数据传输、备份与分享。然而&#xff0c;面对频繁的使用与不当操作&#xff0c;优盘中的文件或目录…

FPGA常见型号

FPGA&#xff08;现场可编程门阵列&#xff09;开发板种类繁多&#xff0c;涵盖了从入门级教育用途到高性能工业应用的广泛领域。以下是一些常见的 FPGA 开发板型号及其特点&#xff1a; 1. Xilinx&#xff08;赛灵思&#xff09;系列 Xilinx 是 FPGA 领域的领导者之一&#…

Ubuntu22.04安装Docker教程

简介 ​ Docker 是一个开源的平台&#xff0c;旨在简化应用开发、交付和运行的过程。通过使用容器技术&#xff0c;Docker 能够让开发人员将应用及其依赖环境一同打包&#xff0c;从而实现快速部署、一致的开发环境和优秀的可移植性。 系统版本 ​ 本文以Ubuntu 22.04.4 LTS…

【探索Linux】P.46(高级IO —— 五种IO模型简介 | IO重要概念)

阅读导航 引言一、五种IO模型1. 阻塞IO&#xff08;1&#xff09;定义&#xff08;2&#xff09;特点 2. 非阻塞IO&#xff08;1&#xff09;定义&#xff08;2&#xff09;特点 3. IO多路复用&#xff08;1&#xff09;定义&#xff08;2&#xff09;特点 4. 信号驱动IO&#…

深入探索:【人工智能】、【机器学习】与【深度学习】的全景视觉之旅

目录 第一部分&#xff1a;人工智能、机器学习与深度学习概述 1.1 人工智能的概念与发展 代码示例&#xff1a;简单的AI决策系统 1.2 机器学习的定义与分类 代码示例&#xff1a;简单的线性回归模型 1.3 深度学习的基础与应用 代码示例&#xff1a;构建简单的神经网络 …

【TwinCAT】TwinCAT3 PLC HMI在WIN10系统中的全屏显示及用户管理

在工业自动化领域,TwinCAT3 PLC HMI 是一款强大的可视化工具,它支持多种操作系统,并且能够满足不同控制器的需求。在本文中,我们将详细介绍如何在WIN10系统中进行全屏显示设置以及如何进行用户管理配置。 一、TwinCAT3 PLC HMI 全屏显示方法 1. 创建Visualization和配置Vi…

Git开发流程

Git开发流程规范如下&#xff1a; 详情参考&#xff1a;https://www.processon.com/view/link/5d0cf86ce4b0376de9c19e16

【自动驾驶】ROS中自定义格式的服务通信,含命令行动态传参(c++)

目录 通信流程创建服务器端及客户端新建服务通讯文件修改service的xml及cmakelistCMakeLists.txt编辑 msg 相关配置编译消息相关头文件在cmakelist中包含头文件的路径在service包下编写service.cpp在client包下编写client.cpp测试运行查询服务的相关指令列出目前的所有服务&…

【Vue3】组件通信之mitt

【Vue3】组件通信之mitt 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

什么是智能加密?超好用神器智能加密软件推荐

信息安全已成为我们日常生活中不可忽视的一环。 随着网络攻击手段的不断升级和隐私泄露事件的频发&#xff0c;如何有效保护个人及企业的敏感数据成为了亟待解决的问题。 智能加密&#xff0c;作为信息安全领域的一项重要技术&#xff0c;正逐渐走进大众视野&#xff0c;以其高…

【数据结构七夕专属版】单链表及单链表的实现【附源码和源码讲解】

本篇是博主在学习数据结构时的心得&#xff0c;希望能够帮助到大家&#xff0c;也许有些许遗漏&#xff0c;但博主已经尽了最大努力打破信息差&#xff0c;如果有遗漏还请见谅&#xff0c;嘻嘻&#xff0c;前路漫漫&#xff0c;我们一起前进&#xff01;&#xff01;&#xff0…

超声波眼镜清洗机哪家强?盘点四款精品超声波清洗机机型

超声波清洗机因其卓越的清洁能力&#xff0c;成为了家庭和专业环境中清洁小物件的理想选择。无论是日常佩戴的眼镜、珍贵的珠宝首饰&#xff0c;还是精密的电子设备和实验工具&#xff0c;超声波清洗机都能提供深层、温和且高效的清洁。然而&#xff0c;面对市场上众多品牌和价…

原神4.8版本升级计划数据表

原神4.8版本角色数据升级计划表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原神4.8版本升级计划…