redis分布式

学习总结

拜拜、爱过 提交于 2019-12-05 03:14:47
linux的学习总结 https://blog.csdn.net/qq_35919588/article/details/80426634 1,NoSql介绍 NoSql(Not Only Sql):泛指非关系型数据库 主要是用来处理大型数据: 举个例子: 比如存放一个员工,员工的信息有很多属性,这些关系需要多个字段多张表进行存储,不如把这些数据存放在一个json字符串中比较方便,知识为了方便查看 在开发中查询的占比比较大,把一些不经常修改或者是不修改的数据存放在非关系数据库中,查询比较方便 主要用于大数据中,进行解析分析 分类: 键值(Key-Value)存储数据库 主要使用到hash表,一个特定的值和一个指针指向特定的数据 优点: 简单易部署 缺点: 只对部分数据进行查询或者更新的时候,效率就会显的低下 列存储数据库: 用来应对分布式存储的海量数据 价值对存在,就是键对应着多条数据 文档型数据库: 查询效率比较高, 对事物的支持不友好 比如:json的存储格式 图形数据库,图片 ,音频,视频,文件服务器: 使用灵活的图形模型,并且能够扩展到多个服务器上. NoSql没有标准的查询语言(标准的sql语句), 数据库查询需要制定数据库模型, 许多nosql数据库都有rest式的数据接口或者查询API 应用场景: 1 1、数据模型比较简单; 2 2、需要灵活性更强的IT系统; 3 3

Scrapy——分布式原理

▼魔方 西西 提交于 2019-12-05 01:16:08
关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列。 分布式架构 将上图进行再次更改 这里重要的就是我的队列通过什么维护? 关于爬取队列我们自然想到的是基于内存存储的Redis。它支持多种数据结构,如:列表、集合、有序集合等,存取的操作也非常简单。 Redis支持的这几种数据结构,在存储中都有各自优点: 列表(list)有lpush()、lpop()、rpush()、rpop()方法,可以实现先进先出的队列和先进后出的栈式爬虫队列。 集合(set)的元素是无序且不重复的,这样我们可以非常方便的实现随机且不重复的爬取队列。 有序集合有分数表示,而Scrapy的Request也有优先级的控制,我们可以用它来实现带优先级调度的队列。 如何去重? 这里借助redis的集合,redis提供集合数据结构,在redis集合中存储每个request的指纹 在向request队列中加入Request前先验证这个Request的指纹是否已经加入集合中。如果已经存在则不添加到request队列中,如果不存在,则将request加入到队列并将指纹加入集合 如何防止中断?如果某个slave因为特殊原因宕机,如何解决? 在Scrapy中

redis的应用场景 为什么用redis

血红的双手。 提交于 2019-12-05 00:38:48
一、不是万能的菲关系系数据库redis 在面试的时候,常被问比较下Redis与Memcache的优缺点,个人觉得这二者并不适合一起比较,redis:是非关系型数据库不仅可以做缓存还能干其它事情,Memcache:是仅用做缓存。常常让我们对这二者进行比较,主要也是由于Redis最广泛的应用场景就是Cache。 1.2 redis 都能干嘛 缓存,毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效; 排行榜,在使用传统的关系型数据库(mysql oracle 等)来做这个事儿,非常的麻烦,而利用Redis的SortSet(有序集合)数据结构能够简单的搞定; 计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力; 好友关系,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能; 简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦; Session共享,以PHP为例

redis 分布式设计

不打扰是莪最后的温柔 提交于 2019-12-04 23:43:13
一,数据库主从 特点:只能一主多从   从数据库不能写入(MySQL的从数据库可以写入,但主库不能监听,数据不同步) 配置: 查看redis 主从关系: 先进入redis 数据库   redis-cli   info replication 哨兵: 作用:监控redis服务器的运行状态,可以进行自动故障转移(failover)实现高可用,与 数据库主从 配合使用的机制 特点: 独立的进程,每台服务器至少一个哨兵程序 监控redis主服务器的运行状态 出现故障后可以向管理员/其他程序发出通知 争对故障,可以进行故障转移,并向客服端提供新的访问地址 相关配置: 来源: https://www.cnblogs.com/wjun0/p/11888654.html

