【Linux运维培训班】什么是Redis?Redis存储服务详解!

IT科技2025-11-05 14:07:186
  什么是维培务详Redis   Redis的简介   Redis的特点   Redis不同处   Redis的部署   Redis的配置

  什么是Redis

  REmote DIctionary Server(Redis)是一个由Salvatore Sanfilippo写的key-value存储系统

  Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、训班支持网络、存储服可基于内存亦可持久化的维培务详日志型、Key-Value数据库,训班并提供多种语言的存储服API

  它通常被称为数据结构服务器,因为值(value)可以是维培务详 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等类型

  Redis 简介

  Redis 是完全开源免费的,遵守BSD协议,训班是存储服一个高性能的key-value数据库

  Redis 与其他 key - value 缓存产品有以下三个特点:

  ①Redis支持数据的持久化,可以将内存中的维培务详数据保存在磁盘中,重启的训班时候可以再次加载进行使用。

  ②Redis不仅仅支持简单的存储服key-value类型的数据,高防服务器同时还提供list,维培务详set,训班zset,存储服hash等数据结构的存储。

  ③Redis支持数据的备份,即master-slave模式的数据备份。

  Redis 的特点

  高性能:Redis 将所有数据集存储在内存中,可以在入门级 Linux 机器中每秒写(SET)11 万次,读(GET)8.1 万次

  持久化:当所有数据都存在于内存中时,可以根据自上次保存以来经过的时间和/或更新次数,使用灵活的策略将更改异步保存在磁盘上

  数据结构:Redis 支持各种类型的数据结构,例如字符串、散列、集合、列表、带有范围查询的有序集、位图、超级日志和带有半径查询的地理空间索引

  原子操作:处理不同数据类型的 Redis 操作是原子操作,因此可以安全地 SET 或 INCR 键,添加和删除集合中的元素等

  支持的语言:Redis 支持许多语言,云南idc服务商如 C、C++、Erlang、Go、Haskell、Java、JavaScript(Node.js)、Lua、Objective-C、Perl、PHP、Python、R、Ruby、Rust、Scala、Smalltalk 等

  主/从复制:Redis 遵循非常简单快速的主/从复制。配置文件中只需要一行来设置它,而 Slave 在 Amazon EC2 实例上完成 10 MM key 集的初始同步只需要 21 秒

  分片:Redis 支持分片。与其他键值存储一样,跨多个 Redis 实例分发数据集非常容易

  可移植:Redis 是用 C 编写的,适用于大多数 POSIX 系统,如 Linux、BSD、Mac OS X、Solaris 等

  Redis与其他key-value存储有什么不同?

  ①Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是云服务器提供商一个不同于其他数据库的进化路径

  ②Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象

  ③Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存

  ④在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情

  ⑤在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问

  Redis 部署

  | 下载Redis软件包

  官网下载地址:https://download.redis.io/releases

  GitHub下载地址:https://github.com/redis/redis/releases

wget https://download.redis.io/releases/redis-6.2.2.tar.gz

  | 解压软件包

tar xf redis-6.2.2.tar.gz -C /oldboyedu/softwares/ ln -sv /oldboyedu/softwares/redis-6.2.2 /oldboyedu/softwares/redis

  | 编译Redis源码

# 安装依赖包 yum -y install gcc automake autoconf libtool make # 编译Redis源码 cd /oldboyedu/softwares/redis make && make install

  | 配置环境变量并测试

# 为Redis环境单独配置环境变量 # vim /etc/profile.d/redis.sh #!/bin/bash export PATH=/oldboyedu/softwares/redis/src:$PATH # 使得上一步配置的Redis环境变量生效 # source /etc/profile.d/redis.sh # redis-cli --version # 如果输出该命令有提示信息说明配置生效!

  | 启动Redis并进行连接测试

  后台运行Redis服务

# ss -lnt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 [::]:22 [::]:* # redis-server &

  连接Redis数据库

默认以字节的形式显示中文: # redis-cli > SET name "oldboyedu" OK > GET name "oldboyedu" > SET myname "老男孩" OK > GET myname "\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9" > QUIT 我们可以直接让redis-cli命令行工具支持中文显示,只需启动时添加"--raw"选项即可,如下所示 # redis-cli --raw >> SET name "oldboyedu" OK > GET name "oldboyedu" > SET myname "老男孩" OK > GET myname 老男孩 我们也可以像mysql命令行工具一样,可以直接在命令行操作redis服务,而无需进入到交互式字符界面 # redis-cli get name "oldboyedu" # redis-cli get myname "\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9" # redis-cli --raw get myname 老男孩

  关闭Redis

进入redis-cli交互式字符界面关闭Redis # redis-cli > SHUTDOWN > quit 直接在Linux界面关闭Redis # redis-cli shutdown

  自定义Redis的配置文件

  | 创建存放配置文件,日志文件和数据目录

