上一篇我们介绍了redis,这里我们讲一下部署

官网地址:http://redis.io/

下载地址:https://download.redis.io/releases/ 通过wget下载

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

1、redis下载安装

[root@node1 ~]# wget https://download.redis.io/releases/redis-8.2.0.tar.gz
--2026-03-06 09:52:46--  https://download.redis.io/releases/redis-8.2.0.tar.gz
正在解析主机 download.redis.io (download.redis.io)... 104.18.26.34, 104.18.27.34, 2606:4700::6812:1b22, ...
正在连接 download.redis.io (download.redis.io)|104.18.26.34|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:3897586 (3.7M) [application/octet-stream]
正在保存至: “redis-8.2.0.tar.gz”

redis-8.2.0.tar.gz                    100%[========================================================================>]   3.72M  1.67MB/s  用时 2.2s

2026-03-06 09:52:49 (1.67 MB/s) - 已保存 “redis-8.2.0.tar.gz” [3897586/3897586])

[root@node1 ~]# tar -xvf redis-8.2.0.tar.gz -C /opt/

[root@node1 opt]# cd /opt/redis-8.2.0/

[root@node1 opt]# make

[root@node1 redis-8.2.0]# make install PREFIX=/usr/local/redis

[root@node1 redis]# echo 'export PATH=/usr/local/redis/bin:$PATH' >> /etc/profile
[root@node1 redis]# source /etc/profile
[root@node1 redis]# redis-cli --version
redis-cli 8.2.0
[root@node1 redis]# redis-server --version
Redis server v=8.2.0 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=f452bfd4f886f252

2、redis启动

前台启动:redis-server,ctrl+c中断

[root@node1 redis]# redis-server
6823:C 06 Mar 2026 10:05:46.701 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6823:C 06 Mar 2026 10:05:46.702 * Redis version=8.2.0, bits=64, commit=00000000, modified=0, pid=6823, just started
6823:C 06 Mar 2026 10:05:46.702 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
6823:M 06 Mar 2026 10:05:46.702 * Increased maximum number of open files to 10032 (it was originally set to 1024).
6823:M 06 Mar 2026 10:05:46.702 * monotonic clock: POSIX clock_gettime
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis Open Source
  .-`` .-```.  ```\/    _.,_ ''-._      8.2.0 (00000000/0) 64 bit
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 6823
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           https://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

6823:M 06 Mar 2026 10:05:46.703 * Server initialized
6823:M 06 Mar 2026 10:05:46.703 * Ready to accept connections tcp

后台启动:

拷贝redis.conf到安装的bin下,修改配置文件,把daemonize no改为yes,保存退出

[root@node1 redis]# cp /opt/redis-8.2.0/redis.conf /usr/local/redis/bin/

[root@node1 redis]# vi bin/redis.conf

daemonize yes

[root@node1 redis]# redis-server /usr/local/redis/bin/redis.conf

[root@node1 redis]# ss -anplt | grep redis
LISTEN 0      511        127.0.0.1:6379       0.0.0.0:*    users:(("redis-server",pid=6850,fd=8))
LISTEN 0      511            [::1]:6379          [::]:*    users:(("redis-server",pid=6850,fd=9))

关闭:

[root@node1 redis]# redis-cli shutdown
[root@node1 redis]# ss -anplt | grep redis

在实际生产环境中,建议使用正常关闭。禁止使用kill -9

因为redis作为缓存来使用的话,将数据存储到内存中,如果使用正常关闭,则会将内存数据持久化到本地之后,再关闭。

如果是强制关闭,则不会进行持久化操作,可能会造成部分数据的丢失。

3、redis连接

本地连接

[root@node1 redis]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>

远程连接

(1)修改bind:这bind意思是本地监听的网卡地址,不是设置允许连接的ip。通过bind绑定自己redis服务器的网卡ip,然后配合firewalld或iptables来限制

[root@node1 bin]# more redis.conf | grep '^bind'
bind 127.0.0.1 -::1

