redis分布式

redis多实例&分片&jedis的使用

你离开我真会死。 提交于 2019-12-06 13:07:36
接下来学习redis多实例的部署、数据分片,以及jedis API的使用。 redis多实例部署 一般单个redis的进程是不能满足实际需求的,需要在单台服务器上部署多个redis进程,充分发挥cpu的效能,多台服务器上的redis进程将组成庞大的集群,多的一般部署达到数千个redis进程。 暂时不考虑高可用的情况,下面在一台centos6.5上部署三个redis实例,要想实现部署需要修改redis.conf文件,需要修改服务端口号、日志文件编号、rdb文件编号等,下面边查看常用配置边修改。 (1)units单位,定义了基本的度量单位,不区分大小写。 8 # Note on units: when memory size is needed, it is possible to specify 9 # it in the usual form of 1k 5GB 4M and so forth: 10 # 11 # 1k => 1000 bytes 12 # 1kb => 1024 bytes 13 # 1m => 1000000 bytes 14 # 1mb => 1024*1024 bytes 15 # 1g => 1000000000 bytes 16 # 1gb => 1024*1024*1024 bytes 17 # 18 # units are case

浅谈集群版Redis和Gossip协议

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

redis使用入门

牧云@^-^@ 提交于 2019-12-06 11:07:58
redis是nosql的一种,为非关系型数据库,在大型网站会使用它来减轻数据库的压力,即在访问数据时会先从redis中查找是否有,如果有就直接从redis中获取。当然redis不仅仅可以做缓存,下面入门学习一下。 什么是redis Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言 编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库 ,并提供多种语言的API。redis是用C编写,代码总量10万行左右,是开放源代码的一款优秀软件,它的特点总结下就是nosql、key-value、基于内存、可持久化,官网: https://redis.io/ 。 (1)nosql:即not only structured query language,不仅支持结构化查询语句,它存储的数据结构不再是表格类型数据,如mysql中的一张表,保存的是结构化的表格类型数据,需要区别开来。 (2)key-value:存储的数据结构,key为用户自己定义的具有含义的字符,value为非结构化的数据,可以是网页数据、json数据或其他具有意义的数据,redis提供了5种数据类型供使用。 (3)基于内存:redis是在内存中处理数据,支持上限为万条/秒的处理能力,处理速度极快。 (4)可持久化:内存中保存的数据在断电后容易丢失

11.Redis 哨兵集群实现高可用

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

golang--redis基本介绍

青春壹個敷衍的年華 提交于 2019-12-06 10:44:59
redis(remote-dictionary-system)即远程字典服务器,是NoSQL数据库: 适合做缓存以及持久化; 免费开源,高性能的分布式内存数据库; redis的安装和使用: 下载Redis-x64-3.2.100.zip,然后解压即可; 双击redis-server.exe即可启动redis服务端; redis五大数据类型: 字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(zset); redis安装好后,默认有16个数据库,初始默认使用0号库,编号是0-15,双击redis-cli.exe打开客户端: 添加key-val(set) set key1 hello 获得当前数据库的所有keys keys * 获取key对应的值 get key1 切换数据库 select 1 查看当前数据库的key-val数量 dbsize 清空当前数据库的kay-val和清空所有数据库的key-val flushdb flushall 字符串: 是redis最基本的类型,一个key对应一个value,例如str1 = "hello"; string类型是二进制安全的,除普通的字符串外,也可以存放图片等数据; redis字符串value最大是512M; 字符串的增删查改: 增加:set sddress beijing; 查找:get address

8.4.1 使用Redis来缓存查找

走远了吗. 提交于 2019-12-06 09:58:12
现在先从设置许可证服务以使用Redis开始。幸运的是,Spring Data已经简化了将Redis引入许可证服务中的工作。要在许可证服务中使用Redis,需要做以下4件事情。 (1)配置许可证服务以包含Spring Data Redis依赖项。 (2)构造一个到Redis服务器的数据库连接。 (3)定义Spring Data Redis存储库,代码将使用它与一个Redis散列进行交互。 (4)使用Redis和许可证服务来存储和读取组织数据。 1.配置许可证服务以包含Spring Data Redis依赖项 需要做的第一件事就是将spring-data-redis、jedis以及common-pools2依赖项包含在许可证服务的pom.xml文件中。代码清单8-7展示了要包含的依赖项。 代码清单8-7 添加Spring Redis依赖项 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.4.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId>

Redis

孤人 提交于 2019-12-06 08:45:12
一,为什么要是用Redis?(为什么要使用缓存)   主要从高性能和高并发两方面讨论 高性能:   当用户第一次访问数据库中的某些数据的时候,数据是从硬盘中获取的,速度比较慢,如果将数据存储到缓存中,下一次用户查数据时就可以直接从缓存中获取,而操作缓存,将相当于操作内存,速度非常快,如果数据  库中数据之后发生改变,同步改变缓存中的数据就可以了 高并发:   直接操作缓存的能够承受的请求是远远大于直接操作数据库的,如果将数据库中的一部分数据转存到缓存中,那么用户的一部分请求就会直接到缓存中查询数据,而不是数据库 二,为什么使用redis而不用map做缓存?   缓存分为本地缓存和分布式缓存。以Java为例,使用map和guava实现的属于本地缓存,最主要特点是轻量以及快速,生命随着JVM的销毁而结束,当有很多实例的时候,每个实例都需要为各自保存一份缓存,缓存不具有一致性   使用redis和memcached之类的成为分布式缓存,在多实例的情况下,各实例共用一份缓存,缓存具有一致性。缺点是需要保证redis或memcached服务的高可用,整个程序结构比较复杂。 三,redis和memcached的区别   redis支持跟丰富的数据类型,redis不仅仅支持简单的k/v类型的数据,同时还提供了list,set,hash,zset等数据结构的存储

分布式爬虫

爱⌒轻易说出口 提交于 2019-12-06 06:56:10
一、介绍 原来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 # 端口

Redis Cluster

陌路散爱 提交于 2019-12-06 03:45:06
Redis Cluster 呼唤集群 数据分布 搭建集群 集群伸缩 客户端路由 集群原理 故障转移 开发运维常见问题 呼唤集群 1. 并发量 2. 数据量 3. 网络流量 解决办法 分布式:简单的认为加机器 集群:规模化需求 并发量:OPS 数据量:”大数据” 数据分布 分布式数据库-数据分区 顺序分区和哈希分区 顺序分布 哈希分布(例如节点取模) 数据分布对比 分布方式 特点 典型产品 哈希分布 数据分散度高、键值分布业务无关、无法顺序访问、支持批量操作 一致性哈希Memcache、Redis Cluster、其他缓存产品 顺序分布 数据分散度易倾斜、键值业务相关、可顺序访问、支持批量操作 Big Table、HBase 哈希分布 节点取余分区 一致性哈希分区 虚拟槽分区 多倍扩容 客户端分片:哈希+取余 节点伸缩:数据节点关系变化,导致数据迁移 迁移数量和添加节点数量有关:建议翻倍扩容 一致性哈希 扩容 客户端分片:哈希+顺时针(优化取余) 节点伸缩:只影响邻近节点,但是还是有数据迁移 翻倍伸缩:保证最小迁移数据和负载均衡 虚拟槽分区 预设虚拟槽:每个槽映射一个数据子集,一般比节点数大 良好的哈希函数:例如CRC16 服务端管理节点、槽、数据:例如Redis Cluster 搭建集群-基本架构 单机架构 分布式架构 Redis Cluster架构 节点 meet 指派槽 复制

Redis(一)

拜拜、爱过 提交于 2019-12-06 03:36:35
1 单机MySQL的美好时代 2 Memcached(缓存)+MySQL+垂直拆分 3 MySQL主从读写分离 4 分库分表+水平拆分+mysql拆分 5 MySQL的扩展瓶颈 6 为什么使用NoSQL NoSQL的特性 NoSQL数据库种类繁多,但是一个共同的特点就是去掉关系型特性 数据之前无关系,这样就非常容易扩展,也无形之间,在架构的层面带来了可扩展的能力 大数据量高性能 NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀 这得益于它的无关系性,数据库的结构简单 一般MySQL使用Query Cache,每次表的更新Cache就会失效一次,是一种大粒度的Cache 在针对web2.0的交互频繁的应用,Cache性能不高,而NoSQL的Cache是纪录级 是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。 多样灵活的数据模型 NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系数据库里,增删字段是一件非常麻烦的事情,如果是非常大数据量的表,增加字段简直就是一个噩梦。 RDBMS vs NoSQL RDBMS 高度组织化结构化数据 结构化查询语言(SQL) 数据和关系都存储在单独的表中 数据操纵语言,数据定义语言 严格的一致性 基础事务 NoSQL 代表着不仅仅是SQL 没有声明性查询语言 没有预定义的模式