rdb

redis热点问题

▼魔方 西西 提交于 2020-02-26 06:29:10
redis 简介 数据存储在 内存中 ,读写速度快的数据库 分布式锁 提供 多种数据类型 来支持业务场景 支持事务、持久化、LUA脚本、 LRU驱动事件、多种集群方案 为什么要用 redis 主要从 “高性能” 和 “高并发” 这两点来看待这个问题。 高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可! 高并发: 直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。 为什么要用 redis 而不用 map/guava 做缓存? 缓存分为 本地缓存和分布式缓存 。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。 使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用

Redis持久化

我们两清 提交于 2020-02-26 05:07:38
一、持久化流程 既然redis的数据可以保存在磁盘上,那么这个流程是什么样的呢? 要有下面五个过程: (1)客户端向服务端发送写操作(数据在客户端的内存中)。 (2)数据库服务端接收到写请求的数据(数据在服务端的内存中)。 (3)服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。 (4)操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。 (5)磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。 这5个过程是在理想条件下一个正常的保存流程,但是在大多数情况下,我们的机器等等都会有各种各样的故障,这里划分了两种情况: (1)Redis数据库发生故障,只要在上面的第三步执行完毕,那么就可以持久化保存,剩下的两步由操作系统替我们完成。 (2)操作系统发生故障,必须上面5步都完成才可以。 在这里只考虑了保存的过程可能发生的故障,其实保存的数据也有可能发生损坏,需要一定的恢复机制,不过在这里就不再延伸了。现在主要考虑的是redis如何来实现上面5个保存磁盘的步骤。它提供了两种策略机制,也就是RDB和AOF。 二、RDB机制 RDB其实就是把数据以快照的形式保存在磁盘上。什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来。 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式

Redis持久化(rdb、aof、混合)

允我心安 提交于 2020-02-26 02:27:51
前言 Redis是基于内存操作的单线程缓存中间件。 一 RDB快照(snapshot) 在默认情况下,Redis将内存数据库快照保存在dump.rdb二进制文件中, Redis服务重新启动时根据dump.rdb文件重写Redis内存。 dump.rdb文件默认在redis安装目录下面。 可以在redis.conf中对redis快照频率进行设置。 1、save设置语法 save <seconds> <changes> 语法含义: N秒内至少有M个变动,则自动保存一次数据快照。 比如,save 10 1,即10秒内,发生至少一次变动,则自动保存一次数据快照。 2、redis.conf修改配置 配置修改后要记得重启redis服务,让配置生效。 3、实例验证 把dump.rdb文件删掉,redis-cli连接客户端,然后进行简单set操作。 然后在redis安装目录可以看到新生成的dump.rdb文件。 dump.rdb文件内容为二进制。 如果我们再把dump.rdb文件清掉,杀掉redis进程,重新启动redis,我们会发现刚才set的key1在redis里面 没有了,因为dump.rdb被清掉了,redis重启时就恢复不了数据,所以redis重启后找不到key1。 反之,则能找到key1。 二 AOF(append only file) rdb快照是达到条件之后进行dump.rdb备份

Redis 持久化方式

偶尔善良 提交于 2020-02-25 21:29:56
开篇 本文跟上一篇 Redis 数据持久化 - RDB 和 AOF 简单介绍 紧密相关,主要介绍 redis 数据持久化如何配置,以及上一篇文章中存在的问题。 正文 redis 的核心配置配置是 redis.conf ,本文是基于 redis-4.0.6 版本讲解。 RDB 数据持久化配置 默认情况下,redis 中的 RDB 数据持久化是开启的。 在 redis.conf 有如下一段默认配置: save 900 1 save 300 10 save 60 10000 # 可自行定义(不推荐更改),格式如下: # save <seconds> <changes> 配置说明: 比如 save 60 10000 表示如果 60s 内,有 10000 个 key 发生了改变,就保存一次快照,并且每次生成一个新的快照,都会覆盖之前的老快照。 补充: 通过 redis-cli SHUTDOWN 命令去停掉redis,redis 在退出的时候会将内存中的数据立即生成一份完整的 rdb 快照 可以手动调用 save 或者 bgsave 命令,同步或异步执行 rdb 快照生成 把上面三行配置注释或者删除掉,就可以关闭 RBD 持久化 AOF 数据持久化配置 AOF持久化,默认是关闭的。 打开 redis.conf, 找到如下配置 appendonly no # 改为 yes 就开启了 AOF

redis持久化

你离开我真会死。 提交于 2020-02-25 20:46:16
持久化就是把内存的数据写到磁盘中去,防止服务宕机内存数据丢失 redis提供了两种持久化方式,RDB(默认)和AOF 宕机 : down机,指操作系统无法从一个严重系统错误中恢复过来,或系统硬件层面出现问题,以致系统长时间无响应,而不得不重新启动计算机的现象,它属于电脑运作的一种正常现象,任何电脑都会出现这种情况 RDB : rdb是Redis DataBase缩写 功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数 AOF : aof是Append-only file缩写 每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用,这个函数执行一下两个工作 aof 写入保存 WRITE : 根据条件,将aof_buf中的缓存写入到AOF文件 SAVE : 根据条件,调用fsync或fdatasync函数,将AOF文件保存到磁盘中 存储结构 内容是redis通讯协议(RESP)格式的命令文本存储 比较 aof 文件比rdb更新频率高,优先使用aof还原数据 aof 比rdb更安全也更大 rdb性能比aof好 如果两个都配置了优先加载aof 注:内容皆为摘抄 来源: oschina 链接: https://my.oschina.net/u/4253180/blog/3158110

