redis分布式

Redis 与 MQ 的区别

最后都变了- 提交于 2019-11-29 22:15:37
  Redis是一个高性能的key-value数据库,它的出现很大程度补偿了memcached这类key-value存储的不足。虽然它是一个数据库系统,但本身支持MQ功能,完全可以当做一个轻量级的队列服务器使用。   不过,Redis只是提供一个高性能的、原子操作内存键值队,具有高速访问能力,虽可用做消息队列的存储,但是不具备消息队列的任何功能和逻辑,要作做为消息队列来实现的话,功能和逻辑要通过上层应用自己实现。 Redis从2.0版本开始支持发布/订阅指令,发布者调用redis的publish方法往特定的channel发送消息,订阅者在初始化的时候要订阅到该channel,一旦有消息就会立即接收。 Redis 消息推送(基于分布式 pub/sub)多用于实时性较高的消息推送,并不保证可靠。 其他的mq和kafka保证可靠但有一些延迟(非实时系统没有保证延迟)。redis-pub/sub断电就清空,而使用redis-list作为消息推送虽然有持久化,但是也并非完全可靠不会丢。 另外一点,redis 发布订阅除了表示不同的 topic 外,并不支持分组。 比如,kafka中发布一个东西,多个订阅者可以分组,同一个组里只有一个订阅者会收到该消息,这样可以用作负载均衡。 性能上,对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间

scrapy分布式爬虫的流程

限于喜欢 提交于 2019-11-29 21:19:06
最近在爬取网站中一直使用 redis 来管理分发爬虫任务,让我对 scrapy-redis 有很深刻的理解,下面让我慢慢说来 。 首先说下scrapy 和scrapy-redis的关系 scrapy-redis 与 Scrapy的关系就像电脑与固态硬盘一样,是电脑中的一个插件,能让电脑更快的运行。 Scrapy 是一个爬虫框架,scrapy-redis 则是这个框架上可以选择的插件,它可以让爬虫跑的更快。 为什么使用 scrapy-redis 首先,在实际开发中,我们总会对爬虫速度表示不满,为啥这么慢,能不能跑快点。除了爬虫本身的优化,我们就要引入分布式爬虫的概念。Scrapy本身是不支持分布式的,因为它的任务管理和去重全部是在机器内存中实现的。 我自己对分布式爬虫的理解就是:多个爬虫执行同一个任务 在 Scrapy 中最出名的分布式插件就是scrapy-redis了,scrapy-redis的作用就是让你的爬虫快、更快、超级快。 那如何让你的爬虫变成分布式的呢? 那我给你门作具体介绍 1.redis 服务 2.确保scrapy-redis 环境已经安装 3.确定单机scrapy 能够正常运行 4.配置setting.py 文件 setting.py 配置代码如下 # url 指纹过滤器 'DUPEFILTER_CLASS' : "scrapy_redis.dupefilter

Redis学习笔记(11)——Redis缓存集群方案

断了今生、忘了曾经 提交于 2019-11-29 20:01:32
由于单台 Redis 服务器的内存管理能力有限,使用过大内存的Redis又会使得服务器的性能急剧下降,一旦服务器发生故障将会影响更大范围业务,而Redis 3.0 beta1支持的集群功能还不适合生产环境的使用。于是为了获取更好的Redis缓存性能及可用性,很多公司都研发了Redis缓存集群方案。现对 NetFlix 、Twitter、国内的 豌豆荚 在缓存集群方面的解决方案进行一个汇总,以供读者参考,具体内容如下: 1、NetFlix对Dynamo的开源通用实现Dynomite Dynomite 是NetFlix对亚马逊分布式存储引擎Dynamo的一个开源通用实现,使用C/C++语言编写、以代理的方式实现的Redis缓存集群方案。Dynomite不仅能够将基于内存的Redis和Memcached打造成分布式数据库,还支持持久化的MySQL、 BerkeleyDB 、 LevelDB 等数据库,并具有简单、高效、支持跨数据中心的数据复制等优点。Dynomite的最终目标是提供数据库存储引擎不能提供的简单、高效、跨数据中心的数据复制功能。Dynomite遵循 Apache License 2.0开源协议 发布,更多关于Dynomite的信息请查看NetFlix技术博客对 Dynomite的介绍 。 2、Twitter的Redis/Memcached代理服务Twemproxy