默认绑定在127上,修改绑定到自身网卡ip

[root@node1 bin]# more redis.conf | grep '^bind'
bind 192.168.137.135
重启服务

[root@node1 bin]# ss -anplt | grep redis
LISTEN 0      511    192.168.137.135:6379       0.0.0.0:*    users:(("redis-server",pid=7073,fd=8))

另一台测试连接

[root@node2 ~]# telnet 192.168.137.135 6379
Trying 192.168.137.135...
Connected to 192.168.137.135.
Escape character is '^]'.
^]
telnet> q
Connection closed.
[root@node2 ~]# redis-cli -h 192.168.137.135 -p 6379
192.168.137.135:6379>

(2)防火墙

设置允许规则

iptables -A INPUT -p tcp --dport 6379 -s 192.168.1.100 -j ACCEPT

iptables -A INPUT -p tcp --dport 6379 -j DROP

(3)protected-mode 保护模式

[root@node1 bin]# more redis.conf  | grep protected-mode
protected-mode no

当满足以下所有条件时,保护模式自动开启,只允许本地连接:

  • protected-mode yes

  • 没有设置bind

  • 没有设置密码(requirepass

如果你配置了bind或设置了密码,保护模式会自动失效

4、redis工具

图形化工具:https://redisdesktop.com/download

github:https://github.com/uglide/RedisDesktopManager

5、redis库

Redis的“库”其实更准确地应该叫命名空间逻辑数据库,它并不是传统关系型数据库中的“数据库”概念。

通过修改databases来修改库的数量

[root@node1 bin]# more redis.conf | grep '^databases'
databases 16

特点:

  • 数量固定:默认16个(0-15),可在redis.conf通过databases配置修改

  • 相互隔离:不同库的key是隔离的,但共享同一份内存和CPU资源

  • 无独立权限:ACL可以控制用户访问哪些库

  • 无独立持久化:所有库一起RDB/AOF,不能单独备份某个库

切换:

[root@node1 bin]# redis-cli -h 192.168.137.135
192.168.137.135:6379>
192.168.137.135:6379>
192.168.137.135:6379> select 10 #选择库
OK
192.168.137.135:6379[10]> dbsize #查看当前库key的数量
(integer) 0
192.168.137.135:6379[10]> move mykey 5 #移动key到另一个库,0失败,1成功
(integer) 0
192.168.137.135:6379[10]> flushdb #清空当前库
OK

192.168.137.135:6379[10]> flushall #清空所有库
OK
192.168.137.135:6379[10]> info keyspace #查看所有库的key统计
# Keyspace
192.168.137.135:6379[10]>

注意事项:

1、所有库共享内存、CPU,一个库的慢查询会影响其

2、连接指定库需要密码认证

[root@node1 bin]# redis-cli -h 192.168.137.135 -p 6379 -a 密码 -n 10

3、无法单独备份库,rdb/aof只能全备份

6、redis操作命令

(1)赋值取值

set和get

192.168.137.135:6379> set test 123
OK
192.168.137.135:6379> get test
"123"

(2)取值并赋值

getset:原子性地完成两个操作 —— 先获取指定 key 的旧值,再给这个 key 设置新值

192.168.137.135:6379> getset test2 456
(nil)
192.168.137.135:6379> get test2
"456"

192.168.137.135:6379> getset test2 789
"456"
192.168.137.135:6379> get test2
"789"

(3)一次赋值多个并取多个

mset和mget

192.168.137.135:6379> mset apple 10 banana 5 origin 8
OK
192.168.137.135:6379> mget apple banana origin
1) "10"
2) "5"
3) "8"

(4)删除

del:1成功 0失败

192.168.137.135:6379> del apple
(integer) 1

(5)数值递增

incr:当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。

192.168.137.135:6379> incr a1
(integer) 1
192.168.137.135:6379> incr a1
(integer) 2
192.168.137.135:6379> incr a1
(integer) 3
192.168.137.135:6379> incr a1
(integer) 4
192.168.137.135:6379> incr a1
(integer) 5

