代码编织梦想

一、 Redis的特性

  1. 性能高

    Redis能读的速度是10W+次/s,写的速度是8W+次/s 。

  2. 丰富的数据类型

    Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

  3. 操作原子性

    Redis的所有操作都是原子性的,Redis还支持对几个操作全并后的原子性执行。

  4. 功能丰富

    支持 publish/subscribe, lua脚本、事务、pipeline、 通知、 key 过期等等特性。

  5. 支持多种编程语言

    java,python、PHP、C、C++等等。

  6. 持久化

    Redis支持两种方式的持久化,即将数据写入磁盘的方法,RDB(Redis DataBase)和AOF(Append Only File)。

  7. 主从复制

    Redis支持主从复制功能,主节点中断,可以进行主从切换, 不影响客户端的使用。

  8. 高可用与分布式

    Redis从2.8版本后,支持Redis Sentinel,即“哨兵模式”,保障Redis节点的故障发现与自动转移; 还可以支持集群模式(3.0版本),实现分布式存储与水平扩展。

二、 Redis的数据结构

Redis包含5种基本数据结构,4种高级数据结构。

  1. 5种基本数据结构

    • string
    • list
    • hash
    • set
    • sorted set
  2. 4种高级数据结构

    • hyperloglog
    • geo
    • bitmap/bloomfilter
    • stream

三、 Redis的启动与管理工具

  • Redis三种启动方式

    1. 直接启动
    2. 配置文件启动
    3. 动态参数启动
    验证方式:
    1. ps -ef | grep redis
    2. netstat -apn | grep 端口
    3. redis-cli -h ip -p port -a password ping
    
  • Redis的管理工具介绍

    1. redis-server : 启动管理Redis服务。
    2. redis-cli: redis的命令行工具。
    3. redis-benchmark: redis性能基准测试工具。
    4. redis-check-aof: aof数据文件检查修复工具。
    5. redis-check-dump: rdb数据文件检查修复工具。
    6. redis-sentinel: 启动管理redis哨兵服务。
  • Redis 常用配置

    1. port : 端口

    2. dir : 数据文件存放路径

    3. logfile: 日志文件存放路径

    4. daemonize: 守护进程方式启动

四、 Redis的持久化配置策略

Ⅰ. RDB(Redis Database)

  • 覆盖式更新, 新文件替换就的RDB文件

  • 效率: 内容越大, 效率越低, o(n)

  • 操作方式对比:

    命令savebgsave
    IO类型同步异步
    是否阻塞
    复杂度O(n)O(n)
    优势不会消耗额外内存不阻塞客户端命令
    缺陷阻塞式需要fork子进程,消耗内存
  • 自动生成RDB策略
    在这里插入图片描述
    在这里插入图片描述

    save 900 1            900秒内执行一次set操作 则持久化1次  
    save 300 10           300秒内执行10次set操作,则持久化1次
    save 60 10000         60秒内执行10000次set操作,则持久化1次
    

    注意事项:

    1) save 自动配置满足任一项就会执行,数据量大情况下会阻塞Redis。

    2) bgsave不会阻塞Redis, 但是会fork产生新进程。

    3) rdb方式存储, 会有数据丢失的可能。

Ⅱ. AOF (Append Only File)

  • 采用日志的形式来记录每个写操作,并追加到文件中。
    在这里插入图片描述

  • aof的三种策略

    1) always

    每条命令都回fsync到磁盘。

    2)everysec(默认)

    每秒把缓冲区fsync到磁盘。

    3)no

    由os操作系统决定fsync到磁盘。

    命令alwayseverysecno
    优势不丢失数据每秒一次fsync无需配置
    缺陷io开销过大,一般磁盘只有几百iops丢失1秒数据不可控
    appendonly yes   # 开启AOF模式
    appendfilename "appendonly-6379.aof"  # AOF文件名称
    appendfsync everysec # aof策略模式
    dir /data  # 数据文件保存目录
    no-appendfsync-on-rewrite yes  # 在子进程重写的时候,主进程的写操作记录是否追加 (yes为不追加,保存在缓冲区,有可能会造成数据丢失,最多30秒数据; no为追加, 但可能会产生阻塞)
    

