rdb

Redis持久化

自作多情 提交于 2021-02-20 17:16:31
Redis持久化 RDB持久化方式 RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储. RDB的优点 RDB是一个非常紧凑的单一文件,方便备份与传输; RDB在持久化的时候只需要fork出一个子进程,接下来的持久化工作由子进程完成,因此能最大限度得优化redis性能; 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些; RDB的缺点 由于其工作方式是定时fork一个子进程完成持久化,因此在其两次工作的间隔中间的数据会因掉电等原因意外停止工作而丢失 RDB操作全量数据,当数据量较大时,则开销也会较大 使用RDB 配置文件(RDB部分) #save 间隔秒 操作数 #使用 save "" 禁用RDB #900秒内有一次操作触发RDB save 900 1 #300秒内有10次操作触发RDB save 300 10 #60秒内10000次操作触发RDB save 60 10000 #RDB异常时是否暂停接受写操作,默认是 stop-writes-on-bgsave-error yes #RDB是否开启压缩,默认是 rdbcompression yes #RDB是否开启CRC64校验位 rdbchecksum yes #RDB快照文件名称 dbfilename dump.rdb #没启用持久化的Redis实例是否删除其RDB文件,默认否 rdb-del-sync

面试官:说说Redis的过期键删除策略吧!(高频)

这一生的挚爱 提交于 2021-02-19 10:58:10
点击上方“ 趣学程序 ”,关注公众号 面试刷图,查缺补漏 划重点:Redis的过期键删除策略也是面试中经常会被问的,我最近面试,被问到了好几次。 对于Redis服务器来说,内存资源非常宝贵,如果一些过期键一直不被删除,就会造成资源浪费,因此我们需要考虑一个问题:如果一个键过期了,它什么时候会被删除呢? 1. 常见的删除策略 常见的删除策略有以下3种: 定时删除 在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。 惰性删除 放任过期键不管,每次从键空间中获取键时,检查该键是否过期,如果过期,就删除该键,如果没有过期,就返回该键。 定期删除 每隔一段时间,程序对数据库进行一次检查,删除里面的过期键,至于要删除哪些数据库的哪些过期键,则由算法决定。 其中定时删除和定期删除为主动删除策略,惰性删除为被动删除策略。 接下来我们一一讲解。 1.1 定时删除策略 定时删除策略通过使用定时器,定时删除策略可以保证过期键尽可能快地被删除,并释放过期键占用的内存。 因此,定时删除策略的优缺点如下所示: 优点:对内存非常友好 缺点:对CPU时间非常不友好 举个例子,如果有大量的命令请求等待服务器处理,并且服务器当前不缺少内存,如果服务器将大量的CPU时间用来删除过期键,那么服务器的响应时间和吞吐量就会受到影响。 也就是说,如果服务器创建大量的定时器

为什么 Redis 要比 Memcached 更火?

混江龙づ霸主 提交于 2021-02-18 04:06:32
作者:Kaito 链接:kaito-kidd.com/2020/06/28/redis-vs-memcached/ 前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之快。但我们在开发过程中,这两个内存数据库,我们到底要如何选择呢?它们的优劣都有哪些? 为什么现在看Redis要比Memcached更火一些? 这篇文章,我们就从各个方面来对比这两个内存数据库的差异,方便你在使用时,做出最符合业务需要的选择。 要分析它们的区别,主要从以下几个方面对比: 线程模型 数据结构 淘汰策略 管道与 事务 持久化 高可用 集群化 线程模型 要说性能,必须要分析它们的服务模型。 Memcached处理请求采用多线程模型,并且基于IO多路复用技术,主线程接收到请求后,分发给子线程处理。 这样做好的好处是,当某个请求处理比较耗时,不会影响到其他请求的处理。 当然,缺点是CPU的多线程切换必然存在性能损耗,同时,多线程在访问共享资源时必然要加锁,也会在一定程度上降低性能。 Redis同样采用IO多路复用技术,但它处理请求采用是单线程模型,从接收请求到处理数据都在一个线程中完成。 这意味着使用Redis,一旦某个请求处理耗时比较长,那么整个Redis就会阻塞住,直到这个请求处理完成后返回,才能处理下一个请求,使用Redis时一定要避免复杂的耗时操作。 单线程的好处是

Redis系列三

