Redis Cluster

Redis缓存穿透和缓存雪崩以及解决方案

时光总嘲笑我的痴心妄想 提交于 2020-12-14 04:43:11
原文: Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案 缓存穿透 解决方案 布隆过滤 缓存空对象 比较 缓存雪崩 解决方案 保证缓存层服务高可用性 依赖隔离组件为后端限流并降级 数据预热 缓存并发 分布式锁 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存不命中,接着查询数据库也无法查询出结果,因此也不会写入到缓存中,这将会导致每个查询都会去请求数据库,造成缓存穿透; 解决方案 布隆过滤 对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力; 缓存空对象 当存储层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源; 但是这种方法会存在两个问题: 如果空值能够被缓存起来,这就意味着缓存需要更多的空间存储更多的键,因为这当中可能会有很多的空值的键; 即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。 比较 缓存雪崩 缓存雪崩是指,由于缓存层承载着大量请求,有效的保护了存储层,但是如果缓存层由于某些原因整体不能提供服务,于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会挂掉的情况。 解决方案

Redis5.0 Cluster集群搭建及扩容

谁说我不能喝 提交于 2020-12-10 05:47:11
Redis3.0之后,Redis官方提供了完整的集群解决方案。该方案采用去中心化的方式,包括:sharding(分区)、replication(复制)、failover(故障转移),称为RedisCluster。Redis5.0前采用redis-trib进行集群的创建和管理,需要ruby支持。Redis5.0可以直接使用Redis-cli进行集群的创建和管理。这里主要介绍使用Redis5.0.10搭建RedisCluster集群 1.环境准备 1.1 集群规划 Maste1 - 192.168.1.161:6379 Slave1 - 192.168.1.161:6380 Maste2 - 192.168.1.162:6379 Slave2 - 192.168.1.162:6380 Maste3 - 192.168.1.163:6379 Slave3 - 192.168.1.163:6380 Maste4(扩容) - 192.168.1.165:6379 Slave4(扩容) - 192.168.1.165:6380 Redis集群最少需要6个节点,可以分布在一台或者多台主机上。本次使用4台虚拟机,先161,162,163上搭建一个三主三从的集群,每台虚拟机上安装6379和6380两个节点。集群搭建成功后,在165上新建两个节点(一主一从),将两个新的节点加入集群,来验证集群扩容。

Redis-Cluster-Gossip协议

混江龙づ霸主 提交于 2020-12-08 08:33:57
优点: 协议本身简单,组网规模几乎不受限制,通信性能好 缺点: 不能提供传统的数据一致性服务,在传输中占用较多的网络流量 社区版redis cluster是一个P2P无中心节点的集群架构, 依靠gossip协议传播协同自动化修复集群的状态。 Gossip是一种去中心化、容错并保证最终一致性的协议。 Gossip解决的问题就是在分布式环境下信息 高效分发 的问题, 这个问题的解决决定着系统的一致性程度。 Gossip协议是基于一种叫做 SWIM的协议 SWIM是一种无中心的分布式协议, 各个节点之间通过p2p实现信息交流同步各节点状态的方法。 看名字也知道这是一种 弱一致性的实现 。 SWIM协议给 每个进程组成员在本地维护一个成员表 , 记录该组存活的进程。 该协议通过 失效检测器 (Failure Detector)和 传播组件 (Dissemination Component)来完成工作。 SWIM的失效检测器会检测失效的节点 并将失效节点的更新信息发送给传播组件。 SWIM的传播组件通过多播(multicast)的形式将失效信息传播给组内的其他成员。 协议的可扩展性体现在: 新成员的加入和退出也以同样的方式进行多播通信。 而在基本的时间周期内进行失效检测能够保证在限定的时间范围内完成完备性检查, 即每个失效的进程都能最终被检测到(最终一致性)。

【Redis】redis-3.0.0安装以及集群的搭建