incrby:增加指定的整数

192.168.137.135:6379> incrby a1 2
(integer) 7
192.168.137.135:6379> incrby a1 2
(integer) 9
192.168.137.135:6379> incrby a1 2
(integer) 11
192.168.137.135:6379> incrby a1 100
(integer) 111

decr:递减

192.168.137.135:6379> decr a1
(integer) 110
192.168.137.135:6379> decr a1
(integer) 109
192.168.137.135:6379> decr a1
(integer) 108

decrby:指定递减整数

192.168.137.135:6379> decrby a1 10
(integer) 98
192.168.137.135:6379> decrby a1 10
(integer) 88
192.168.137.135:6379> decrby a1 10
(integer) 78

(6)尾部追加

append

192.168.137.135:6379> set test5 redis
OK
192.168.137.135:6379> get test5
"redis"
192.168.137.135:6379> append test5 project
(integer) 12
192.168.137.135:6379> get test5
"redisproject"
192.168.137.135:6379> strlen test5
(integer) 12
 

7、redis持久化方案

Redis 的持久化机制是其核心功能之一,旨在将内存中的数据保存到硬盘上,以防止数据丢失,并在重启时恢复数据。

Redis 提供了两种主要的持久化方式:RDB 和 AOF。从 Redis 4.0 开始,还支持一种混合方式。

(1)RDB: redis database——快照模式

RDB 持久化会在指定的时间间隔内,将内存中的数据集快照(Snapshot)写入磁盘。它生成的是一个经过压缩的二进制文件,默认文件名是 dump.rdb

工作原理:

  1. Redis 主进程会 fork 一个子进程(bgsave 命令)。

  2. 子进程将内存中的数据写入一个临时的 RDB 文件。

  3. 写入完成后,用临时文件替换旧的 RDB 文件。

触发方式:

自动触发:根据 redis.conf 配置文件中的 save 规则,如 save 900 1(900 秒内至少 1 个键被修改)。

[root@node1 bin]# more redis.conf | grep '^save'
save 900 1
save 300 10
save 60 10000

手动触发:执行 SAVE 命令(同步阻塞)或 BGSAVE 命令(异步后台执行)。

192.168.137.135:6379> save
OK
192.168.137.135:6379> bgsave
Background saving started
 

同步执行 RDB 快照:save;Redis 主线程直接写入数据到 RDB 文件,期间会阻塞所有客户端请求(直到快照完成)。OK 表示快照已生成完毕。

异步执行 RDB 快照:bgsave;Redis fork 子进程来生成 RDB 文件,主线程不阻塞,依然可以处理请求。该输出表示子进程已启动,快照开始在后台执行。

优点:

文件紧凑:RDB 文件是压缩的二进制文件,非常适合用于备份、灾难恢复,以及在不同版本间迁移数据。

恢复速度快:恢复大数据集时,RDB 的速度通常比 AOF 快,因为它直接加载数据到内存即可。

性能影响小:父进程只需 fork 子进程来完成后续的持久化工作,自身无需执行磁盘 I/O。

缺点:

可能丢失数据:如果 Redis 意外宕机,最后一次快照之后修改的数据会全部丢失。数据丢失的多少取决于备份间隔的设置。

时间消耗fork 操作在数据集很大时可能会阻塞主进程几百毫秒甚至更久。如果数据集很大,频繁生成快照对 CPU 和磁盘 I/O 的消耗也比较可观。

(2)AOF: Append Only File——日志追加模式

AOF 持久化会将 Redis 执行的每一条写命令以 Redis 协议格式追加到 AOF 文件的末尾。当 Redis 重启时,会通过重新执行 AOF 文件中的所有命令来恢复数据集。

