redis分布式

scrapy-redis 分布式爬虫

ぃ、小莉子 提交于 2019-12-20 19:56:45
一、介绍 原来scrapy的Scheduler维护的是本机的任务队列(存放Request对象及其回调函数等信息)+本机的去重队列(存放访问过的url地址) 所以实现分布式爬取的关键就是,找一台专门的主机上运行一个共享的队列比如Redis, 然后重写Scrapy的Scheduler,让新的Scheduler到共享队列存取Request,并且去除重复的Request请求,所以总结下来,实现分布式的关键就是三点: #1、共享队列 #2、重写Scheduler,让其无论是去重还是任务都去访问共享队列 #3、为Scheduler定制去重规则(利用redis的集合类型) #安装: pip3 install scrapy-redis #源码: D:\python3.6\Lib\site-packages\scrapy_redis 二、scrapy-redis组件(settings配置过滤和调度) 1、只使用scrapy-redis的去重功能 源码分析 #一、源码:D:\python3.6\Lib\site-packages\scrapy_redis\dupefilter.py #二、配置scrapy使用redis提供的共享去重队列 #2.1 在settings.py中配置链接Redis REDIS_HOST = 'localhost' # 主机名 REDIS_PORT = 6379 # 端口

开发之缓存与数据库优化

核能气质少年 提交于 2019-12-20 02:09:10
此文仅入门,需要扩展挖深,自行钻研 缓存-redis 数据库-mysql 1. 缓存 什么是缓存? 定义 缓存是系统快速响应的一种关键性技术,是一组被保存起来以备将来使用的东西,介于应用开发和系统开发之间,是产品经理们经常顾及不到的地方,也是技术架构设计的非功能性约束。 分类 按软件系统所处的位置不同分类 客户端缓存 服务端缓存 网络中的缓存 按规模和部署方式分类: 单体缓存 缓存集群 分布式缓存 为什么要用缓存? 为什么要用缓存,我们这里仅从软件开发层面来分析,首先你必须了解关于系统的性能的一些指标。 系统的性能的指标一般包括: 响应时间:系统对用户的请求作出的响应时间,它完整的记录了整个系统处理请求的时间。 延迟时间:一般指系统处理完请求后,由于网络传输到用户之间的网络延迟时间。 吞吐量:指单位时间内系统处理请求的数量。无并发的系统中,它与响应时间成反比。 并发用户数:指系统能够同时承载的正常使用系统功能的用户数量,它比 吞吐量更能直观的反应系统的性能 资源利用率:反映的是一段时间内资源平均被占用的情况 系统的性能,反映在从浏览器到网络,再到服务器,甚至数据库等各个应用层面。而在各个层面使用缓存将大大提升整个系统的性能。 缓存离客户端越近,响应时间则越快;缓存离数据库越近,则响应时间越长。 缓存是一种用空间换时间的概念。 如果带宽收费(流量付费),那么缓存就是变相的省钱利器。

redis 哨兵集群实现高可用

霸气de小男生 提交于 2019-12-19 04:46:56
Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵。哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis master 和 slave 进程是否正常工作。 消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。 故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。 配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。 哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。 故障转移时,判断一个 master node 是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题。 即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了。 哨兵的核心知识 哨兵至少需要 3 个实例,来保证自己的健壮性。 哨兵 + redis 主从的部署架构,是 不保证数据零丢失 的,只能保证 redis 集群的高可用性。 对于哨兵 + redis 主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练。 哨兵集群必须部署 2 个以上节点,如果哨兵集群仅仅部署了 2 个哨兵实例,quorum = 1。

redis-cluster

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-19 01:02:21
为什么要用redis-cluster 1.并发问题 redis官方生成可以达到 10万/每秒,每秒执行10万条命令假如业务需要每秒100万的命令执行呢? 2.数据量太大 一台服务器内存正常是16~256G,假如你的业务需要500G内存, 新浪微博作为世界上最大的redis存储,就超过1TB的数据,去哪买这么大的内存条?各大公司有自己的解决方案,推出各自的集群功能,核心思想都是将数据分片(sharding)存储在多个redis实例中,每一片就是一个redis实例。 各大企业集群方案: twemproxy由Twitter开源 Codis由豌豆荚开发,基于GO和C开发 redis-cluster官方3.0版本后的集群方案 解决方案如下 配置一个超级牛逼的计算机,超大内存,超强cpu,但是问题是。。。。 2.正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力, 一堆机器做一件事 客户端分片 redis3.0集群采用P2P模式,完全去中心化,将redis所有的key分成了16384个槽位,每个redis实例负责一部分slot,集群中的所有信息通过节点数据交换而更新。 redis实例集群主要思想是将redis数据的key进行散列,通过hash函数特定的key会映射到指定的redis节点上 数据分布原理图 数据分布理论

第七章· Redis Cluster 核心技术

為{幸葍}努か 提交于 2019-12-18 23:19:57
一、Redis Cluster 分布式集群 1.什么是Redis Cluster 1)Redis集群是一个可以在多个Redis节点之间进行数据共享的设施(installation)。 2)Redis集群不支持那些需要同时处理多个键的Redis命令,因为执行这些命令需要在多个Redis节点之间移动数据,并且在高负载的情况下,这些命令将降低Redis集群的性能,并导致不可预测的行为。 3)Redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。 4)Redis集群有将数据自动切分(split)到多个节点的能力。 2.Redis Cluster的特点 高性能 1.在多酚片节点中,将16384个槽位,均匀分布到多个分片节点中 2.存数据时,将key做crc16(key),然后和16384进行取模,得出槽位值(0-16384之间) 3.根据计算得出的槽位值,找到相对应的分片节点的主节点,存储到相应槽位上 4.如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储 高可用 在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof功能,同时当主节点down,实现类似于sentinel的自动failover的功能。 3