穿精又带淫゛_ 提交于 2021-02-17 18:58:39
前言   从学校出来,做开发工作也有一定时间了,最近有想系统地进一步深入学习,但发现基础知识不够扎实,故此来回顾基础知识,进一步巩固、加深印象。   最初开始接触编程时,总是自己跌跌撞撞、不断摸索地去学习,再一点点应用到实际项目中,知识点才更加清晰。后来,尝试写博客,把学到的知识试着分享出来,也是一次巩固的过程。 1、问:Redis雪崩了解吗?   答:我了解的。目前电商首页以及热点数据都会去做缓存,一般缓存都是定时任务去刷新,或者是查不到之后去更新,定时任务刷新就有一个问题。   举个简单例子:如果所有首页的key失效时间都是12小时,中午12点刷新,我0点开始抢单活动,大量用户涌入,假设当时每秒6000个请求,本来缓存可以扛住每秒5000个请求,但是缓存当时所有的 Key 都失效了。此时,1秒 6000个请求全部打到数据库,数据库必然扛不住,它会报一下警,但实际情况可能是DBA都没反应过来数据库就直接挂了。此时,如果没有什么特别的方案来处理这个故障,DBA很着急,重启数据库,但是数据库马上又被新的流量打死了。这就是我理解的缓存雪崩。    同一时间缓存大面积失效,那一瞬间Redis跟没有一样,这个数量界别的请求直接打到数据库几乎是灾难性的。试想一下,如果打挂的是一个用户服务的库,那其他依赖它的库所有的接口几乎都会报错,如果没有做熔断等策略,基本上就是一瞬间挂一片的节奏

一文读懂Redis持久化方式

ぃ、小莉子 提交于 2021-02-17 08:51:28
Redis持久化 RDB快照 在默认情况下,Redis将内存数据库快照保存到dump.rdb的二进制文件中。 可以对Redis进行设置,让它在“N秒内数据集至少有N个改动”, 这一条件被满足时,自动保存一次数据集。比如说:让Redis满足“60秒内至少有1000个键被改动”这一个条件时,自动保存一次数据集。 save 60 1000 除了在配置文件中使用save关键字设置RDB快照,还可以在命令行中手动执行命令生成RDB快照,进入redis客户端执行命令save或bgsave可以生成dump.rdb文件。 每次执行命令都会将所有redis内存快照保存到一个rdb文件里,并覆盖原有的rdb快照文件。 save是同步命令,bgsave是异步命令,bgsave会从redis主进程fork出一个子进程专门用来生成rdb二进制文件。 AOF(append only file) 快照功能并不是非常durable,如果redis因为某些原因而造成故障停机,那么服务器将丢失最近写入且未保存到快照中的那些数据。从1.1版本,redis增加了一种完全durable的方式:AOF持久化,将修改的每一条指令记录进appendonly.aof中。修改配置文件来打开aof功能: appendonly yes 打开aof功能,每当redis执行一个改变数据集的命令时,这个命令就会追加到aof文件的末尾。这样的话

Redis读写分离(三)

六眼飞鱼酱① 提交于 2021-02-15 03:02:24
1、redis高并发跟整个系统的高并发之间的关系 redis,要搞高并发的话,不可避免,要把底层的缓存搞得很好 mysql,高并发,做到了,那么也是通过一系列复杂的分库分表,订单系统,事务要求的,QPS到几万,比较高了 要做一些电商的商品详情页,真正的超高并发,QPS上十万,甚至是百万,一秒钟百万的请求量 光是redis是不够的,但是redis是整个大型的缓存架构中,支撑高并发的架构里面,非常重要的一个环节 首先,你的底层的缓存中间件,缓存系统,必须能够支撑的起那种高并发,其次,再经过良好的整体的缓存架构的设计(多级缓存架构、热点缓存),支撑真正的上十万,甚至上百万的高并发 2、redis不能支撑高并发的瓶颈在哪里? 单机 3、如果redis要支撑超过10万+的并发,那应该怎么做? 单机的redis几乎不太可能说QPS超过10万+,除非一些特殊情况,比如你的机器性能特别好,配置特别高,物理机,维护做的特别好,而且你的整体的操作不是太复杂 单机在几万 读写分离,对缓存,一般都是用来支撑读高并发的,写的请求是比较少的,可能写请求也就一秒钟几千,一两千 大量的请求都是读,一秒钟二十万次读 读写分离:一主多从 主从架构 -> 读写分离 -> 支撑10万+读QPS的架构 redis replication redis主从架构 -> 读写分离架构 -> 可支持水平扩展的读高并发架构 2

