系列文章目录
(一)Redis(windows+Linux)安装及入门教程 - 掘金 (juejin.cn)
(二)Redis中的五大数据类型 - 掘金 (juejin.cn)
(三)Redis中的三种特殊类型 - 掘金 (juejin.cn)
(四)Redis实现乐观锁 - 掘金 (juejin.cn)
(五)SpringBoot整合Redis详细教程 - 掘金 (juejin.cn)
前言
本文详细讲述了Redis的配置文件,持久化,订阅发布的内容,该文是Redis进阶知识的第一篇,过后会讲解集群环境搭建,主从复制,哨兵模式详解等,如果本文对你有帮助,麻烦 点赞+收藏+关注( •̀ ω •́ )✧
一、Redis配置文件详解🥗
单位
unit单位对大小写不敏感
包含
'includes'部分用于引入其他配置文件。这种方式可以让Redis的配置更加模块化和易于管理。例如,你可以将一些常见的配置选项放在一个单独的配置文件中,然后在主配置文件中通过'include'指令来引入这些配置。被包含的配置文件通常包含一些通用的设置,如服务器运行的端口,启动和关闭服务器的选项,以及一些全局的ACL和环境设置等。
可以类比import和include
模块
这是Redis从5.0版本开始引入的一种扩展机制。Redis Modules允许开发者在Redis核心中添加新的命令和数据类型,从而极大地扩展了Redis的功能。模块可以提供新的键空间,新的命令,或者新的数据类型,甚至是修改现有的数据类型。
网络
'network'相关的配置通常涉及服务器网络连接的参数。
bind 127.0.0.1 #绑定的ip
protected-mode yes #保护模式
port 6379 #端口设置
通用
'general'部分的配置选项主要用于指定Redis服务器的全局通用设置。
- 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)
- nothing (nothing is logged)
其中loglevel和logfile配置一起决定了Redis的日志策略。你可以根据需要设置不同的日志级别和输出路径。
快照(RDB配置)
有关SNAPSHOTTING的配置选项通常与Redis的持久化机制有关。Redis支持将数据持久化到磁盘上,以便在服务器崩溃或其他意外停机情况下,可以恢复数据并防止数据丢失。SNAPSHOTTING是Redis用于持久化的一个重要机制。
save:这个选项用于设置Redis的持久化触发条件。当满足指定的条件时,Redis将执行SNAPSHOTTING操作。例如,'save 900 1'表示如果在900秒内至少有1个修改操作,则执行SNAPSHOTTING。
save 900 1 #表示如果在900秒内至少有1个修改操作,则执行持久化操作
save 300 10 #如果300秒内至少有10个key进行了修改,则执行持久化操作
stop-writes-on-bgsave-error:如果持久化出错了,是否继续工作
snapshot-filename:这个选项用于指定SNAPSHOTTING后生成的快照文件的名称。可以自定义文件名,以便根据需要进行区分。
snapshot-dir:这个选项用于指定快照文件的存储目录。Redis将会在这个目录下创建快照文件。
snapshot-count:这个选项用于限制在同一个快照文件中保存的数据量。如果达到指定的数量,Redis将创建一个新的快照文件,以保证快照文件的可管理性和可用性。
rdbcompression:是否压缩rdb文件,需要消耗cpu资源。
rdbchecksum:保存rdb文件时,是否开启校验
dir ./:rdb文件的保存目录
主从复制
REPLICATION选项用于配置Redis的主从复制(Master-Slave Replication)设置。
安全
涉及安全的配置选项主要集中在"security"部分。这部分的配置用于保障Redis服务器的安全性和数据的完整性。
客户端限制
CLIENTS部分通常不包含具体的配置选项,而是用于限制和指定服务器接收的最大客户端连接数。
maxclients:用于指定最大客户端的连接数
内存管理
'MEMORY MANAGEMENT'部分主要涉及内存管理方面的配置选项,用于优化Redis的内存使用和性能。
- noeviction:这是默认策略,它不会淘汰任何键值对,直到内存不足以容纳新的写入操作。
- allkeys-lru:这个策略会根据最近最少使用(LRU)算法淘汰键。最近最少使用的键会被优先淘汰。
- volatile-lru:这个策略会根据最近最****少使用(LRU)算法淘汰volatile键(即设置了expire的键)。最近最少使用的volatile键会被优先淘汰。
- allkeys-random:这个策略会随机选择键来淘汰,以尽可能均匀地分布淘汰操作。
- volatile-random:这个策略会随机选择volatile键来淘汰,以尽可能均匀地分布淘汰操作。
- volatile-ttl:删除即将要过期的key
APPEND_ONLY_MODE(AOF配置)
当APPEND_ONLY_MODE设置为'yes'时,Redis将进入追加只写模式。在这种模式下,Redis的所有写操作(包括SET、LPUSH、RPUSH、HSET等)都将被记录到一个追加日志文件中(appendonly.aof)。这个日志文件被称为追加只写日志(Append-Only File),它是一个记录所有写操作的文件,用于在Redis服务器重启时恢复数据。
appendonly no #默认不开启aof模式,默认使用rdb模式进行持久化,大部分情况下rdb完全够用
appendfilename #'appendonly.aof' 持久化文件名
appeendfsync always #每一次修改都会进行同步
appendfsync everysec #每一秒都执行一次sync,可能会丢失1s的数据
appendfsync no #不执行sync,操作系统自己同步数据,速度最快
二、Redis持久化🍱
Redis 的一个显著特点是其内存存储,这意味着它的读写速度非常快。然而,内存存储的一个主要缺点是数据在服务器重启或崩溃时会丢失。为了解决这个问题,Redis 提供了持久化功能,可以将数据保存到硬盘上,以便在服务器重新启动时可以重新加载数据。
持久化之RDB(Redis DataBase)
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(Snapshot)。这是默认的持久化方式。当 Redis 需要持久化时,它会 fork 出一个子进程,子进程会将数据写入一个临时文件,当持久化过程完成后,再用这个临时文件替换旧的 RDB 文件。因为是在子进程中完成的,所以主进程不进行任何的IO操作,可以继续处理客户端的请求。
什么是RDB
rdb保存的文件是dump.rdb(生产环境下,会备份该文件)
测试
删除原有的rdb文件,然后设置5个值
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> set k4 v4
OK
127.0.0.1:6379> set k5 v5
OK
重新生成了dump.rdb文件,在重新启动redis服务和客户端后,之前设置的值依然存在
触发机制
优缺点(来自官方文档)
优点:
缺点:
持久化之AOF(Append Only File)
AOF 持久化以日志的形式记录服务器接收到的所有写操作命令,并在服务器启动时,通过重新执行这些命令来重建数据集。Redis 可以配置为每次接收到写命令就立即记录,或者每秒记录一次,或者在累积一定数量的写命令后记录。默认情况下,Redis 没有开启 AOF(append only file)方式的持久化,可以通过配置开启。
什么是AOF
如何开启
AOF默认是不开启的,需要将其修改为yes开启
开启后,会有一个appendonlydir目录(这个是Redis7版本,老版本的会直接有一个AOF文件),AOF文件就在里面
测试
写入数据前,打开aof文件中什么都没有,写入数据后,再打开aof文件,其中已经记录了刚才输入的key-value
如果aof文件有错误(比如上图内容,使用vim打开并修改其中的内容,再重启redis),redis是无法启动的,redis提供了redis-check-aof修复工具
redis-check-aof --fix
重写规则
如果aof文件大于64mb,redis会fork一个新的进程来将文件进行重写。
优缺点(来自官方文档)
优点:
缺点:
**
如何选择哪种持久化方式
一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。
如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。
有很多用户都只使用 AOF 持久化, 但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免之前提到的 AOF 程序的 bug 。
只做缓存的时候,不需要任何持久化
三、Redis订阅发布🥙
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息
Redis客户端可以订阅任意数量的频道。
订阅/消息发布图
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
相关命令
序号 | 命令及描述 |
---|---|
1 | PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。 |
2 | PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。 |
3 | PUBLISH channel message 将信息发送到指定的频道。 |
4 | PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。 |
5 | SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。 |
6 | UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。 |
测试
接收端,使用SUBSCRIBE订阅
127.0.0.1:6379> SUBSCRIBE keye
1) "subscribe"
2) "keye"
发送端,使用PUBLISH发布消息
127.0.0.1:6379> PUBLISH keye 1234
(integer) 1
接收端,接收到消息
127.0.0.1:6379> SUBSCRIBE keye
1) "subscribe"
2) "keye"
3) (integer) 1
#等待推送的信息
1) "message" #消息
2) "keye" #频道
3) "1234" #消息内容
使用场景:
复杂的场景使用消息中间件MQ。
参考资料
狂神说JavaRedis最新超详细版教程通俗易懂_哔哩哔哩_bilibili
Redis 发布订阅 | 菜鸟教程 (runoob.com)