Ⅲ. RDB vs AOF

  • 综合对比

    模式RDBAOF
    启动效率
    体积
    恢复速度
    数据安全性易丢失数据安全性高(由策略决定)
    备份模式全量备份增量备份
    运行缺陷可能存在
  • 混合持久化

    混合持久化可以弥补AOF方式的不足,采用混合持久化,重写后的新 AOF 文件前半段是 RDB 格式的全量数据,后半段是 AOF的增量数据,达到更快的重写和恢复效果,混合持久化的开关为aof-use-rdb-preamble。
    在这里插入图片描述

五、 Redis的持久化运维问题

  1. fork问题

    fork执行过程中,父进程需要拷贝内存页表给子进程,如果内存占用很大,那么拷贝的内存页表会比较耗时, 整个实例会被阻塞。

    解决:

    1)优先使用物理机或采用高效支持fork操作的虚拟化技术。

    2) 控制Redis的示例最大可用内存: maxmemory。

    3)合理配置Linux内存分配策略: vm.overcommit_memory = 1。

    4)降低fork频率: 例如放宽AOF重写自动触发时机, 不必要的全量复制。

  2. 子进程的开销与优化

    1)CPU开销

    RDB与AOF文件的操作, 属于CPU密集型,会产生较大的开销。

    优化:

    不做CPU核数绑定,不和CPU密集型应用部署。

    2) 内存开销

    fork会产生内存开销,在写入时会产生副本(COPY-ON-WRITE)。

    优化:

    关闭THP(RHEL6的特性, 系统会产生一个khugepaged进程, 把使用较小的页面换到hugepage中,会占用较多的内存)

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    3) 硬盘开销

    AOF更新和RDB文件的写入都会带来较多的磁盘开销

    优化:

    • 采用企业级SSD提升磁盘吞吐能力, 可以通过iostat,iotop或dstat工具监控磁盘是否产生瓶颈。

    • 如果单机部署多实例, 可以考虑分盘存储。

    4) AOF阻塞
    在这里插入图片描述

    定位方法:

    1)通过Redis日志定位:

    Asynchronous AOF fsync is taking too long (disk is busy?). 
    Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis
    

    2)通过终端指令定位:

    >info persistence
    ...
    aof_delayed_fsync:200
    ...
    

    该指令为累积耗时, 出现问题时, 需要记录上一次的耗时做对比。

    优化:

    1) 将appendfsync策略改为everysec每秒进行一次刷新。

    2) 如果数据量比较大, 采用集群部署模式, 分散节点压力。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hxx688/article/details/124102038

redis持久化《redis开发与运维读书笔记》_jredreamer的博客-爱代码爱编程

文章目录 Redis支持RDB和AOF两种持久化机制RDB (Redis Dump Binary )触发机制RDB文件处理RDB优缺点 AOF (Append-Only File)执行流程命令写入文件同步重写机

Redis AOF 和 RDB 持久化策略原理-爱代码爱编程

一、数据持久化 默认情况下 Redis 的数据都是保存在内存中,为避免 Redis 进程意外退出而导致数据丢失的问题,Redis 提供了 RDB 和 AOF 两种方式来实现数据的持久化存储。 二、RDB 机制 RDB 机制是以指定的时间间隔将 Redis 中的数据生成快照并保存到硬盘中,它更适合于定时备份数据的应用场景。可以通过手动或者自动的方式来触

一篇文章彻底理解Redis持久化:RDB和AOF-爱代码爱编程

为什么需要持久化? Redis对数据的操作都是基于内存的,当遇到了进程退出、服务器宕机等意外情况,如果没有持久化机制,那么Redis中的数据将会丢失无法恢复。有了持久化机制,Redis在下次重启时可以利用之前持久化的文件进行数据恢复。理解和掌握Redis的持久机制,对于Redis的日常开发和运维都有很大帮助,也是在大厂面试经常被问到的知识点。Redis支