# 创建专用于存放redis服务的配置文件目录 mkdir -pv /oldboyedu/softwares/redis/conf # 创建专用于存放redis服务的日志文件目录 mkdir -pv /oldboyedu/logs/redis # 创建专用于存放redis服务的数据目录 mkdir -pv /oldboyedu/data/redis

  | 创建配置文件

install -d /oldboyedu/softwares/redis/conf cat > /oldboyedu/softwares/redis/conf/redis.conf <<EOF daemonize yes port 6379 logfile /oldboyedu/logs/redis/redis.log dir /oldboyedu/data/redis dbfilename oldboyedu_linux EOF

  配置文件参数说明:

  | 重启Redis服务

# 关闭redis服务 redis-cli shutdown # 启动redis服务时指定配置文件 redis-server /oldboyedu/softwares/redis/conf/redis.conf

  | 验证服务是否正常运行

# redis-cli > get name (nil) > set name "oldboyedu 2022" OK > get name "oldboyedu 2022" > quit

  | 基于配置文件设置Redis安全相关参数

  1. Redis默认开启了安全保护模式,只允许本地回环地址登录并访问数据库。即--protected-mode yes

基于本地连接Redis服务,是可以正常读写入数据的 # redis-cli 127.0.0.1:6379> 基于"IP:Port"方式连接Redis服务,发现无法从Redis获取数据 # redis-cli -h 10.0.0.112 -p 6379

  温馨提示:

  ①上图的报错中给了4个解决方案,其中前3个解决方案都是设置--protected-mode no。但前3种种解决方案用于测试还是可以的,但是在生产环境中使用时并不建议使用,因为其治标不治本。我们推荐大家使用第4种方法。

  ②其中上述的第四种方法说我们可以绑定地址(bind address),或者设置验证密码(authentication password)

  2. 配置Redis的安全参数

# cat >/oldboyedu/softwares/redis/conf/redis.conf<<EOF daemonize yes port 6379 logfile /oldboyedu/logs/redis/redis.log dir /oldboyedu/data/redis dbfilename mydump.rdb bind 10.0.0.112 127.0.0.1 requirepass oldboyedu2022 EOF

  配置文件参数说明:

  3. 重启Redis服务使得配置生效

redis-cli shutdown redis-server /oldboyedu/softwares/redis/conf/redis.conf

  4. 验证Redis安全设置是否生效

# redis-cli -h 10.0.0.112 -a oldboyedu2022 > get name (nil) > set name "oldboyedu" OK > get name "oldboyedu" redis-cli shutdown redis-s

  在线查看和修改Redis的配置

  | 在线查看配置参数

  查看Redis所有的配置信息

  我们在交互式命令行输入"CONFIG GET *",就可以查看Redis所有的配置信息,如下所示:

# redis-cli -h 10.0.0.112 -a oldboyedu2022 # 表示获取所有的配置参数 > CONFIG GET *

  模糊查询参数,例如:查看以"re","re*"的配置信息

  我们在交互式命令行输入"CONFIG GET re*",就可以查看Redis所有的配置信息中以"re*"开头的配置,如下所示:

> CONFIG GET re*

  查看具体参数信息,即只获取Redis某一个特定的配置

  我们在交互式命令行使用"CONFIG GET"命令获取某一个特定的参数值,就可以查看Redis对应的配置信息,如下所示:

> CONFIG GET requirepass

  如上所述,当我们记得配置的名称后,可以直接查询具体的参数信息哟

  | 在线设置配置参数

  临时设置参数不保存

  如下所示,我们可以通过"CONFIG SET"命令来临时修改参数值

# 查看Redis默认使用的内存为"0",这意味着不对Redis内存使用做限制,生产环境中建议设置为服务器的70%的资源 > CONFIG GET maxmemory 1) "maxmemory" 2) "0" # 很明显,我这里设置的是28G的内存给Redis使用 > CONFIG SET maxmemory 28000M > CONFIG GET maxmemory 1) "maxmemory" 2) "28000000000" >quit # 我们对Redis服务进行重启 # redis-cli -h 10.0.0.112 -a oldboyedu2022 shutdown # redis-server /oldboyedu/softwares/redis/conf/redis.conf # 发现配置还是使用配置文件的信息,上面的修改只是在内存中发生的 # redis-cli -a oldboyedu2022 -h 10.0.0.112 > CONFIG GET maxmemory 1) "maxmemory" 2) "0"

  温馨提示:

  使用"CONFIG SET"命令可以临时修改Redis的配置,但此次修改的配置并不会被写入到配置文件,因此我们说这样修改为临时修改,下次重启后是不生效的

  临时设置参数并保存

  查看Redis的配置文件

# cat /oldboyedu/softwares/redis/conf/redis.conf daemonize yes port 6379 logfile /oldboyedu/logs/redis/redis.log dir /oldboyedu/data/redis dbfilename mydump.rdb bind 10.0.0.112 127.0.0.1 requirepass oldboyedu2022

  临时设置参数并保存