pika常见问题解答(FAQ)

坚强是说给别人听的谎言 提交于 2019-11-29 19:38:54
1 编译安装 Q1: 支持的系统? A1: 目前只支持Linux环境,包括Centos,Ubuntu; 不支持Windowns, Mac Q2: 怎么编译安装? A2: 参考 编译安装wiki Q3: Ubuntu编译偶尔报错isnan isinf was not declared? A3: 一些旧版本的pika对Ubuntu环境兼容不好,某些情况下会出现;可以先修改代码,用std::isnan和std::isinf替代isnan,isinf, 并包含头文件cmath。 我们会在新版兼容这个。 #include <cmath> 2 设计与实现 Q1: 为什么要开那么多线程?比如purge,搞个定时任务不就好了。难道编程框架不支持定时器? A1: pika有一些比较耗时的任务,如删binlog,扫描key,备份,同步数据文件等等,为了不影响正常的用户请求,这些任务都是放到后台执行的,并且将能并行的都放到不同线程里来最大程度上提升后台任务的执行速度;你说的变成框架是pink吗?pink是支持定时器的,每一个workerthread只要用户定义了cronhandle和频率,就会定时执行要执行的内容,不过这时候worker是被独占的,响应不了用户请求,所以占时的任务最好还是单独开线程去做,redis的bio也是这个原因 Q2: heartbeat让sender做不就好了

Redis

浪尽此生 提交于 2019-11-29 19:36:18
Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding)等特性,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。 Redis简介 Redis官网: http://redis.io/ Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并且借助许多高层级的接口使其可以胜任,如缓存、队列系统的不同角色。 源码托管在github https://github.com/antirez/redis 历史与发展 2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便 对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。 不过Salvatore

Redis实战(四) 集群机制

冷暖自知 提交于 2019-11-29 19:23:35
文章目录 Replication(主从复制) 1.1. 配置主服务器 1.2. 配置从服务器 1.3. 测试 Sentinel(哨兵) 2.1. 配置Sentinel 2.2. 启动 Sentinel 2.3. 测试 Twemproxy Codis Redis 3.0集群 5.1. 环境搭建 5.2. 创建集群 微信公众号 加入全国服务端技术社群「后端圈」(点击加入) <<< 下面介绍Redis的集群方案。 Replication(主从复制) Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份,从而达到主从机制。为了实现主从复制,我们准备三个redis服务,依次命名为master,slave1,slave2。 配置主服务器 为了测试效果,我们先修改主服务器的配置文件redis.conf的端口信息 port 6300 配置从服务器 replication相关的配置比较简单,只需要把下面一行加到slave的配置文件中。你只需要把ip地址和端口号改一下。 slaveof 192.168.1.1 6379 我们先修改从服务器1的配置文件redis.conf的端口信息和从服务器配置。 port 6301 slaveof 127.0.0.1 6300 我们再修改从服务器2的配置文件redis.conf的端口信息和从服务器配置。 port

大容量类Redis存储--Pika介绍

依然范特西╮ 提交于 2019-11-29 19:21:03
嘉宾介绍 大家好,首先自我介绍一下,我是360 web平台-基础架构组的宋昭,负责大容量类redis存储pika的和分布式存储Bada的开发工作,这是我的github和博客地址,平时欢迎指正交流^^ 我的github: https://github.com/KernelMaker 我的博客: http://kernelmaker.github.io 下面是pika的github,欢迎关注 https://github.com/Qihoo360/pika Pika介绍 pika是360 DBA和基础架构组联合开发的类redis存储系统, 使用Redis协议,兼容redis绝大多数命令(String,Hash,List,ZSet,Set),用户不需要修改任何代码, 就可以将服务迁移至pika. pika主要是使用持久化存储来解决redis在内存占用超过50G,80G时遇到的如启动恢复时间长,主从同步代价大,硬件成本贵等问题,并且在对外用法上尽可能做到与redis一致,用户基本上对后端是redis或pika无感知 既然pika要做到兼容redis并解决redis在大容量时的各种问题,那么首先要面对的问题便是如何从redis迁移到pika,毕竟现在redis的使用非常广泛,如果从redis迁移到pika很麻烦,那应该也不会有多少人用了 从redis迁移到pika需要经过几个步骤?