数据库优化方案整理

有些话、适合烂在心里 提交于 2019-12-04 23:05:13
一:优化说明 A:有数据表明,用户可以承受的最大等待时间为8秒。数据库优化策略有很多,设计初期,建立好的数据结构对于后期性能优化至关重要。因为数据库结构是系统的基石,基础打不好,使用各种优化策略,也不能达到很完美的效果。 B:数据库优化的几个方面 ​​ 可以看出来,数据结构、SQL、索引是成本最低,且效果最好的优化手段。 C:性能优化是无止境的,当性能可以满足需求时即可,不要过度优化。 二:优化方向 1. SQL以及索引的优化 首先要根据需求写出结构良好的SQL,然后根据SQL在表中建立有效的索引。但是如果索引太多,不但会影响写入的效率,对查询也有一定的影响。 2. 合理的数据库是设计 根据数据库三范式来进行表结构的设计。设计表结构时,就需要考虑如何设计才能更有效的查询。 数据库三范式: 第一范式:数据表中每个字段都必须是不可拆分的最小单元,也就是确保每一列的原子性; 第二范式:满足一范式后,表中每一列必须有唯一性,都必须依赖于主键; 第三范式:满足二范式后,表中的每一列只与主键直接相关而不是间接相关(外键也是直接相关),字段没有冗余。 注意:没有最好的设计,只有最合适的设计,所以不要过分注重理论。三范式可以作为一个基本依据,不要生搬硬套。 有时候可以根据场景合理地反规范化: A:分割表。 B:保留冗余字段。当两个或多个表在查询中经常需要连接时,可以在其中一个表上增加若干冗余的字段

Redis基础

无人久伴 提交于 2019-12-04 21:06:01
Redis基础知识 Redis基础知识 Redis版本说明 Redis性能与特性 1.速度快 2.持久化 3.支持多种数据结构 4.功能丰富 5.高可用以及分布式 Redis应用场景 1.缓存 2.计数器 3.排行榜 4.定位功能(3.2开始支持) 5.简单的消息系统 6.交友 toc Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis与其他key-value缓存产品有以下三个特点: 1.Redis支持数据的持续化,可以将内存中的数据保持再在磁盘中,重启的时候可以再次加载进行使用。 2.Redis不仅仅支持简单的key-value类型的数据,同时还提供List、Set、Zset、Hash等数据结构的存储。 3.Redis支持数据的备份,即master-slave模式的数据备份。 Redis版本说明 Redis版本号采用标准惯例:主版本号.福版本号.补丁级别,一个副版本号就标记为一个标准发行版本,例如:1.2,2.0,2.2,2.4,2.6,2.8,奇数的副版本用来表示非标准版本,例如2.9.x发行版本是Redis 3.0标准版本的非标准发行版本。 根据Redis的命名规则,我们首先要判定我们要使用的是不是稳定版本,避免在生产环境使用测试版本,出现不可控问题。尽量选择市面主流的大版本,新的版本虽然增加了很多的功能

Redis、Memcache和MongoDB的区别

江枫思渺然 提交于 2019-12-04 19:47:06
Redis、Memcache和MongoDB的区别 https://www.cnblogs.com/tuyile006/p/6382062.html >>Memcached Memcached的优点: Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。 支持直接配置为session handle。 Memcached的局限性: 只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。 无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。 无法进行数据同步,不能将MC中的数据迁移到其他MC实例中。 Memcached内存分配采用Slab Allocation机制管理内存,value大小分布差异较大时会造成内存利用率降低,并引发低利用率时依然出现踢出等问题。需要用户注重value设计。 >>Redis Redis的优点: 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算) 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。

