redis分布式

分布式爬虫

孤街浪徒 提交于 2019-12-08 14:50:28
原来的scrapy中的Scheduler维护的是当前机器中的任务队列(存放着Request对象以及回调函数等信息) + 当前的去重队列(存放访问过的url地址) 实现分布式的关键就是需要找一台专门的主机在上面运行一个共享的队列,比如redis。然后重写scrapy的Scheduler,让新的Scheduler到共享的队列中存取Request,并且去除重复的Request请求   1、共享队列   2、重写Scheduler,让它不论是去重还是执行任务都去访问共享队列中的内容   3、为Scheduler专门定制去重规则(利用redis的集合类型) # 在scrapy中使用redis的共享去重队列 # 1、在settings中配置redis链接 REDIS_HOST='localhost' # 主机名称 REDIS_PORT='6379' # 端口号 REDIS_URL='redis://user:pass@hostname:9001' # 连接url,优先于上面的配置 REDIS_PARAMS={} # redis连接参数 REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient' # 指定连接redis的python模块 REDIS_ENCODING = 'utf-8' # redis的编码类型 # 2、让scrapy使用共享的去重队列

Redis Sentinel集群搭建

懵懂的女人 提交于 2019-12-07 16:06:14
Redis sentinel主要服务和维护主从复制关系,比如master宕机后管理slave成为升级为matser 主要博客如下 Redis中sentinel集群的搭建和Jedis测试 图文教程[一] Redis中sentinel集群的搭建和Jedis测试 图文教程[二] Redis Sentinel集群方案--单机测试 Jedis分片连接池(分布式) 在这里来说明一下master-sentinel与slave-sentinel的关系 master: 127.0.0.1 6379 slave1: 127.0.0.1 6479 slave2: 127.0.0.1 6579 master-sentinel: 127.0.0.1 26379 slave1-sentinel: 127.0.0.1 26479 slave2-sentinel: 127.0.0.1 26579 master-sentinel负责集群主节点master的管理 1.如果master宕机, master-sentinel会从slaves中选择一个来作为master 2.之前的master如果恢复,那么不会重新成为master,而是会成为一个slave,而这个slave和master之前的监控器slave-sentinel会反向监控新的slave信息给新的master 3. master

Redis Cluster 集群扩容与收缩

此生再无相见时 提交于 2019-12-07 16:01:04
Redis Cluster 集群伸缩 1. 伸缩原理 Redis 提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以对下线节点进行缩容。 我们在Redis Cluster 介绍与搭建这篇文章中搭建了一个三主三从的redis集群(如下图所示)。在搭建 Redis Cluster 通信流程剖析这篇博客中根据源码详细剖析了搭建集群的流程。 本篇博客要讲的是,Redis集群的扩容和缩容过程。 我们先根据Redis Cluster 介绍与搭建将如图的集群搭建起来,查看搭建的效果。 127.0.0.1:6379> cluster nodes 29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 myself,master - 0 0 7 connected 0-5461 8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 master - 0 1496717082785 3 connected 5462-10922 66478bda726ae6ba4e8fb55034d8e5e5804223ff 127.0.0.1:6381 master - 0 1496717085793 2 connected 10923-16383

Redis 应用场景

﹥>﹥吖頭↗ 提交于 2019-12-07 15:32:29
前言 这篇主要是记录一下之前看到的一个公开课视频内容,大体讲解的是Redis各种数据结构的应用场景; 如视频所说,一些中小型公司使用Redis的应用场景比较单一, 使用的数据结构大部分是string,或者是hash, 其他数据结构基本使用的很少, 至少我呆过的公司目前是这样的,尴尬!!! 数据结构 Redis中基本的五种数据结构,分别是字符串string、哈希hash、列表list、集合set、有序集合zset,各种数据结构基本使用请参考 http://redisdoc.com/ ,这里就主要记录应用场景,数据存放结构如下图: String 结构 --具体命令使用参考 http://redisdoc.com/string/ String应用场景 Session共享,根据编程环境提供的对应的RedisSession库可以实现Session共享,这里应该都使用过; 对象缓存,相信很多小伙伴和我一样,也是用Json字符串或者Hash存储, 其实这里说的用MSET和MGET也是一个不错的选择; 分布式锁,主要利用SETNX命令限制, SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写,但光用这个远远不够,还需要考虑业务其他相关场景; 计数器,主要用作文章的浏览次数,页面访问量等; Hash数据结构 具体命令使用参考 http://redisdoc.com

记一次 BUG 的排查过程