女生的网名这么多〃 提交于 2020-12-07 17:59:05
前言 redis是常用的no-sql数据库,常用于缓存数据,同时,他也可以持久化数据。他是C语言开发的,所以安装的时候需要编译。 单机版redis yum install gcc-c++ (安装C语言编译环境) 安装 第一步:redis的源码包上传到linux系统( 点击下载 ) 第二步: tar xzvf redis-3.0.0.tar.gz ( 解压缩redis ) 第三步: make ( 编译。需进入redis源码目录 ) 第四步: make install PREFIX=/usr/local/redis ( 安装redis到指定目录 ) PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下 启动 ./redis-server (服务前端启动) ./redis-cli shutdown (服务关闭) ./redis-server redis.conf (服务后端启动-需执行以下操作) cp redis.conf /usr/local/redis/bin/ ( 将 redis源码redis-3.0.0中的redis.conf复制到安装目录的bin下 ) 修改该配置文件,将其中的daemonize no改为yes ./redis-cli -h ip地址 -p 端口 (连接客户端) ping ( 判断服务健康状态 ) redis集群 机制 (1

Redis,就是这么朴实无华

泪湿孤枕 提交于 2020-12-05 02:55:12
http://xjjdog.cn 对200+原创文章进行了细致的分类,阅读更流畅,欢迎收藏。 原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。 Redis是2009年发布的,到今天已经超过10岁了。作为必备技能之一,关于它也有聊不完的话题。本文中的任何一个点,都可以展开,完成一篇中等规模的文章。 交流和面试时,你需要用最精准的语言进行描述,那么本文比较适合你。 redis能力: 1 0W/s QPS (redis-benchmark) 1w+ 长链接 (netstat / ss) 最复杂的Zset 6kw数据 写入1k/s 读取5k/s 平均耗时5ms 持久化 (rdb) 1. 基本概览 学习一门新语言,重要的是掌握它的基本数据结构,以及这些数据结构的API。redis的这些数据结构,就类似一门语言。 Redis数据结构 常用5种,一共10种。面试时一般回答5种即可,但其他5种是加分项。 String 字符串 Hash 字典 List 列表 Set 集合 ZSet 有序集合。性能参考: 《redis的zset有多牛?请把耳朵递过来》 Pubsub 发布订阅 (不推荐使用,坑很多) Bitmap 位图 GEO 地理位置 (有限使用,附近的人) Stream 流(5.0) (与Kafka非常像) Hyperloglog

2万字好文!手把手教你实现 Docker 部署 Redis 集群

柔情痞子 提交于 2020-12-02 16:18:30
点击上方 " 程序员小乐 "关注, 星标或置顶一起成长 后台回复“ 大礼包 ”有惊喜礼包! 关注订阅号「 程序员小乐 」,收看更多精彩内容 每日英文 Life is not always what we want it to be. We fight. We cry. And sometimes, we give up. But in our hearts, we know it's still love. 生活有时不尽如人意。我们挣扎、哭泣,有时甚至放弃。但内心始终充满爱. 每日掏心话 人有时需要内心单纯的像个孩子,但有时也要内心强大的像混凝土。 来自:我为什么要写这个 | 责编:乐乐 链接:cnblogs.com/cxbhakim/p/9151720.html 后端架构师(ID:study_tech) 第 1067 次推文 往日回顾: 任正非在荣耀送别会上的讲话:一旦“离婚”就不要藕断丝连,要做华为全球最强的竞争对手 正文 摘要 接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群。 首先,我们需要理论知识:Redis Cluster是Redis的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库——首要解决把整个数据集按照分区规则映射到多个节点的问题。 这边就需要知道分区规则—

Redis的搭建和Redis的集群搭建

时光总嘲笑我的痴心妄想 提交于 2020-11-25 09:20:31
1、Redis的官网: https://redis.io/ Redis的测试网站: http://try.redis.io/ 2、参考博客: https://www.cnblogs.com/mafly/p/redis_cluster.html http://blog.mayongfa.cn/258.html windows安装参考: http://www.cnblogs.com/jaign/articles/7920588.html#top 3、Centos操作系统中Redis的安装: 开始使用的hadoop用户和自己指定的目录,然后出现了一些问题,最后使用了root用户进行安装,顺利安装。自己安装多小心吧。 首先下载一下Redis,详细参考 http://blog.mayongfa.cn/258.html 。 然后将redis解压缩到指定的目录,解压缩操作: 4、编译安装redis: 执行make出现错误: [hadoop@slaver1 package]$ cd ../soft/redis- 3.2 . 5 / [hadoop@slaver1 redis - 3.2 . 5 ]$ ls 00 -RELEASENOTES COPYING Makefile redis.conf runtest- sentinel tests BUGS deps MANIFESTO runtest

docker之构建redis-cluster集群

☆樱花仙子☆ 提交于 2020-11-24 20:06:10
下载和编译redis安装包 参考: https://www.cnblogs.com/cwp-bg/p/8094914.html # 从官方网站下载安装包,注意,当前在哪个目录下执行命令,下载的包将在哪个目录下 $ wget http://download.redis.io/releases/redis-4.0.6.tar.gz # 将下载包解压 $ tar -zxvf redis-4.0.6.tar.gz # 进入解压后的文件夹 $ cd redis-4.0.6 # 对文件进行编译,得到可执行的文件和配置文件 $ sudo make 修改redis.conf # 创建一个目录 mkdir /data # 复制一份redis.conf到data目录 cp redis.conf /data/6380.conf vi /data/6380.conf bind 0.0.0.0 # 绑定ip port 6380 # 修改端口 daemonize no # 前台运行,暴露给docker管理,否则启动容器会失败 dbfilename dump.rdb # 设置持久化文件 # 设置集群参数 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 15000 docker安装redis # 查询

Docker快速构建Redis集群(cluster)

别来无恙 提交于 2020-11-24 19:54:08
Docker快速构建Redis集群(cluster) 以所有 redis 实例运行在同一台宿主机上为例子 搭建步骤 redis 集群目录清单 . ├── Dockerfile ├── make_master_slave.sh ├── run_master_slave.sh ├── compose_master_slave.sh ├── redis-trib.rb ├── master │ ├── 7000 │ │ ├── data │ │ │ ├── appendonly.aof │ │ │ ├── dump.rdb │ │ │ └── nodes.conf │ │ └── redis.conf │ ├── 7001 │ │ ├── data │ │ │ ├── appendonly.aof │ │ │ ├── dump.rdb │ │ │ └── nodes.conf │ │ └── redis.conf │ └── 7002 │ ├── data │ │ ├── appendonly.aof │ │ ├── dump.rdb │ │ └── nodes.conf │ └── redis.conf ├── redis-cluster.tmpl └── slave ├── 7003 │ ├── data │ │ ├── appendonly.aof │ │ ├── dump.rdb

redis集群原理

六月ゝ 毕业季﹏ 提交于 2020-11-22 19:53:53
reids集群架构图: 在这个图中,每一个蓝色的圈都代表着一个 redis 的服务器节点。它们任何两个节点之间都是相互连通的 (Gossip 协议 ) 。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。   那么 redis 是怎么做到的呢?首先,在 redis 的每一个节点上,有一个 插槽( slot ) 可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是: 0-16383 。还有一个就是 cluster 我个人把这个 cluster 理解为是一个集群管理的插件。当我们的存取的 key 到达的时候, redis 会根据 CRC 16 的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。   还有就是因为如果集群的话,是有好多个 redis 一起工作的,那么,就需要这个集群不是那么容易挂掉,所以呢,理论上就应该给集群中的每个节点至少一个备用的 redis 服务。这个备用的 redis 称为从节点( slave )。那么这个集群是如何判断是否有某个节点挂掉了呢? 首先要说的是,每一个节点都存有这个集群所有主节点以及从节点的信息。   它们之间通过互相的 ping-pong