Redis持久化的原理及优化-爱代码爱编程

Redis提供了将数据定期自动持久化至硬盘的能力,包括RDB和AOF两种方案,两种方案分别有其长处和短板,可以配合起来同时运行,确保数据的稳定性。 1、RDB 保存数据快照至一个RDB文件中,用于持久化。RDB操作和Mysql Dump相似。 1.1 执行方式 save。同步操作,会阻塞Redis。bgsave。调用linux的fork(),然后使用

Redis运维精讲之持久化篇-爱代码爱编程

关于Redis的持久化文档,我们还是要看一下官网怎么说的:Redis持久化官方文档 关于持久化,我们首先要明白的几个概念: 1,Redis的数据是存放在内存中的,所以读写速度非常快。但是,一旦服务器重启或者节点故障,那么内存中的数据就会丢失,而有些代码中,会把一些关键的key值放在Redis中读取,一旦丢失,就会导致网站或者接口访问异常。所谓持久化,就

redis高级之持久化(四)---rdb与aof区别-爱代码爱编程

上两篇文章我们详细介绍了rdb和aof,两种持久化方式我们在实际应用中该如何选择呢?他们各有什么优缺点,如下 rdb与aof的选择之感 对数据非常敏感,建议使用默认的aof持久化方案aof持久化策略使用everysecond,每秒种fsync一次,该策略redis扔可以保持很好的处理性能,当出现问题时,最多丢失0-1秒内的数据。注意:由于aof文件

redis系列之——数据持久化(RDB和AOF)-爱代码爱编程

Redis系列目录 redis系列之——分布式锁redis系列之——缓存穿透、缓存击穿、缓存雪崩redis系列之——Redis为什么这么快?redis系列之——数据持久化(RDB和AOF)redis系列之——一致性hash算法redis系列之——高可用(主从、哨兵、集群)redis系列之——事物及乐观锁redis系列之——数据类型geospatial:你

Redis持久化RDB与AOF配置-爱代码爱编程

一、redis持久化简介   redis有作为数据库和缓存服务器两种常用方式,redis持久化即将数据从内存中以某种形式同步到硬盘中,使得重启后可以根据硬盘中的记录恢复数据。   redis提供两种持久化方式,一种是RDB方式。另一种是AOF方式。前者根据指定的规则“定时”将内存中的数据存储在硬盘上,而后者在每次执行命令后将命令本身记录下来。两种方式可以

【Redis实践】(一)使用Docker安装Redis并配置持久化策略-爱代码爱编程

文章目录 1.简单的启动一个Redis2.redis的持久化2.1.redis.conf下载2.2.配置持久化策略2.3.配置映射并启动 1.简单的启动一个Redis 使用docker可以简单的启动一个Redis,只需要从docker仓库中拉取到redis的镜像,然后直接运行即可,依次执行如下脚本。 # 从docker仓库中拉取redis最

《Redis开发与运维》pdf 下载-爱代码爱编程

内容简介 本书全面讲解Redis基本功能及其应用,并结合线上开发与运维监控中的实际使用案例,深入分析并总结了实际开发运维中遇到的“陷阱”,以及背后的原因, 包含大规模集群开发与管理的场景、应用案例与开发技巧,为高效开发运维提供了大量实际经验和建议。本书不要求读者有任何Redis使用经验,对入门与进阶DevOps的开发者提供有价值的帮助。主要内容包括:Re

《redis开发与运维》持久化-爱代码爱编程

系列文章目录 前言 一、RDB 触发机制 优缺点 二、AOF AOF追加阻塞 持久化性能分析 总结 前言         redis是纯内存操作,将所有数据存放在内存中,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。                

处理Redis不能持久化问题-爱代码爱编程

Redis问题 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis lo