redis架构详解

一、redis特性
1.redis 是什么?
redis是基于内存的可持久化的key-value数据库
2.redis数据结构类型?
value支持五种数据类型,字符串、字符串列表、字符串集合、有序集合、hashs
3.redis持久存储方式
redis两种持久化方式,RDB,和AOF
RDB: 将某一时刻的数据持久化到磁盘上,是一种快照式的持久方式, redis在进行持久化的过程中,会先将数据写入临时文件中,待持久化过程结束,会用这个临时文件,替换上次持久化的文件,正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的。
原理:rdb方式持久化时,redis会fork出一个子进程进行持久化,主进程不会进行任何io操作,确保redis性能不会因持久化而降低,如果对数据不敏感且需要大规模恢复数据,可以使用这种方式

AOF: 将执行过的写指令记录下来,在数据恢复时,将指令按照顺序在执行一边.
我们通过配置redis.conf中的appendonly yes就可以打开AOF功能.如果有写操作,就会追加到aof文件末尾,默认aof持久化策略是每秒钟fsync一次将数据从缓存区域刷到磁盘上,因为在这种情况下,redis仍然可以保持很好的处理性能,即使redis故障,也只会丢失最近1秒钟的数据.
问题1: aof文件坏了怎么办?
备份被写坏的AOF文件
运行redis-check-aof –fix进行修复
用diff -u来看下两个文件的差异,确认问题点
重启redis,加载修复后的AOF文件
问题: aof追加方式文件会越来越大怎么处理?
redis提供了rewrite重写机制,当aof文件大小超过设置阀值,就会启动aof文件压缩,保留恢复数据的最小指令集,在重写时也是先写入临时文件
rewrite原理:在从写开始时,任redis会fork出一个子进程,这个子进程会首先读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中.
与此同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外,当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中,当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中了

4.redis主从

主从优点: 冗余备份,提升性能,读写分离,主从架构异步进行,不会降低处理性能

主从原理:
从服务器向主服务器发送sync指令,当主服务器接到指令后,就会调用bgsave指令创建子进程专门用来进行持久化工作,也就是将主服务器上的数据写入rdb。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
在bgsave指令完成后,主服务器会讲rdb文件发送给从服务器,从服务器将文件保存到磁盘上,然后读到内存中。这个动作完成后,主服务器会将这段时间缓存得到写指令在以redis协议发送给从服务器.
注: 即使有多个从服务器发送sync指令,主服务器也只会执行一次bgsave

5.redis事物

redis四个指令构成redis事物处理的基础
1.MULTI用来组装一个事务;
2.EXEC用来执行一个事务;
3.DISCARD用来取消一个事务;
4.WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行

二、redis架构
单机:

容量有限,处理能力有限,部署简单,适合开发,或者不重要的数据.

主从复制:

1、master/slave 角色
2、master/slave 数据相同
3、降低 master 读压力在转交给从库
问题:1、无法保证高可用;2、没有解决 master 写的压力

哨兵:

Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作
特点:
1、保证高可用
2、监控各个节点
3、自动故障迁移
缺点:主从模式,切换需要时间丢数据
没有解决 master 写的压力

集群(proxy)

Twemproxy 是一个 Twitter 开源的一个 redis 和 memcache 快速/轻量级代理服务器; Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII 协议和 redis 协议。
特点:1、多种 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
2、支持失败节点自动删除
3、后端 Sharding 分片逻辑对业务透明,业务方的读写方式和操作单个 Redis 一致
缺点:增加了新的 proxy,需要维护其高可用。
failover 逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预

原文地址:https://blog.51cto.com/haoyonghui/2460847

时间: 2024-11-25 19:54:27

redis架构详解的相关文章

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变. Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生成22MB数据.整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条twe

高并发高流量网站架构详解

(推荐)高并发高流量网站架构详解 Web2.0的兴起,掀起了互联网新一轮的网络创业大潮.以用户为导 向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批新生的网站,也极大的方便了上网的人们.但Web2.0以用户为导向的理念,使得新 生的网站有了新的特点--高并发,高流量,数据量大,逻辑复杂等,对网站建设也提出了新的要求. 本文围绕高并发高流量的网站架构设计问题,主要研究讨论了以下内容: 首先在整个网络的高度讨论了使用镜像网站,CDN内容分发网络等技术对负载均衡带来的便利及各自的优缺

CentOS7/RHEL7安装Redis步骤详解

CentOS7/RHEL7安装Redis步骤详解 CentOS7/RHEL7安装Redis还是头一次测试安装了,因为centos7升级之后与centos6有比较大的区别了,下面我们就一起来看看CentOS7/RHEL7安装Redis步骤详解 方法一:使用命令安装(前提是已经安装了EPEL). 安装redis: yum -y install redis 启动/停止/重启 Redis启动服务:1systemctl start redis.service停止服务: systemctl stop red

瘸腿蛤蟆笔记37-cocos2d-x-3.2 Box2dTestBed架构详解

瘸腿蛤蟆原创笔记,欢迎转载,转载请标明出处: 上篇回顾 本篇名言:凡是内心能够想到.相信的,都是可以达到的. [Napoleon Hill] 在最早的时候,蛤蟆学习过cocos2d-x示例架构.这次在这个基础上,蛤蟆要学习Box2dTestBed这个物理引擎的DEMO架构.这样大家可以自己深入研究之了. 架构详解 第一步基本类介绍 首先从我们点到controller.cpp文件中.找到第43行如下: { "Box2d - TestBed", []() { return new Box2

领域驱动设计(Domain Driven Design)参考架构详解

转自:http://blog.csdn.net/bluishglc/article/details/6681253 领域驱动设计(Domain Driven Design)参考架构详解 摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrastructure.本文会对架构中一些重要组件和问题进行讨论,给出一些分析结论.本文原文连接:http://blog.

NopCommerce源码架构详解--初识高性能的开源商城系统cms

很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们的技术能力.所以我最近决定写一个“NopCommerce源码架构详解”的系列,来详细剖析NopCommerce的架构和原理. Nopcommerce主要用到的技术及特点: 1.Entity Framework 2.ASP.NET mvc 3.IoC容器+依赖注入(Autofac) 4.使用EF中的E

MySQL主从架构详解

1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

[转载]领域驱动设计(Domain Driven Design)参考架构详解

摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrastructure.本文会对架构中一些重要组件和问题进行讨论,给出一些分析结论.本文原文连接:http://blog.csdn.net/bluishglc/article/details/6681253 转载请注明出处! 目录 1.      架构概述2.      架构详解        2.1.  

Redis配置文件详解,针对2.6.3--2.6.7

Redis配置文件详解,针对2.6.3--2.6.7   # 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