redis分布式

一致性hash算法

隐身守侯 提交于 2019-12-04 03:39:23
一、算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 二、应用场景 现在一致性hash算法在分布式系统中也得到了广泛应用,分布式系统中涉及到集群部署,包括缓存Redis集群,数据库集群,我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离。如下所示: 同样数据库中也是,当单表数据大于500W的时候需要对其进行分库分表,当数据量很大的时候(标准可能不一样,要看Redis服务器容量)我们同样可以对Redis进行类似的操作,就是分库分表。 假设,我们有一个社交网站,需要使用Redis存储图片资源,存储的格式为键值对,key值为图片名称,value为该图片所在文件服务器的路径,我们需要根据文件名查找该文件所在文件服务器上的路径,数据量大概有2000W左右,按照我们约定的规则进行分库,规则就是随机分配,我们可以部署8台缓存服务器,每台服务器大概含有500W条数据

redis使用手册、入门

做~自己de王妃 提交于 2019-12-03 23:01:56
Redis使用手册 简介 Redis:Remote DIctionary Server(远程字典服务)。 是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。是完全开源免费的,用C语言编写的,遵守BSD协议,高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库。 安装 Redis的 官网 是: https://redis.io 下载稳定版 redis-4.0.9.tar.gz 安装步骤 解压 tar -zxvf redis-4.0.9.tar.gz 编译 进入 cd redis-4.0.9 执行 make (编译依赖gcc) (可不执行)安装 make PREFIX=/usr/local/redis install (PREFIX指定安装位置) 编译生成src下的二进制文件 1. redis-server:Redis服务器 2. redis-cli:Redis命令行客户端 3. redis-benchmark:Redis性能测试工具 4. redis-check-aof:AOF文件修复工具 5. redis-check-rdb:RDB文件检查工具 常用命令 启动Redis服务 src/redis-server redis.conf daemonize no 默认情况下

启动redis本地服务

好久不见. 提交于 2019-12-03 19:58:03
首先是安装环境 windows版redis: https://github.com/MSOpenTech/redis/releases linux版redis: http://redis.io/download 我的电脑是windows版本接下来windows为例,现在我们的环境安装好了,接下来是要启动redis服务,启动要在两个dos界面输入命令,为了方便我将这两条命令做成批处理, start redis-server.exeredis.windows.conf start redis-cli.exe -h 127.0.0.1 -p 6379 将这两句话写入txt文件保存后,将文件后缀改为bat就可以直接启动(这个文件要放在下载回来的redis文件下) 前期准备工作已经完成,接下来可以了解redis是个什么东西了。简单的来说redis是一个分布式的(string,object)的一个map,可以用于信息之间的传递。下面是java和redis的使用。 public class RedisJava { public static void main(String[] args) { //连接本地redis服务(本地服务要先开呀) Jedis jedis=new Jedis( "localhost" ) ; System .out .println ( "连接成功" ) ; /

redis 集群

