redis分布式

redis哨兵(docker-compoer)

早过忘川 提交于 2020-01-20 20:29:38
在介绍redis哨兵之前,先来建立一下模拟哨兵需要搭建的环境(此方法用于快速生成多个容器并统一管理,如不怕麻烦可跳过) 。通过之前docker的文章,我们知道可以通过镜像生成容器,可以快速的部署环境,但是却只能单一的生成,每次都需要通过docker run命令来运行,这对于部署多个redis是很不方便的,那么我们可以通过docker-compose 来解决这个问题。 docker-compose 安装 运行命令 (提前设置好对应的版本): curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose- uname -s - uname -m > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 这样 docker compose 就安装完成了。我们在安装docker镜像用到的Dockerfile可以填写我们需要的配置, docker compose 同样也有对应的配置文件,docker-composer.yml或docker-composer.yaml文件。 下面我们来简单介绍一下该文件的几个比较重要的配置项(下面是主节点的配置部分): version : “3.6” :

java调用redis的多种方式与心得

怎甘沉沦 提交于 2020-01-20 10:57:51
心得: /** * 心得: * 1.连接方式主要有:直连同步,直连事务,直连管道,直连管道事务,分布式直连同步,分布式直连管道,分布式连接池同步,分布式连接池管道; * 2.同步方式会返回数据库执行结果,管道则不会返回数据库执行结果; * 3。管道分两种执行方式:有返回命令执行结果,无返回命令执行结果; * 4.返回数据库执行结果 与 返回命令执行结果 不是一个东西; * 5一般管道的无返回命令执行结果 的执行方式会比 有返回结果的方式快一点点,,但是在分布式连接池的测试里则得出相反的结果, * 因此,这两种管道方式的速度差距不大,按使用需求即可。 */测试源码 * redis几种调用方法 */ /** * 普通直连同步写入操作,于myRedis方法一样,都是单实例方法 * * 同步执行,会返回执行结果 * 写入10万行字符串 */ @org.junit.Test public void r1() { Jedis jedis = new Jedis("127.0.0.1", 6379); //密码,如果服务器没有密码,则会报错,因此,要对用使用 //jedis.auth("admin"); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { //返回的是个字符串 String res

Python爬虫【五】Scrapy分布式原理笔记

旧巷老猫 提交于 2020-01-20 06:50:55
Scrapy单机架构 在这里scrapy的核心是scrapy引擎,它通过里面的一个调度器来调度一个request的队列,将request发给downloader,然后来执行request请求 但是这些request队列都是维持在本机上的,因此如果要多台主机协同爬取,需要一个request共享的机制——requests队列,在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列。 单主机爬虫架构 调度器负责从队列中调度requests进行爬取,而每台主机分别维护requests队列 分布式爬虫架构 队列用什么维护? 这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Value形式存储,结构灵活。 是内存中的数据结构存储系统,处理速度快,性能好。提供队列、集合等多种存储结构,方便队列维护。 如何去重?—— Redis集合 redis提供集合数据结构,在redis集合中存储每个request的指纹。 在向request队列中加入Request前先验证这个Request的指纹是否已经加入集合中。 如果已经存在则不添加到request队列中,如果不存在,则将request加入到队列并将指纹加入集合。 如何防止中断?——启动判断 在每台slave的Scrapy启动的时候都会判断当前redis request队列是否为空

redis集群

风格不统一 提交于 2020-01-19 02:34:52
一、集群与分布式概述 1.什么是集群? 集群就是 很多服务器组成的一个网络。指的是将多台服务器集中在一起,实现同一业务。 2.为什么要集群? 一台服务器不能满足开发需要的时候,需要多台服务器来支持。这个时候就需要做集群,但是集群往往伴随着分布式; 3.什么是分布式? 分布式是指将不同的业务分布在不同的地方. web应用和数据库服务分开. 4.集群的优化 5.集群的两大关键特性及两大能力 集群提供了以下两个关键特性: 1、可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。动态添加服务器 2、高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性 当访问的服务器挂了时,集群要有能力找可以正常使用额服务器继续提供服务器。 两大能力: 1、负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 2、错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。 当访问的服务器挂了时

《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

寵の児 提交于 2020-01-19 00:22:52
能坚持别人不能坚持的,才能拥有别人未曾拥有的。 关注 编程大道 公众号,让我们一同坚持心中所想,一起成长!! 《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制 在这个系列里,我会整理一些面试题与大家分享,帮助年后和我一样想要在金三银四准备跳槽的同学。 我们一起巩固、突击面试官常问的一些面试题,加油!! 《【面试突击】— Redis篇》--Redis数据类型?适用于哪些场景? 《【面试突击】— Redis篇》--Redis的线程模型了解吗?为啥单线程效率还这么高? 《【面试突击】— Redis篇》-- Redis的主从复制?哨兵机制? 前两次因为时间原因面试官暂时中止了面试,觉得上次你对redis的主从复制,哨兵机制的知识掌握的还可以,于是今天面试官想看看你到底对Redis了解有多深,又加大了攻势,你准备好了吗? 上次因为时间问题面试草草收场今天我还有几个哨兵的问题要问。首先说一下Redis Sentinel是怎么工作的?重点描述一下故障转移的过程 好的。 1)每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令。 2)如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被当前

