浅学redis

一、持久化

1.为什么需要持久化?

如果不将内存中的数据保存到磁盘,那么一旦服务器进程退出,服务器中数据也会消失,所以redis提供了持久化功能

2.RDB(redis database)

redis配置中,默认使用RDB进行持久化。rdb保存的是dump.rdb文件。

在指定时间间隔内,将内存中的数据快照写入磁盘,恢复时将快照文件存储到内存临时文件中,再次使用这个临时文件时,redis会单独创建(fork)一个子进程来进行持久化,使用新的数据记录替换上次持久化好的文件。但最后一次持久化的数据可能会丢失!

整个过程中,主进程是不进行任何操作的,保证了高性能。如需大规模数据恢复,且对于数据恢复的完整性不关注,那RDB要比AOF高效。

触发rdb的条件:

1、满足save的规则(参数配置),会自动触发rdb规则

2、执行 flushall 命令,会触发rdb规则

3、退出redis,会产生 rdb 文件

如何恢复rdb文件?

把rdb文件放到reids启动目录下,redis启动时会自动检查并恢复

优点:

1.适合大规模数据恢复

2.对数据完整性要求不高

缺点:

1.需要一定的时间间隔进行操作,如果redis意外宕机,最后一次修改的内容就没有了

2.fork进程的时候,会占用一些内存空间

3.AOF(append only file)

默认是不开启的,需要手动配置打开,只需要将 appendonly 改为yes就开启了 aof。Aof保存的是 appendonly.aof 文件

以日志形式记录所有写操作的命令,不记录读操作,只许追加不许修改原有记录,redis启动之后会读取文件重新构建数据,从而完成数据的恢复。

优点

1、每一次修改都会同步,保证了文件的完整性

2、每秒同步一次,如果出现丢失,只会丢失这1s的记录

缺点:

1、aof文件的大小远远大于 rdb文件,所以修复的速度比 rdb要慢

2、aof 运行效率比 rdb 慢,所以redis默认的配置就是rdb持久化

二、主从复制

1.概念

主从复制是把一台redis服务器数据(主节点master),复制到其他redis服务器(从节点slave)中。且数据复制为单向,只能从主节点到从节点,master主要是写,slave是读。

①全量复制:Slave 启动成功连接到 master后,会发送同步命令,使master收集所有修改数据命令并传送给slave,完成一次全量同步

②增量复制:master将所有新收集的修改命令一次传给slave,完成增量同步

只要发生重新连接master,就会自动进行全量同步!

2.用途

1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2、故障恢复:当主节点出现问题时,可以由从节点提供服务。

3、负载均衡:写Redis数据时应用连接主节点,读Redis数据时应用连接从节点,可以分担服务器负载。对于写少读多的场景,通过多个从节点分担读负载,可以大幅提升并发量。

4、高可用(集群)的基础:主从复制的基础上,实现哨兵模式和集群,保证了高可用的基础。

3.单服务器弊端

1、单个Redis服务器会发生单点故障,只有一台服务器处理所有请求,容易压力过大。

2、单个Redis服务器内存容量有限,且单台Redis最大使用内存不应该超过20G。

三、其他概念

1.缓存穿透

用户发起查询,缓存中无对应记录,又向持久层数据库发起,也查不到数据,判定为查询失败。当大量用户访问缓存都查不到,之后都向数据库发起请求,就会对数据库造成很大压力,此时便是出现了缓存穿透

2.缓存击穿

大量用户访问同一个key,造成热点,该key在失效的瞬间,且大量并发情况下就会穿破缓存,访问到数据库中,导致数据库出现压力过大情况。

3.缓存雪崩

某段时间内,缓存集中过期失效,这段时间内查询访问就直接到了数据库层,导致数据库压力暴增,从而出现数据库被查挂的现象。一般redis宕机是产生雪崩的原因之一

相关推荐
水月梦镜花4 小时前
redis:list列表命令和内部编码
数据库·redis·list
掘金-我是哪吒6 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
ketil278 小时前
Ubuntu 安装 redis
redis
王佑辉9 小时前
【redis】redis缓存和数据库保证一致性的方案
redis·面试
Karoku06610 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
gorgor在码农10 小时前
Redis 热key总结
java·redis·热key
想进大厂的小王10 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
Java 第一深情10 小时前
高性能分布式缓存Redis-数据管理与性能提升之道
redis·分布式·缓存
minihuabei15 小时前
linux centos 安装redis
linux·redis·centos
monkey_meng17 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust