rdb

Redis中事务ACID支持程度

痴心易碎 提交于 2020-04-09 12:21:02
事务是一个数据库必备的元素,对于redis也不例外,对于一个传统的关系型数据库来说,数据库事务满足ACID四个特性: A代表原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 C代表一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束 I代表隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行 D代表持久性:已被提交的事务对数据库的修改应该永久保存在数据库中 然而,对于redis来说,只满足其中的: 一致性和隔离性两个特性,其他特性是不支持的。 A原子性 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的 如果一个事务队列中的所有命令都被成功地执行,那么称这个事务执行成功 另一方面,如果 Redis 服务器进程在执行事务的过程中被停止 —— 比如接到 KILL 信号、宿主机器停机,等等,那么事务执行失败 事务失败时,Redis 也不会进行任何的重试或者回滚动作,不满足要么全部全部执行,要么都不执行的条件 C一致性 一致性分下面几种情况来讨论: 首先

Redis从入门到实战:进阶篇

冷暖自知 提交于 2020-04-06 03:43:25
之前只是在项目简单使用了Redis(只是充当缓存层实现),对Redis的体系技术没深入了解,最近时间比较充裕,所以再次复习巩固Redis,然后打算写几篇博客记录以及分享所复习的Redis知识。 Redis从入门到实战:入门篇 Redis从入门到实战:实战篇 Redis从入门到实战:进阶篇 Redis从入门到实战:完结篇 Redis从入门到实战:进阶篇 Redis事务 Redis的发布与订阅 Redis持久化机制(RDB+AOF) Redis明明是单线程,为什么性能还那么高(每秒读写10W次等特性) Redis流水线技术(管道) Redis事务 事务这个词我们应该不陌生了,我们在使用MySQL或者Oracle过程中,都会开启事务,直到SQL执行完毕才会关掉事务。 可以说,事务是一种保证数据安全的机制。在关系型数据库中,事务是一组SQL的集合,要么全部执行成功,要么全部执行失败。 而在Redis中,事务是一组命令的集合,这一组命令会按照顺序在隔离的环境中执行,不受其他客户端发送来的命令打断。 下面给出官方解说 事务是一个单独的隔离操作,事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作,事务中的命令要么全部被执行,要么全部都不执行。 事务可以一次执行多个命令。MULTI、EXEC

Redis-3.2主从复制与集群搭建

六月ゝ 毕业季﹏ 提交于 2020-03-25 10:51:02
3 月,跳不动了?>>> Redis-3.2主从复制与集群搭建 一、Redis 主从搭建 1.下载并解压 1 2 3 4 5 6 7 8 yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar -zxvf redis-3.2.4.tar.gz cd redis-3.2.4 make cd src && make test && make install mkdir /etc/redis cp ../redis.conf /etc/redis/redis.conf 2.优化参数 1 2 3 4 5 6 7 8 vim /etc/sysctl.conf net.core.somaxconn = 20480 #最大队列长度,应付突发的大并发连接请求,默认为128 net.ipv4.tcp_max_syn_backlog = 20480 #半连接队列长度,此值受限于内存大小,默认为1024 vm.overcommit_memory = 1 0 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。 1 允许分配超出物理内存加上交换内存的请求 2 内核总是返回true

redis配置详解

你。 提交于 2020-03-25 08:35:27
3 月,跳不动了?>>> ##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with the file path as first argument: # # ./redis-server /path/to/redis.conf # Note on units: when memory size is needed, it is possible to specify # it in the usual form of 1k 5GB 4M and so forth: # # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # units are case insensitive so 1GB 1Gb 1gB are all the same. ################################## INCLUDES ###########

Raft协议(1)——Raft协议与Redis集群中的一致性协议的异同

◇◆丶佛笑我妖孽 提交于 2020-03-23 18:22:44
3 月,跳不动了?>>> 一、前言 本周本来要写MapReduce中的执行细节的,但是这两天看Raft资料的时候觉得Raft中的很多思想在Redis中都有对应的设计和应用,于是就先插队两篇关于Raft的文章。第一篇我们对比Raft和Redis中一致性协议的相同与不同, 第二篇我们主要看Raft在ETCD中的实现。同样,本文假定读者对Raft和Redis集群是了解的。如果不了解Redis集群的话,推荐看下我的这篇文章 大龙:Redis集群(终篇)——故障自动检测与自动恢复(附优质Redis资源汇总) ​ zhuanlan.zhihu.com 如果不了解Raft的话, 有如下资料可以去参考。 同时需要事先申明的是,下文中的Redis统一指的是Redis集群。 首先是Raft作者的博士论文: CONSENSUS: BRIDGING THEORY AND PRACTICE 然后是MIT的课程视频,老师讲的很好。 Raft Demo网站 , 做的也很清晰,但的确少了很多细节。适合初学的时候看 《ETCD技术内幕》 这本书中的Raft介绍部分写的还比较清晰。 分布式系统的一致性和性能常常是鱼和熊掌不可兼得。追求高的一致性,必然会带来性能的损失,而想要追求高的性能,也只能妥协于一定程度的非一致性。以下图中的数据写入为例,不同的一致性级别要求写入的节点个数是不同的, 写入节点个数越多