Redis和Memcache的区别

眉间皱痕 提交于 2020-01-18 22:16:17
Memcache 和 redis 是中间介质,可以帮助我们通过java语言实现对内存的操作 java语言——> redis /memcache ——>内存 Memcache与redis的区别: 每个 key 的数据最大值: Memcache:1M Redis:1G 对技术的支持: Memcache:对各种技术支持比较全面,session可以存储到memcache中,各种框架对memcache支持比较好 对数据类型的支持: Memcache:数据类型只有string Redis:支持丰富的数据结构,String List hash set sorted set 对持久化的支持: Memcache没有持久化 Redis可持久化 分布式部署: Redis的分布式是‘主从模式’,一主多从 Memcache的分布式与redis的不同,是把一台memcache的工作平均分配给多个memcache分担 联系 :数据存储在内存当中 数据模型都是key-value型 Memcache对session支持,各种框架支持 Redis:集合计算 缓存的两种形式: 页面缓存:smart缓存 经常用在cms内存管理系统里面 数据缓存:经常用在页面的具体数据里面 来源: https://www.cnblogs.com/coder-wf/p/12210224.html

《【面试突击】— Redis篇》-- Redis的主从复制?哨兵机制?

a 夏天 提交于 2020-01-17 22:31:42
Redis如何保证高并发,高可用? 高并发: redis的单机吞吐量可以达到几万不是问题,如果想提高redis的读写能力,可以用redis的主从架构,redis天热支持一主多从的准备模式,单主负责写请求多从负责读请求,主从之间异步复制,把主的数据同步到从。 高可用: 首先利用redis的主从架构解决redis的单点故障导致的不可用,然后如果使用的是主从架构,那么只需要增加哨兵机制即可,就可以实现,redis主实例宕机,自动会进行主备切换。以此来达到redis的高可用。 你刚才说主从复制,那你能具体聊一下主从复制的原理吗? 在redis主从架构中,master负责接收写请求,写操作成功后返回客户端OK,然后后将数据异步的方式发送给多个slaver进行数据同步,不过从redis 2.8开始,slave node会周期性地确认自己每次复制的数据量。 当启动一个slave node的时候,它会发送一个 PSYNC 命令给master node。如果slave node是重新连接master node,那么master node仅仅会复制给slave部分缺少的数据; 否则如果是slave node第一次连接master node,那么会触发一次 full resynchronization 全量复制。 开始 full resynchronization 的时候,master会启动一个后台线程

redis 源码系列(17):分身术 --- replication

此生再无相见时 提交于 2020-01-17 16:44:21
单点服务在生产环境是绝对无法接受的,但是数据库服务,要实现多节点或者说分布式部署,面临的问题比 stateless 服务要多的多。数据的同步方式、一致性和可用性的妥协诸多限制,必须都加以考虑。 今天我们来学习一下 redis 主从同步相关内容,本节内容是 redis 实现高可用、数据安全、数据分区的基石。如果在节点之间没有一个可靠的数据同步方法,那么上述的一切都成为空中阁楼。 主节点在任意时刻只有一个,从节点可以有若干个。主从节点需要保持链接,主节点异步的将数据同步到从节点。 Master 主从同步,就是将主节点的数据同步到从节点。同步的大体流程如下: 主节点在接受到同步请求后,与从节点进行全量同步,启动 BGSAVE (如果之前已经有可用 BGSAVE 在执行,即不需要启动) 主节点需要将后续导致数据变化的命令(或者数据过期)发送到从节点,持续同步数据 全量同步 主节点在启动的时候,并不知道从节点的任何信息。当收到 sync 或者 psync 命令后,与从节点进行开始同步: void syncCommand ( redisClient * c ) { // 已经是 SLAVE ,或者处于 MONITOR 模式,返回 if ( c -> flags & REDIS_SLAVE ) return ; // 如果这是一个从服务器,但与主服务器的连接仍未就绪,那么拒绝 SYNC //

Redis集群原理

会有一股神秘感。 提交于 2020-01-17 13:02:58
节点主从(镜像全量)+哈希slot(分片) 无主模型 遵循 CAP原则 C一致性 A可用性 P分区容错性,三者不可兼得 数据放在大数据集群中的方式/集群承载数据的方式:分片 镜像全量 镜像全量 优:做数据的高可用(节点不单一),不担心某一个节点故障,数据在其他节点有相同备份 缺:占用内存资源,横向来说,没有对数据的扩展能力(4G–>12G) 分片 优:横向扩展能力强 缺:没有备份 CRUD操作 增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete) 主从复制 主可以进行CRUD所有操作 从只能R 主从模型 图上能看得到的信息: 只有1个Master,可以有N个slaver,而且Slaver也可以有自己的Slaver,由于这种主从的关系决定他们是在配置阶段就要指定他们的上下级关系,而不是Zookeeper那种平行关系是自主推优出来的。 读写分离,Master只负责写和同步数据给Slaver,Slaver承担了被读的任务,所以Slaver的扩容只能提高读效率不能提高写效率。 Slaver先将Master那边获取到的信息压入磁盘,再load进内存,client端是从内存中读取信息的,所以Redis是内存数据库。 当一个新的Slaver加入到这个集群时,会主动找Master来拜码头,Master发现新的小弟后将全量数据发送给新的Slaver

基于Redis的Tomcat

耗尽温柔 提交于 2020-01-17 01:41:41
了解什么是Tomcat集群以及与Redis一起可以解决的问题。 对于不完全了解Apache Tomcat集群的人来说似乎有些不知所措,但是实际上,通过在优锐课的学习后就知道,它并不那么复杂。可以将群集定义为结合使用负载平衡,某种形式的会话复制以及多个服务器“工作人员”来处理平衡的负载。 Tomcat集群解决了什么问题? Tomcat集群用于解决的一些问题包括以下内容。首先,当服务器接收到过多的传入请求时,它就无法有效地处理它们。其次,当有状态应用程序需要时(如果服务器发生故障),需要一种保留会话数据的方法。第三,开发人员想要一种不中断服务即可更改配置或更新其应用程序的方法。这些是我们需要使用Tomcat Cluster的主要原因。但是,有没有使用特别好的Tomcat群集的正确方法? 什么是Redis? Redis是一个内存中开源数据项目。实际上,它是当前最流行的内存数据库。特别是,Redisson可以用作Redis Java客户端。Redisson使用Redis来授权Java应用程序供公司使用。它旨在使你的工作更轻松,并更有效地开发分布式Java应用程序。Redisson提供由Redis支持的分布式Java对象和服务。 Redis如何用于Tomcat? Redisson的Tomcat Session Manager允许你在Redis中存储Apache Tomcat的会话