瘦欲@ 提交于 2019-12-07 12:16:27
最近生产上上线了一个新的功能,在业务人员使用过程中,通过查看日志我们发现一个诡异的问题。这篇文章记录一下这个问题的排查过程以及解决方法。 存在问题的程序使用了 C 语言的 Redis 客户端 hiredis 来连接和操作 Redis。由于处于分布式的环境,所以我们使用了 Redis 的事务的特性,以避免多个客户端同时对 Redis 数据进行更改导致数据错乱的情况出现。有关 hiredis 的使用以及 Redis 事务特殊的介绍,可以参考文章 《Redis C 语言客户端 hiredis 的使用》 ,以及 《Hiredis 实现 Redis 流水线》 。 程序原始代码如下: void GFRedisClient::QueryRowsByFields( const char *key, map < string , string > &mapField2Value, vector < map < string , string > > &outRecords) { if (!key || strlen (key) <= 0 ) { KSBLog(WARN, "传入的服务代码为空" ); return ; } // 获取Redis连接 redisContext *ctx = CreateContext(); if (ctx == NULL) { KSBLog(WARN, "查询二维表出错

Redis之哨兵机制(五)

与世无争的帅哥 提交于 2019-12-07 12:07:29
什么是哨兵机制 Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: · 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 · 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。 · 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。 哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master. 每个哨兵(sentinel) 会向其它哨兵(sentinel)

Redis数据类型及常用命令

时光毁灭记忆、已成空白 提交于 2019-12-07 00:16:35
Redis基础笔记 注:该笔记主要为Redis数据类型与相关命令介绍 图片不可见可连接: https://github.com/zlk19921105/note/blob/master/zlk/Redis.md 1、简介 1.1 Redis有ANSI C编写,其是一个key-value存储系统, 支持string(字符串)、list(链表)、set(集合)、zset(有序集合)、Hash(哈希值)。 其数据支持push/pop/add/remove等操作。数据会周期性的缓存于内存或者虚拟内存。虚拟高,但是有一定程度的数据丢失。支持主从同步(将数据同步到多台从库上)。 作用:用于解决海量数据下数据库的性能瓶颈问题,其有很高的扩展性。 常见大数据两种解决方式: 1)大规模的互联网应用,使用垂直和水平的方式对RDBMS数据库进行切割分类部署到一个集群上。 优点:关系型数据库为熟悉技术。缺点:只能针对特定应用,或者说数据量要相对可控,数据有一定的调整性。 2)云存储,客户的用户数据不断增加,运营商无法对客户的数据库进行切割。此时必须使用key-value数据库存储。 有点:分布式易于扩充,支持数量很多的并发查询,高度容错。 1.2 Redis的应用 案例:新浪微博(200多台物理机,400多端口) 1)应用直接访问Redis. 2)应用直接访问Redis,访问Redis失败才访问mysql

基于AKS部署Redis集群

徘徊边缘 提交于 2019-12-06 22:10:43
Redis( Remote Dictionary Server 远程字典服务)是一个 ANSI C语言编写的开源内存 Key-Value数据库,广泛用于数据库与应用之间的预留缓存( Cache-Aside)、网页静态内容缓存、用户会话缓存、作业消息队列以及分布式事务等场景。业绩知名企业都在使用 Redis,例如 GitHub、 Twitter、 StackOverflow、 Snapchat等等。 Redis 有三种使用模式,单实例、主备和集群。 Redis 群集是一组 Redis 实例,通过数据分片( Sharding)来扩展数据库。一个 Redis 集群包含 16384个哈希槽( Hash Slot),数据库中的每个键都属于这 16384 个哈希槽的其中一个 , 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽,例如一个三节点集群, 节点 A 负责处理 0 号至 5500 号哈希槽,节点 B 负责处理 5501 号至 11000 号哈希槽,节点 C 负责处理 11001 号至 16384 号哈希槽。群集中的每个实例成员无论是主副本( Master)还是辅助副本 (Slave)都管理哈希槽的子集,而且可以在不停机的情况下增加或减少节点。如果 Master无法访问,则其 Slave将提升为 Master继续提供服务。群集内部通过内部总线通信,使用

大数据处理思路

假如想象 提交于 2019-12-06 22:02:34
1.处理优化:优化sql、考虑使用临时表或中间表 2.数据库优化:合理构建索引、合理设计表结构、数据库集群 3.分流:用和不用分开、常用和不常用分开;对数据库存放的数据分库分表分区;对文件存放的数据拆文件、考虑分批处理;原则就是尽量减少每次操作的数据的技术; 4.缓存技术:读多写少用缓存 5.合理使用nosql:mongodb、redis、memched、hbase等 6.分布式大数据方案:hadoop、spark、storm等 nosql数据库的种类:临时性键值存储(Memcached Redis)、永久性键值存储(ROMA Redis)、面向文档存储(mongoDB couchDB)、面向列存储(Casssandra HBase) 来源: https://www.cnblogs.com/hzq3554055/p/11999765.html

Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析

余生颓废 提交于 2019-12-06 16:20:52
Redis 的几种常见使用方式包括: 单机模式 主从模式 哨兵模式(sentinel) 集群模式(cluster) 第三方模式 单机模式 Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。 优点: 架构简单,部署方便。 高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务。 高性能。 缺点: 不保证数据的可靠性。 在缓存使用,进程重启后,数据丢失,即使有备用的节点解决高可用性,但是仍然不能解决缓存预热问题,因此不适用于数据可靠性要求高的业务。 高性能受限于单核 CPU 的处理能力(Redis 是单线程机制),CPU 为主要瓶颈,所以适合操作命令简单,排序、计算较少的场景。也可以考虑用 Memcached 替代。 主从模式 Redis 采用主从(可以多从)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。主从实例部署在不同的物理服务器上,根据公司的基础环境配置,可以实现同时对外提供服务和读写分离策略。 优点: 高可靠性:一方面,采用双机主备架构,能够在主库出现故障时自动进行主备切换,从库提升为主库提供服务