redis分布式

分布式集群系统下的高可用session解决方案

邮差的信 提交于 2019-11-29 01:37:22
目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制。 目前,在集群系统下实现session统一的有如下几种方案: (1) 应用服务器间的session复制共享(如tomcat session共享) (2) 基于cache DB缓存的session共享 应用服务器间的session复制共享 session复制共享,主要是指集群环境下,多台应用服务器之间同步session,使session保持一致,对外透明。 如果其中一台服务器发生故障,根据负载均衡的原理,web服务器(apache/nginx)会遍历寻找可用节点,分发请求,由于session已同步,故能保证用户的session信息不会丢失。 此方案的不足之处: 技术复杂,必须在同一种中间件之间完成(如:tomcat-tomcat之间). session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化较快时, 性能下降更加显著. 这种特性使得web应用的水平扩展受到了限制。 Session内容序列化(serialize),会消耗系统性能。 Session内容通过广播同步给成员,会造成网络流量瓶颈,即便是内网瓶颈。 基于cache DB缓存的session共享 即使用cacheDB存取session信息

Redis和MongoDB的区别

天大地大妈咪最大 提交于 2019-11-29 00:42:05
项目中用的是MongoDB,但是为什么用其实当时选型的时候也没有太多考虑,只是认为数据量比较大,所以采用MongoDB。 最近又想起为什么用MongoDB,就查阅一下,汇总汇总: 之前也用过redis,当时是用来存储一些热数据,量也不大,但是操作很频繁。现在项目中用的是MongoDB,目前是百万级的数据,将来会有千万级、亿级。 就Redis和MongoDB来说,大家一般称之为 Redis缓存、MongoDB数据库 。这也是有道有理有根据的, Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,其中数据的增删改查也只是像变量操作一样简单; MongoDB却是一个“存储数据”的系统,增删改查可以添加很多条件,就像SQL数据库一样灵活,这一点在面试的时候很受用。 Mongodb与Redis应用指标对比 MongoDB和Redis都是NoSQL,采用结构型数据存储。二者在使用场景中,存在一定的区别,这也主要由于 二者在内存映射的处理过程,持久化的处理方法不同。MongoDB建议集群部署,更多的考虑到集群方案,Redis 更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。 指标 MongoDB(v2.4.9) Redis(v2.4.17) 比较说明 实现语言 C++ C/C++ - 协议 BSON、自定义二进制 类Telnet - 性能 依赖内存,TPS较高

redis

巧了我就是萌 提交于 2019-11-28 20:35:42
一、 数据库 1、数据库 (1)关系型数据库SQL<MySQL、Oracle、DB2、SQLServer>:有表,而且表与表直接存在关系<主外键>; (2)非关系型数据库No SQL(没有表),可以作为关系型数据库的一个很好的补充,不能替代; 2、NoSQl产生的原因 对数据库高并发访问的需求; 3、NoSQl数据库的分类 (1) 键值(Key-Value)存储数据库 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB。 典型应用:内容缓存,主要用于处理大量数据的高访问负载。 数据模型:一系列键值对 优势:快速查询 劣势:存储的数据缺少结构化 (2)列存储数据库 相关产品:Cassandra, HBase, Riak 典型应用:分布式的文件系统 数据模型:以列簇式存储,将同一列数据存在一起 优势:查找速度快,可扩展性强,更容易进行分布式扩展 劣势:功能相对局限 (3)文档型数据库 相关产品:CouchDB、MongoDB 典型应用:Web应用(与Key-Value类似,Value是结构化的) 数据模型:一系列键值对 优势:数据结构要求不严格 劣势:查询性能不高,而且缺乏统一的查询语法 (4)图形(Graph)数据库 相关数据库:Neo4J、InfoGrid、Infinite Graph 典型应用:社交网络 数据模型:图结构

NoSql数据库redis基本知识