浅谈集群版Redis和Gossip协议

与世无争的帅哥 提交于 2019-12-04 18:33:35
今天来看一下Redis-Cluster和其中的重要概念Gossip协议。 1.Redis Cluster的基本概念 集群版的Redis听起来很高大上,确实相比单实例一主一从或者一主多从模式来说复杂了许多,互联网的架构总是随着业务的发展不断演进的。 单实例Redis架构 最开始的一主N从加上读写分离,Redis作为缓存单实例貌似也还不错,并且有Sentinel哨兵机制,可以实现主从故障迁移。 单实例一主两从+读写分离结构: 单实例的由于本质上只有一台Master作为存储,就算机器为128GB的内存,一般建议使用率也不要超过70%-80%,所以最多使用100GB数据就已经很多了,实际中50%就不错了,以为数据量太大也会降低服务的稳定性,因为数据量太大意味着持久化成本高,可能严重阻塞服务,甚至最终切主。 如果单实例只作为缓存使用,那么除了在服务故障或者阻塞时会出现缓存击穿问题,可能会有很多请求一起搞死MySQL。 如果单实例作为主存,那么问题就比较大了,因为涉及到持久化问题,无论是bgsave还是aof都会造成刷盘阻塞,此时造成服务请求成功率下降,这个并不是单实例可以解决的,因为由于作为主存储,持久化是必须的。 所以我们期待一个多主多从的Redis系统,这样无论作为主存还是作为缓存,压力和稳定性都会提升,尽管如此,笔者还是建议: Redis尽量不要做主存储! Redis尽量不要做主存储!

分布式任务队列Celery入门与进阶

这一生的挚爱 提交于 2019-12-04 16:05:19
一、简介   Celery是由Python开发、简单、灵活、可靠的分布式任务队列,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。Celery侧重于实时操作,但对调度支持也很好,其每天可以处理数以百万计的任务。特点: 简单:熟悉celery的工作流程后,配置使用简单 高可用:当任务执行失败或执行过程中发生连接中断,celery会自动尝试重新执行任务 快速:一个单进程的celery每分钟可处理上百万个任务 灵活:几乎celery的各个组件都可以被扩展及自定制 应用场景举例:   1.web应用:当用户在网站进行某个操作需要很长时间完成时,我们可以将这种操作交给Celery执行,直接返回给用户,等到Celery执行完成以后通知用户,大大提好网站的并发以及用户的体验感。   2.任务场景:比如在运维场景下需要批量在几百台机器执行某些命令或者任务,此时Celery可以轻松搞定。   3.定时任务:向定时导数据报表、定时发送通知类似场景,虽然Linux的计划任务可以帮我实现,但是非常不利于管理,而Celery可以提供管理接口和丰富的API。 二、架构&工作原理   Celery由以下三部分构成:消息中间件(Broker)、任务执行单元Worker、结果存储(Backend),如下图:    工作原理: 任务模块Task包含异步任务和定时任务。其中

redis

怎甘沉沦 提交于 2019-12-04 08:11:10
1:redis持久化的2种方式 RDB以及AOF RDB 每次进行快照方式会重新记录整个数据集的所有信息。RDB在恢复数据时更快,可以最大化redis性能,子进程对父进程无任何性能影响。 AOF 有序的记录了redis的命令操作。意外情况下数据丢失甚少。他不断地对aof文件添加操作日志记录. 前者是指超过上一次aof重写aof文件大小的百分之多少,会再次优化,如果没有重写过,则以启动时为主。后者是限制了允许重写的最小aof文件大小。 bgrewriteaof 命令是手动重写命令,会fork子进程,在临时文件中重建数据库状态,对原aof无任何影响,当重建旧的状态后,也会把fork发生后的一段时间内的数据一并追加到临时文件,最后替换原有aof文件,新的命令继续向新的aof文件中追加 2:redis集群 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;( 从服务器初始化完成