# redis-cli -a oldboyedu2022 -h 10.0.0.112 > CONFIG GET maxmemory 1) "maxmemory" 2) "0" > CONFIG SET maxmemory 28000M OK > CONFIG GET maxmemory 1) "maxmemory" 2) "28000000000" > CONFIG REWRITE > QUIT

  再次查看配置文件,不难发现在配置文件末尾多了2行配置

  临时设置参数并保存

# cat /oldboyedu/softwares/redis/conf/redis.conf daemonize yes port 6379 logfile "/oldboyedu/logs/redis/redis.log" dir "/oldboyedu/data/redis" dbfilename "mydump.rdb" bind 172.200.1.201 127.0.0.1 requirepass "oldboyedu2022" # Generated by CONFIG REWRITE maxmemory 27343750kb

  重启Redis服务,发现上一次修改生效了

# redis-cli -a oldboyedu2022 shutdown # redis-server /oldboyedu/softwares/redis/conf/redis.conf # redis-cli -a oldboyedu2022 -h 10.0.0.112 -p 6379 > CONFIG GET maxmemory 1) "maxmemory" 2) "28000000000"

  Redis 持久化

  | Redis持久化概述

  指的是将内存数据保存到磁盘。Redis给我们提供了两种持久化的功能,分比为RDB和AOF:

  1、RDB持久化:可以在执行的时间间隔内生成数据集的时间点快照(point-in-time snapshot),新快照会覆盖老快照

  优点:速度快,适合于用于做备份,主从复制也是基于RDB持久化功能实现的

  缺点:会有数据丢失

  2、AOF持久化:记录服务执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集

  AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾(append-only log file)

  优点:可以最大程度保证数据不丢失。其类似于MySQL的binlog日志功能

  缺点:日志记录量级比较大,持久化时间较长

  | 配置RDB持久化功能

  1. 手动触发持久化

  如下所示的配置文件中,并不会自动进行持久化操作,但我们可以通过"SAVE"命令来手动触发持久化

# cat /oldboyedu/softwares/redis/conf/redis.conf daemonize yes port 6379 logfile "/oldboyedu/logs/redis/redis.log" dir "/oldboyedu/data/redis" dbfilename "mydump.rdb" bind 172.200.1.201 127.0.0.1 requirepass "oldboyedu2021" # Generated by CONFIG REWRITE maxmemory 27343750kb

  当修改数据后,并不会立即发生持久化

# ll /oldboyedu/data/redis/ 总用量 0 # redis-cli -a oldboyedu2022 -h 10.0.0.112 -p 6379 > SET name "oldboyedu" OK > GET name "oldboyedu" > QUIT # ll /oldboyedu/data/redis/ 总用量 0

  但是我们可以通过"SAVE"命令来手动触发持久化

# redis-cli -a oldboyedu2022 -h 10.0.0.112 -p 6379 > SET name "oldboyedu" OK # 调用该命令后,会记录将内存中的数据同步到磁盘上 > SAVE OK > QUIT # ll /oldboyedu/data/redis/ 总用量 4 -rw-r--r-- 1 root root 97 7月 13 16:59 mydump.rdb

  我们也可以不进入redis-cli命令的交互式字符界面就能进行持久化操作

# ll /oldboyedu/data/redis/ 总用量 0 # redis-cli -a oldboyedu2022 -h 10.0.0.112 -p 6379 OK # 直接进行持久化 # redis-cli -a oldboyedu2021 save OK # ll /oldboyedu/data/redis/ 总用量 4 -rw-r--r-- 1 root root 104 7月 13 17:01 mydump.rdb # redi

  | 配置RDB自动持久化相关参数

  配置RDB持久化

# tail -6 /oldboyedu/softwares/redis/conf/redis.conf # RDB持久化配置 dir "/oldboyedu/data/redis" dbfilename "mydump.rdb" save 900 1 save 300 10 save 60 10000

  参数说明:

  温馨提示:

  上述的save参数是用于定义自动持久化的参数,上面我们定义了3种策略,但凡满足其中任意一种策略均能实现自动持久化

  测试可以使用“kill -9”指令杀死redis-server进程,如果使用官方提供的shutdown脚本会在关掉redis实例之前可能会自动进行一次持久化哟

  | 配置AOF持久化功能

  如下所示,配置AOF持久化通常只需指定两个参数即可

# tail -3 /oldboyedu/softwares/redis/conf/redis.conf # 配置AOF持久化 appendonly yes appendfsync everysec

  参数说明:

本文地址:http://www.bzuk.cn/html/040d8499875.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

Z178G版(一部配备8GB内存的Z17,您需要了解的一切)

正确识别SQL Server 版本号的操作方案

云计算的下一件大事是什么?

对SQL Server 2005删除用户失败的破解

电脑阅卷中的字体教程(提高电脑阅卷效率的字体选择与设置方法)

SQL Server 2008 CDC功能的主要作用是什么?

SQL Server 2005中网页传递变量的实现过程

实现SQL Server传送数组参数变通的方案描述

友情链接

滇ICP备2023006006号-33