MYSQL:NoSQL(Redis服务)

拈花ヽ惹草 提交于 2019-12-18 00:55:41
文章目录 NoSQL相关概念 RDBMS NoSQL 部署Redis服务器 Redis介绍 源码编译安装 初始配置 服务基本使用 管理服务 连接服务 Redis常用命令 配置文件解析 配置分类 常用配置 内存管理 修改Redis服务运行参数 与网站服务一起使用(LNMP+Redis) 部署LNMP环境 在主机192.168.4.57部署LNMP环境 配置PHP支持redis NoSQL相关概念 RDBMS 关系数据库管理系统 - R elational D ata b ase M anagement S ystem -按照预先设置的组织结构,将数据存储在物理介质上 -数据之间可以做关联操作 主流的RDBMS软件 -MySQL -MariaDB -Oracle -DB2 -SQL Server NoSQL NoSQL=Not Only SQL -意思是"不仅仅是SQL" -泛指非关系型数据库 -不需要预先定义数据存储结构 -每条记录可以有不同的数据类型和字段个数 主流软件 -Memcached -Redis -MongoDB -CouchDB -Neo4j -FlockDB 部署Redis服务器 Redis介绍 - R emote D ictionary S erver -是一款高性能的(Key/Values)分布式内存数据库 -支持数据持久化(定期把内存里数据存储到硬盘)

[Redis]c# redis缓存辅助类

ⅰ亾dé卋堺 提交于 2019-12-17 06:50:39
using NServiceKit.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace H5.Utility { /// <summary> /// 分布式缓存 /// </summary> public static class RedisCache { private static IRedisClient RCClient = null; /// <summary> /// 设置redis缓存 /// </summary> /// <typeparam name="T">泛型类</typeparam> /// <param name="key">缓存键</param> /// <param name="value">泛型实体</param> /// <param name="expire">过期时间</param> /// <returns></returns> public static bool Set<T>(string key, T value, DateTime expire) { try { using (RCClient = GetClient())

[Redis]c# redis缓存辅助类

懵懂的女人 提交于 2019-12-17 06:50:02
/// <summary> /// 分布式缓存 /// </summary> public static class RedisCache { /// <summary> /// 单例工厂,每次初始化redis客户端从工厂中获取 /// </summary> private static IRedisClientFactory _factory = RedisCacheClientFactory.Instance; /// <summary> /// 设置redis缓存 /// </summary> /// <typeparam name="T">泛型类</typeparam> /// <param name="key">缓存键</param> /// <param name="value">泛型实体</param> /// <param name="expire">过期时间</param> /// <returns></returns> public static bool Set<T>(string key, T value, DateTime expire) { try { using (var client = GetClient()) { return client.Set<T>(key, value, expire); } } catch { return false;

Redis Cluster集群配置与管理

痞子三分冷 提交于 2019-12-17 02:58:52
Redis Cluster介绍 Redis Cluster集群是redis集群的一种方式,由官方提供,由多个节点组成的分布式网络集群,每个节点可以是主,也可以是从,但每个主节点都需要有对应的从节点,保证高可用,主节点提供数据读写,不支持同时处理多个键(如mset/mget命令),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为。支持在线增加、删除节点,客户端可以连任何一个主节点进行读写。 Redis Cluster采用了分布式系统的分片(分区)的思路,每个主节点为一个分片,这样也就意味着 存储的数据是分散在所有分片中的。当增加节点或删除主节点时,原存储在某个主节点中的数据 会自动再次分配到其他主节点。 如图,各节点间是相互通信的,通信端口为各节点Redis服务端口+10000,这个端口是固定的,所以注意防火墙设置, 节点之间通过二进制协议通信,这样的目的是减少带宽消耗。 在Redis Cluster中有一个概念slot,我们翻译为槽。Slot数量是固定的,为16384个。这些slot会均匀地分布到各个节点上,另外Redis的键和值会根据hash算法存储在对应的slot中。简单讲,对于一个键值对,存的时候在哪里是通过 hash算法算出来的,那么取得时候也会算一下,知道值在哪个slot上。根据slot编号再到对应的节点上去取。

MySQL数据库初识

拥有回忆 提交于 2019-12-16 22:52:51
一 数据库概述 1. 数据库???   什么是数据库呢?   先来看看百度怎么说的 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。   百度的貌似不好理解啊,让我说啊,数据库是存储数据的地方,超哥,你这不是废话么?这位同学,你你你你你说的对,哈哈,存数据的地方是存在哪里呢,存在硬盘上,为什么不是存在内存里面,因为内存无法永久保存。之前我们存数据都是使用的文件,在一个word文档里面写一些羞羞的网址,然后保存,就存储到硬盘上了。有同学就会说了,超哥,我这通过文件不是也将数据保存上了吗?是的,没毛病,但是你想,通过文件来操作数据,效率是不是很低,首先打开关闭就比较慢,其次是我们操作起来也比较麻烦,对不对,如果我想记录一条关于我个人信息的数据,我使用文档来存,是不是很不友好,并且我们要查数据的时候,看图1:图1是一个word里面记录的信息,如果我想查询出所有人的名字,这个操作是不是就很难搞定了,来来来,配合起来~~,你应该说是的,那我就接着说,有同学可能就会说了,老师我用excel啊,看图2,一列就搞定了,没毛病,但是你想打开操作excel效率低不低。并且通过你自己写的程序来操作这些文件是不是很麻烦