基于Redis实现分布式消息队列

孤者浪人 提交于 2019-11-29 18:50:38
基于Redis实现分布式消息队列 原文地址: http://blog.csdn.net/stationxp/article/details/45731497 ) 1、为什么需要消息队列? 当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。 举个例子:业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力。 再举个例子:调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送。 再举个栗子,交互模块5:00到24:00和电商系统联通,和内部ERP断开。1:00到4:00和ERP联通,和电商系统断开。 再举个例子,服务员点菜快,厨师做菜慢。 再举个例子,到银行办事的人多,提供服务的窗口少。 乖乖排队吧。 2、使用消息队列有什么好处? 2.1、提高系统响应速度 使用了消息队列,生产者一方,把消息往队列里一扔,就可以立马返回,响应用户了。无需等待处理结果。 处理结果可以让用户稍后自己来取,如医院取化验单。也可以让生产者订阅(如:留下手机号码或让生产者实现listener接口、加入监听队列),有结果了通知。获得约定将结果放在某处,无需通知。 2.2、提高系统稳定性 考虑电商系统下订单,发送数据给生产系统的情况。 电商系统和生产系统之间的网络有可能掉线,生产系统可能会因维护等原因暂停服务。

redis缓存 面试总结

喜你入骨 提交于 2019-11-29 15:19:01
缓存的收益和成本 1、缓存带来的回报 高速读写 :缓存加速读写速度:CPU L1/L2/L3 Cache、Linux page Cache加速硬盘读写、浏览器缓存、Ehcache缓存数据库结果 降低后端负载 :后端服务器通过前端缓存降低负载: 业务端使用Redis降低后端MySQL负载等 2、缓存带来的代价 数据不一致: 缓存层和数据层有时间窗口不一致,和更新策略有关 代码维护成本:原本只需要读写MySQL就能实现功能,但加入了缓存之后就要去维护缓存的数据,增加了代码复杂度。 堆内缓存可能带来内存溢出的风险影响用户进程,如ehCache、loadingCache: 堆内缓存是由jvm分配的缓存 jvm运行时数据区:堆、java虚拟机栈、方法区、本地方法栈、程序计数器 堆内缓存和远程服务器缓存redis的选择 堆内缓存一般性能更好,远程缓存需要套接字传输 用户级别缓存尽量采用远程缓存 大数据量尽量采用远程缓存,服务节点化原则 redis的特性 redis有哪些特性 丰富的数据类型 可用于缓存,消息按key设置过期时间,过期后自动删除 setex set expire时间 支持持久化方式rdb和aof 主从分布式,redis支持主从支持读写分离 redis cluster,动态扩容方式。 你用过redis的哪几种特性 用sorted Set实现过排行榜项目

Redis集群

≯℡__Kan透↙ 提交于 2019-11-29 15:07:01
集群:多个服务器集中在一起 , 实现同一个业务 ,当一台服务器不能满足开发需求的时候,需要多台服务器的支持,这时就需要做集群,但是集群往往伴随着分布式. 分布式服务之间的相互通信:RPC方案,远程调用框架 分布式的缺点:事务和缓存的处理问题 集群和分布式概述 a) 分布式:将不同的业务分布在不同的服务器,web应用和 数据库服务分开 集群分类 a) 数据库集群,应用集群,功能集群,Tomcat集群 集群的两大特性 a) 可扩展性 i. 可以动态的添加新的服务器,增强集群的性能 b) 高可用性 i. 集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性,当访问的服务器挂了时,集群要有能力找可以正常使用额服务器继续提供服务器。 集群的两大能力 a) 负载均衡 i. 负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 ii. 负载均衡的策略:轮询,权重,随机 b) 错误恢复 i. 由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。当访问的服务器挂了时