Reids基础知识

不想你离开。 提交于 2020-02-25 19:18:57
1. Redis:非关系型数据库(内存数据库),键值对形式,常用于缓存使用 2. 5种数据结构: 字符串:string Hash:键值对形式 Set:string类型的无序集合 List:一个每个子元素都是string类型的双向链表 Sortedset:和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。 3.Redis常用命令操作 字符串: 存储:set key value 获取:get key 删除:del key Hash类型: 存储:hset key field value 获取:hget key field hgetall key 删除:hdel key field 列表类型:从头还是尾操作数据,允许重复元素 添加: Lpush key value:将元素加入列表左边 Rpush key value:将元素加入列表右边 获取: Lrange key start end :范围获取 删除: Lpop:删除列表最左边的元素,并将元素返回 Rpop:删除列表最右边的元素,并将元素返回 Set: 存储:sadd key value1 value2 value3 获取:smembers key 获取集合中所有元素 删除:srem key value 删除集合中的某个元素 sortedset: 存储zadd key

Redis设计与实现-主从复制原理

こ雲淡風輕ζ 提交于 2020-01-09 13:40:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇: Redis设计与实现-事件 通过前面的学习知道了Redis通过多种数据结构实现5种数据类型,以及Redis数据库的一些维护操作和相当重要的持久化知识。另外还有Redis在LINXU操作系统上通过EPOLL的IO多路复用技术设计了自己的文件事件处理器,以单线程方式循环处理文件事件、时间事件。 接下来看看Redis的主从复制原理,关于Redis主从搭建,请百度一下,关键点就是在从服务器中设置salveof属性,并且要关闭防火墙或者防火墙策略 概要 Redis主从技术实现了读写分离,有一定的容灾备份能力,但是如何保证主从数据一致性喃?Redis有旧版和新版两种,先说说旧版 旧版复制 该模块分为同步和命令传播两个模块,同步负责初始第一次或者断网重连时主从数据库一致性,而命令传播是在同步之后解决主服务器不断执行新的写命令之后的主从数据库一致性 同步 图解 描述 从服务器发送sync命令 主服务器执行BGSAVE命令 主服务器将执行BGSAVE命令期间的所有写命令记录到一个缓冲区当中 主服务器将生成的RDB文件发给从服务器,从服务器载入RDB文件 主服务器将缓冲区中的命令发给从服务器,从服务器执行命令 命令传播 前面的同步解决了初始时主从数据库状态一直的问题,但是主服务器一直在处理新的写命令,主从要同步的话

Redis数据库结构和持久化

隐身守侯 提交于 2020-01-07 05:56:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Redis数据库,持久化 数据库 Redis服务器将所有的数据库都保存在服务器状态redis.h/redisServer结构的db数组中,每个项目都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库。 struct redisServer { //... // 一个数组,保存这服务器中的所有数据库 redisDb *db; // 服务器数据库数量 int dbnum; // ... } 服务器初始化的时候,程序会根据服务器状态的dbnum属性来决定创建多少个数据库,这个属性值由redis.conf中配置项database选项决定,值默认是16。 切换数据库使用select +数据库号来切换,默认是0号数据库。例如:select 9。 在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这是个指向redisDb结构的指针。 typedef struct redisClient { // ... // 记录客户端当前正在使用的数据库 redisDb *db; // ... } redisClient; 键空间 Redis是一个key-value数据库服务器,而每个数据库都有redis.h/redisDb结构表示,其中dict字典(hash表

Redis设计与实现-RDB持久化

痞子三分冷 提交于 2020-01-07 04:15:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇: Redis设计与实现-数据库 众所周知Redis是一个内存数据库,因此一旦断电数据便会丢失,为了避免这种糟糕的体验,Redis提供了两种将数据写到磁盘的持久化技术,分别是RDB和AOF。 先说说RDB的一些工作方式和实现原理: 触发方式 RDB有SAVE和BGSAVE两种手动触发方式,还有一种通过配置redis.conf中的save项,自动执行BGSAVE,它们最终都是调用rdbsave函数。 手动方式 RDB可以通过显示执行SAVE、BGSAVE命令完成数据持久化,两者的区别是: SAVE命令是服务器进程调用RDB对应的函数,会阻塞请求 BGSAVE是服务器进程FORK一个子进程,只有FORK的时候会阻塞,真正RDB过程是不会阻塞请求的 因此生产环境中禁止使用SAVE命令,避免出现严重生产事故。 另外: BGSAVE 的RDB操作在执行期间,会拒绝其他的SAVE BGSAVE命令,会延迟BGREWRITEAOF命令 反过来,如果BGREWRITEAOF执行期间,会拒绝其他所有的命令 自动方式 除手动触发以外,还可以通过由服务器根据扫描redis.conf中配置的rdb持久化条件完成数据持久化。比如: # Redis 默认配置内容: save 900 1 save 300 10 save 60

redis出现的问题

余生颓废 提交于 2020-01-07 03:49:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. redis快照被强制关闭了 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) redis快照被强制关闭了导致不能持久化的问题,可通过stop-writes-on-bgsave-error值设置为no即可避免这种问题 来源: oschina 链接: https://my.oschina.net/u/3631797/blog/3152117