redis的主从复制和持久化

血红的双手。 提交于 2021-02-11 18:35:22
主从复制 虽然 redis 有持久化机制,但是有时 redis 服务器重启也会丢失数据,因为 redis 重启后会将硬盘中的数据恢复到内存中,但是当 redis 服务器的硬盘损坏了可能就会导致数据丢失,如果通过 redis 的主从复制就能很好的避免这种单点故障。 主 redis 数据库有两个从 redis ,即使其中一台服务器宕机,其他两台服务器照样可以正常工作 主 redis 和从 redis 是保持实时同步的,当主 redis 写入数据时通过主从复制机制会复制到两个从 redis 服务器上。 只有一个主 redis ,可以有多个从 redis 主从复制不会阻塞主 redis ,在同步数据时,主 redis 可以继续处理客户端的请求 一个 redis 可以既是主又是从 主从配置 主 redis 配置: 无需特殊配置 从 redis 配置: 修改 redis 服务器上的 redis.conf 配置文件,添加 slaveof 主 redis ip 主 redis 端口 说明当前从 redis 服务器对应主 redis 服务器的的 IP, 端口 主从复制过程 完成复制过程 在 redis2.8 之前主从复制过程如图: 复制过程 : slave 服务启动, slave 会建立和 master 的联系,发送 sync 同步命令 master 启动一个后台进程将数据库快照保存到 rdb

Redis BGSAVE因为内存不足 fork 失败导致目标 Redis 无法访问的问题

本小妞迷上赌 提交于 2021-02-11 10:32:55
中秋的时候正在外面愉快的在外卖喝着咖啡玩电脑。。。。。。突发 redis 报警从 sentry 应用端曝出的错误 MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. 于是又开始愉快的处理问题了,看上去像是执行 rdb 快照持久化的时候出现的问题,上到 redis 机器查看日志定位详细问题 420 :M 14 Sep 15 : 56 : 27.067 # Can ' t save in background: fork: Cannot allocate memory 420 :M 14 Sep 15 : 56 : 33.071 * 10000 changes

redis

☆樱花仙子☆ 提交于 2021-02-08 02:40:07
一。基本概念 Redis和MongoDB是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型) 二。redis安装 $ wget http://download.redis.io/releases/redis-5.0.4.tar.gz $ tar xzf redis-5.0.4.tar.gz $ cd redis-5.0.4 $ make $ make install 在服务器端启动redis-server 在内置的客户端启动redis-cli 客户端进行测试: 客户端关闭服务器 三。redis常用数据类型和命令 redis中所有的数据都是通过键值对的方式存储的,即key:value。key是字符串类型的,value可以是字符串,hash,list,set,sortedset 1.字符串类型(key:string) 1.添加key:value set key value 2

讨伐Redis

北城以北 提交于 2021-02-04 13:23:44
本文是学习Redis时做的知识点整理,原视频链接: https://www.bilibili.com/video/BV1oW411u75R 目录 Redis核心 1 Redis是什么? 1.1 Redis是分布式数据库 1.1.1 数据库事务的ACID 1.1.2 CAP定理 1.1.3 BASE理论 1.2 Redis是内存数据库 1.2.1 RDB 1.2.2 AOF 1.2.3 RDB和AOF 1.3 Redis是NoSQL数据库 Redis的数据格式 2 Redis能做什么? 2.1 数据操作 2.1.1 基本操作命令 2.1.2 string的相关操作 2.1.3 hash的相关操作 2.1.4 list的相关操作 2.1.5 set的相关操作 2.1.6 zset的相关操作 2.2 支持事务 2.2.1 Redis事务命令 2.2.2 Redis事务的特性 2.3 消息的订阅和发布 2.4 主从复制 2.4.1 多节点搭建 2.4.2 主从复制命令 2.4.3 主从复制原理 2.4.4 主从复制策略 2.4.5 哨兵模式 3.Redis的安装、使用和调优 3.1 Redis的安装 3.2 Redis的使用 3.3 Redis调优 Redis核心 学习Redis,核心在于两个问题: Redis是什么? Redis能做什么? 知道了Redis是什么