工作原理:

  1. 所有的写命令会被追加到 AOF 缓冲区。

  2. 根据配置的策略(appendfsync),缓冲区的内容会被同步(fsync)到磁盘上的 AOF 文件。

  3. 随着文件越来越大,Redis 会自动或手动执行 AOF 重写,以压缩文件体积(去除冗余命令,合并操作)。

触发方式:

配置文件(redis.conf) 本地磁盘的 redis.conf 文件 重启 Redis 后生效 永久生效(修改后保存) 生产环境核心配置(比如 AOF 开关、刷盘策略)
动态命令(config set) Redis 内存中 执行命令后立即生效 重启后失效 临时调整、测试配置、无需重启的场景

1、配置文件静态修改

1. 开启 AOF 持久化

[root@node1 bin]# more redis.conf | grep '^appendonly'
appendonly yes
[root@node1 bin]# more redis.conf | grep '^appendfilename'
appendfilename "appendonly.aof"

2. 配置 AOF 刷盘策略(核心:权衡性能与数据安全性)

appendfsync always:每次有新命令追加时,就执行一次 fsync最安全,但速度慢

appendfsync everysec:每秒执行一次 fsync推荐配置,兼顾性能和数据安全,最多丢失 1 秒数据。

appendfsync no:由操作系统决定何时 fsync速度快,但不可控,Linux 默认通常是 30 秒。

3. AOF 文件重写(避免文件过大)

# 自动重写触发条件(满足其一即触发)

auto-aof-rewrite-percentage 100 # 当前 AOF 文件比上次重写后的文件大 100%(即翻倍) auto-aof-rewrite-min-size 64mb # AOF 文件最小达到 64MB 才会触发重写(避免小文件频繁重写)

# 重写期间是否暂停刷盘(默认 no,推荐保持)

no-appendfsync-on-rewrite no

4. AOF 损坏修复(容错配置)

如果 AOF 文件损坏,Redis 启动时会报错,可配置自动修复:

# 启动时检测 AOF 文件是否损坏,若损坏则自动修复(推荐 yes)

aof-load-truncated yes

# 开启 AOF 重写时的增量同步(Redis 4.0+ 推荐 yes,避免数据丢失)

aof-use-rdb-preamble yes

2、动态命令修改

[root@node1 bin]# redis-cli -h 192.168.137.135 config set appendonly yes
OK
[root@node1 bin]# redis-cli -h 192.168.137.135 config get appendonly
1) "appendonly"
2) "yes"
但是重启redis后,配置会恢复为配置文件中的值

3、动态+写入配置文件

[root@node1 bin]# redis-cli -h 192.168.137.135 config set appendonly yes
OK
[root@node1 bin]# redis-cli -h 192.168.137.135 config set appendfsync everysec
OK
[root@node1 bin]# redis-cli -h 192.168.137.135 config rewrite
OK
验证:重启后配置仍然生效

[root@node1 bin]# redis-cli -h 192.168.137.135 config get appendonly

输出:yes

[root@node1 bin]# redis-cli -h 192.168.137.135 config get appendfsync

输出:everysec

8、redis密码

 1、初始化Redis密码:

   在配置文件中有个参数: requirepass  这个就是配置redis访问密码的参数;

   比如 requirepass test123;

   (Ps:需重启Redis才能生效)

   redis的查询速度是非常快的,外部用户一秒内可以尝试多大150K个密码;所以密码要尽量长(对于DBA 没有必要必须记住密码);

   2、不重启Redis设置密码:

   在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。

   redis 127.0.0.1:6379> config set requirepass test123

   查询密码:

   redis 127.0.0.1:6379> config get requirepass

   (error) ERR operation not permitted

   密码验证:

   redis 127.0.0.1:6379> auth test123

   OK

   再次查询:

   redis 127.0.0.1:6379> config get requirepass

   1) "requirepass"

   2) "test123"

   PS:如果配置文件中没添加密码 那么redis重启后,密码失效;

   3、登陆有密码的Redis:

   在登录的时候的时候输入密码:

   redis-cli -p 6379 -a test123

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