纵饮孤独 提交于 2019-12-03 18:33:25
一、概述 ​ Redis3.0版本之后支持Cluster. 1.1、redis cluster的现状   目前redis支持的cluster特性:   1):节点自动发现   2):slave->master 选举,集群容错   3):Hot resharding:在线分片   4):进群管理:cluster xxx   5):基于配置(nodes-port.conf)的集群管理   6):ASK 转向/MOVED 转向机制. ​ 1.2、redis cluster 架构   1)redis-cluster架构图 架构细节:   (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.   (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.   (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可   (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value 2) redis-cluster选举:容错 (1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout)

PHP 高级面试115题汇总(含答案)

左心房为你撑大大i 提交于 2019-12-03 17:29:26
1、给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形。 勾股定理,矩形是对角线相等的四边形。只要任意三点不在一条直线上,任选一点,求这一点到另外三点的长度的平方,两个短的之和如果等于最长的,那么这就是矩形。 2、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即 P 点 1 /* 2 *单链表的结点类 3 */ 4 class LNode{ 5 //为了简化访问单链表,结点中的数据项的访问权限都设为public 6 public int data; 7 public LNode next; 8 } 9 10 class LinkListUtli { 11 //当单链表中没有环时返回null,有环时返回环的入口结点 12 public static LNode searchEntranceNode(LNode L) 13 { 14 LNode slow=L;//p表示从头结点开始每次往后走一步的指针 15 LNode fast=L;//q表示从头结点开始每次往后走两步的指针 16 while(fast !=null && fast.next !=null) 17 { 18 if(slow==fast) break;//p与q相等,单链表有环 19 slow=slow.next; 20 fast

使用scrapy-redis搭建分布式爬虫环境

送分小仙女□ 提交于 2019-12-03 16:00:37
详细内容见原文:https://www.cnblogs.com/pythoner6833/p/9148937.html 在settings文件中需要添加5项: 1.DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" 2.SCHEDULER = "scrapy_redis.scheduler.Scheduler" 3.SCHEDULER_PERSIST = True 4.ITEM_PIPELINES = {   'scrapy_redis.piplines.RedisPipeline':100,   } 5.REDIS_URL = "redis://127.0.0.1:6379"   或者写成:REDIS_HOST='127.0.0.1'       REDIS_PORT=6379 来源: https://www.cnblogs.com/znh8/p/11802884.html

Redis 使用过程中遇到的具体问题

我怕爱的太早我们不能终老 提交于 2019-12-03 15:37:20
1.缓存雪崩和缓存穿透问题   1.1缓存雪崩     简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。   解决办法:      事前:尽量保证整个 redis 集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。      事中: 本地 ehcache 缓存 + hystrix 限流&降级 ,避免 MySQL 崩掉      事后:利用 redis 持久化机制保存的数据尽快恢复缓存 encache:   Ehcache是纯java的开源缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它主要面向通用缓存、Java EE和轻量级容器,具有内存和磁盘存储、缓存加载器、缓存扩展、缓存异常处理程序。    应用场景:   使用纯java的ehcache作为本地缓存   Reids 作为远程分布式缓存   解决redis缓存压力过大,提高缓存速度,以及缓存性能。 redis和Ehcache缓存的区别   如果是单个应用或者对缓存访问要求很高的应用,用ehcache。   如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。 实际工作中使用Ehcache    我们在项目中使用集中式缓存(Redis或者式Memcached等),通常都是检查缓存中是否存在

redis cluster(集群)模式的创建方式

我怕爱的太早我们不能终老 提交于 2019-12-03 13:31:57
redis常用的架构有三种,单例、哨兵、集群,其他的都说过了,这里只简单介绍集群搭建。 单例最简单没什么好说的。 哨兵之前说过,该模式下有哨兵节点监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充,并且存储大小受每个节点的内存大小限制。 集群模式Redis-Cluster,采用无中心结构,每个节点都和集群内其他节点有连接,数据可以跨主机分布式存储,解决了存储大小受主机限制的问题,Redis集群预分好16384个插槽(slot),每个节点分配一部分slot,当需要在 Redis 集群中放置一个 key-value 时,根据哈希算法决定将key放到哪个slot中,进而找到对应存放数据的主机,查询数据也一样。 集群模式内部同样可以配置主从,例如集群有六个数据节点,可以设置三个主节点,每个主节点对应一个从节点,当一个主节点宕机,可以自动将从节点变成主节点,保证整个集群还能用。但是一个主节点和对应的从节点都宕机后集群将不可用。每个主节点可以配置多个从节点。 集群搭建步骤 1、创建几台虚机,(集群模式最少要三个主节点)例如我们搭建一个三主三从的集群,创建六台虚机,当然要测试的话也可以部署在同一台主机上,使用不同的端口模拟不同主机。 2、在每台主机上安装redis,注意redis配置文件需要注意cluster相关的配置

redis三种模式对比

拜拜、爱过 提交于 2019-12-03 10:21:18
本文链接: https://blog.csdn.net/selectgoodboy/article/details/86377861 模式类型 主从模式(redis2.8版本之前的模式)、哨兵sentinel模式(redis2.8及之后的模式)、redis cluster模式(redis3.0版本之后) 主从模式原理 同Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。 优点: 1、解决数据备份问题 2、做到读写分离,提高服务器性能 缺点: 1、每个客户端连接redis实例的时候都是指定了ip和端口号的,如果所连接的redis实例因为故障下线了,而主从模式也没有提供一定的手段通知客户端另外可连接的客户端地址,因而需要手动更改客户端配置重新连接 2、主从模式下,如果主节点由于故障下线了,那么从节点因为没有主节点而同步中断,因而需要人工进行故障转移工作 3、无法实现动态扩容 sentinel模式 Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器

redis集群之Cluster

早过忘川 提交于 2019-12-03 10:13:11
  RedisCluster 是 Redis 的亲儿子,它是 Redis 作者自己提供的 Redis 集群化方案。 相对于 Codis 的不同,它是去中心化的,如图所示,该集群有三个 Redis 节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样。这三个节点相互连接组成一个对等的集群,它们之间通过一种特殊的二进制协议相互交互集群信息。   Redis Cluster 将所有数据划分为 16384 的 slots,它比 Codis 的 1024 个槽划分的更为精细,每个节点负责其中一部分槽位。槽位的信息存储于每个节点中,它不像 Codis,它不需要另外的分布式存储来存储节点槽位信息。当 Redis Cluster 的客户端来连接集群时,它也会得到一份集群的槽位配置信息。这样当客户端要查找某个 key 时,可以直接定位到目标节点。   这点不同于 Codis,Codis 需要通过 Proxy 来定位目标节点,RedisCluster 是直接定位。客户端为了可以直接定位某个具体的 key 所在的节点,它就需要缓存槽位相关信息,这样才可以准确快速地定位到相应的节点。同时因为槽位的信息可能会存在客户端与服务器不一致的情况,还需要纠正机制来实现槽位信息的校验调整。   另外,RedisCluster 的每个节点会将集群的配置信息持久化到配置文件中