≯℡__Kan透↙ 提交于 2019-11-28 20:10:01
Redis 一、NoSql介绍 能干嘛 KV+Cache+Persistence NoSql=Not Only SQL 泛指非关系型的数据库 这些类型的数据存储不需要固定的模式,无需多余的操作就可以横向扩展 CAP redis mongdb memcached mysql慢的原因 1、做大数据的时候,cpu慢 2、频繁的访问mysql,io慢 Memcashed(缓存)+mysql+垂直拆分 mysql主从复制读写分离 分表分库+水平拆分+mysql集群 水平拆分降低了单张表的故障发生率和数据的冗余程度 今天我们可以通过第三方平台(如:google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,SQL数据库已经不适合这些应用了,NoSql数据库的发展也却能很好的处理这些大数据 3v+3高 大数据时代的3v 海量Volume 多样Variety 实时Velocity 互联网需求的3高 高并发 高可扩 高性能 总结大型互联网应用(大数据、高并发、多样数据类型)的难点和解决方案 难点 数据类型的多样性 数据源多样性和变化结构 数据源改造而数据服务平台不需要大面积重构 解决办法 统一数据访问层 二、CAP+BASE 传统的ACID分别是什么 A(Atomicity)原子性 C

redis cluster

社会主义新天地 提交于 2019-11-28 19:49:44
一、Redis Cluster(Redis集群)简介 redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本; redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点; redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例; 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法; 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法; 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时

6.主从复制

断了今生、忘了曾经 提交于 2019-11-28 18:42:56
作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-08-26 20:53:04 星期一 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程中的编写的文章 如您在阅读过程中发现文章错误,可添加我的微信 tangy8080 进行反馈.感谢您的支持。 文章主题 了解Redis主从复制的过程 主从复制则侧重解决数据的多机热备,主从复制是实现负载均衡和故障恢复的基础 前置条件 [无] 正文 概述 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到 其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,哨兵和集群都是在复制的基础上实现高可用的。 参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认 情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点 主从复制的配置 二进制方式安装下的配置 在配置文件中加入slaveof{masterHost}{masterPort}随Redis启动生效。 在redis-server启动命令后加入--slaveof{masterHost}{masterPort}生效。

关于Redis的工作模式

ⅰ亾dé卋堺 提交于 2019-11-28 18:27:57
1、哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master。 缺点:哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。 哨兵模式的配置方法见: 2、集群模式 redis 集群是一个由多个 主从节点群组成的分布式服务器群 ,它具有 复制、高可用和分片 特性。 Redis 集群不需要 sentinel 哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文 档称可以线性扩展到上万个节点 ( 官方推荐不超过 1000 个节点 ) 。 redis 集群的 性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单 集群模式的搭建方法,见: https://www.cnblogs.com/cosmos-wong/p/11420019.html 来源: https://www.cnblogs.com/cosmos-wong/p/11420139.html

使用scrapy-redis搭建分布式爬虫环境

妖精的绣舞 提交于 2019-11-28 16:33:34
scrapy-redis简介 scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署。 有如下特征:  分布式爬取   您可以启动多个spider工程,相互之间共享单个redis的requests队列。最适合广泛的多个域名网站的内容爬取。  分布式数据处理   爬取到的scrapy的item数据可以推入到redis队列中,这意味着你可以根据需求启动尽可能多的处理程序来共享item的队列,进行item数据持久化处理  Scrapy即插即用组件   Scheduler调度器 + Duplication复制 过滤器,Item Pipeline,基本spider scrapy-redis架构 scrapy-redis整体运行流程如下: 1. 首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给 Master 处理; 2. Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。 Scrapy-Redis默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作Scrapy-Redis都已经帮我们做好了,我们只需要继承RedisSpider、指定redis

分布式设计--数据库主从

隐身守侯 提交于 2019-11-28 16:00:53
数据库主从 作用 数据备份 读写分离 特点 只能一主多从 (mysql可以多主多从) 从数据库不能写入 (mysql可以写) 配置 # 主从数据库分别配置ip/端口 bind 127.0.0.1 port 6379 # 从数据库配置slaveof参数: 主数据库ip 主数据库端口 slaveof 127.0.0.1 6379 # 以下两条连起来: 当至少有2个从数据库可以进行复制并且响应延迟都在10秒之内时, 主数据库才允许写操作 min-slaves-to-write 2 min-slaves-max-lag 10 # ubuntu的redis安装目录, 其中包含了redis和sentinal的配置模板 /usr/local/redis/ # ubuntu中 启动/重启/停止 默认的redis服务 /etc/init.d/redis-server start/restart/stop 来源: https://www.cnblogs.com/oklizz/p/11414367.html

redis面试总结(一)

别说谁变了你拦得住时间么 提交于 2019-11-28 13:08:17
1.项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 面试题剖析 为什么要用缓存? 用缓存,主要有两个用途: 高性能 、 高并发 。 高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办? 缓存啊,折腾 600ms 查出来的结果,扔缓存里,一个 key 对应一个 value,下次再有人查,别走 mysql 折腾 600ms 了,直接从缓存里,通过一个 key 查出来一个 value,2ms 搞定。性能提升 300 倍。 就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中,后面直接读缓存就好。 高并发 mysql 这么重的数据库,压根儿设计不是让你玩儿高并发的,虽然也可以玩儿,但是天然支持不好。mysql 单机支撑到 2000QPS 也开始容易报警了。 所以要是你有个系统,高峰期一秒钟过来的请求有 1万,那一个 mysql 单机绝对会死掉。你这个时候就只能上缓存,把很多数据放缓存,别放 mysql。缓存功能简单,说白了就是 key-value 式操作,单机支撑的并发量轻松一秒几万十几万,支撑高并发 so easy。单机承载并发量是