Redis系列入门-Redis持久化和主从复制原理

家住魔仙堡 提交于 2020-03-17 11:31:47
某厂面试归来,发现自己落伍了!>>> 一、持久化   所谓的持久化就是把内存中的数据写到磁盘中去,防止服务宕机后内存数据丢失。Redis4.0之前提供了两种持久化方式:RDB(默认) 和AOF,Redis4.x之后新增了一种混合持久化(本文所用的Redis版本是 redis‐5.0.2 )   1、RDB   RDB是Redis Database缩写,在默认情况下,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。可以对Redis进行设置,让它在 “ N秒内至少有M个键值改动 ” 这一条件被满足时,自动保存一次数据。比如下图,900秒内有1个键值或者300秒内有10个键值或者60秒内有10000个键值改动,自动保存一次数据;关闭RDB只需要将所有的save保存策略注释掉即可。   还可以手动执行命令生成RDB快照,进入Redis客户端执行命令save或bgsave可以生成dump.rdb文件,每次命令执行都会将所有Redis内存快照到一个新的rdb文件里,并覆盖原有rdb快照文件。save是同步命令,bgsave是异步命令,bgsave会从redis主进程fork(fork()是linux函数)出一个子进程专门用来生成rdb快照文件。Redis配置自动生成rdb文件后台使用的是bgsave方式。 save与bgsave对比 命令 save bgsave IO类型

redis 数据库快照不能持久化到硬盘

允我心安 提交于 2020-03-17 11:24:47
某厂面试归来,发现自己落伍了!>>> 错误:(error) 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 logs for details about the error. 原因:Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。 强制关闭Redis快照导致不能持久化 解决:登录redis客户端,然后输入命令: config set stop-writes-on-bgsave-error no root @ubuntu :/usr/local/redis/bin# ./redis-cli 127.0.0.1:6379> config set stop-writes-on-bgsave-error no 来源: oschina 链接: https://my.oschina.net/u/2861217/blog/1832806

解决Redis之MISCONF Redis is configured to save RDB snapshots

安稳与你 提交于 2020-03-17 10:53:52
某厂面试归来,发现自己落伍了!>>> 今天在新服务器执行Magento2更新命令,发现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). Please check the Redis logs for details about the RDB error. 解决方法: 1、 执行: redis-cli ,进入redis client; 2、接着执行: config set stop-writes-on-bgsave-error no OK 其实,从报错,也可以看 来源: oschina 链接: https://my.oschina.net/ganfanghua/blog/3196524

Redis持久化(四)

会有一股神秘感。 提交于 2020-03-16 14:55:34
某厂面试归来,发现自己落伍了!>>> Redis提供两种持久化方式: RDB: 保存某个时间点的全量数据快照 AOF: 保存redis写操作状态 RDB(快照)持久化 手动触发 SAVE:阻塞Redis的服务器进程,直到RDB文件被创建完毕 BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程 lastsave 指令可以查看最近的备份时间 自动触发 根据redis.conf配置里的save m n定时触发(用的是BGSAVE) 主从复制时,主节点自动触发 执行Debug Relaod 执行Shutdown且没有开启AOF持久化 # 在几秒内改动了多少数据就触发持久化 # 想禁用的话不设置save 或者save "" #表示900s内如果有1条是写入命令,就触发产生一次快照,可以理解为就进行一次备份 #表示300s内有10条写入,就产生快照 #若要禁用RDB,可直接save "" save 900 1 save 300 10 save 60 10000 # 备份进程出错主进程停止写入操作 stop-writes-on-bgsave-error yes # 是否压缩rdb文件 推荐no 相对于硬盘成本cpu更值钱 rdbcompression yes AOF(Append-Only-File)持久化 : 记录除了查询以外的所有变更数据库状态的指令

配置方案:Redis持久化RDB和AOF

血红的双手。 提交于 2020-03-09 19:41:30
Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘。当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。 Redis提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF。 RDB持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot),将数据库的快照(snapshot)以二进制的方式保存到磁盘中。 AOF持久化记录服务器执行的所有更改操作命令,AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾。Redis还可以在后台对AOF文件进行重写(rewrite),使得AOF文件的体积不会超出保存数据集状态所需的实际大小。 Redis可以同时使用AOF持久化和RDB持久化。在这种情况下,当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据集通常比RDB文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存在。 了解RDB持久化和AOF持久化之间的异同是非常重要的,以下几个小节将详细地介绍这这两种持久化功能,并对它们的相同和不同之处进行说明。 RDB快照