codis

授人以鱼不如授人以渔!阿里面试官整理的Redis原理实践小册

白昼怎懂夜的黑 提交于 2020-10-02 06:17:22
还原一个真实的面试场景 在面试后端工程师Redis技能的时候,面试官通常问的第一个问题就是“Redis能用来做什么?”,第一个回答往往都会是「缓存」。缓存确实是Redis 使用最多的领域,它相比Memcache而言更加易于理解、使用和控制。 可是如果再进一步问“还有呢?”,大多数同学就会开始皱眉头,只有一小部分人会回答「分布式锁」。如果你就分布式锁再深入问下去,他们基本就会开始摇头:我们项目里面Redis的锁方法都是别人(应该是架构师)封装好的,拿过来直接使用,内部细节没有去了解过,也没有必要了解。 对类似的场景,我深有体会。因为关于Redis 的面试题,之前准备了很多,但是真正能用上的却很少。当面试的同学频繁地回复「不知道、没用过」的时候,再继续深入追问已经毫无意义,这时候就需要切换话题了。偶尔遇上几个能持续很多回合的同学,他们总能使人眼前一亮。如果再拓展一下周边知识点,就会发现这些人往往也会有所涉猎,这时我在心中已经暗暗地对这位同学伸出了大拇指。 其实很多业务场景,如果仅仅是会使用某项技术、框架,那是再简单不过了。但随着业务发展,系统的用户量、并发量涨上来之后,现有系统的问题就会层出不穷地暴露出来。如果不能深入地了解系统、技术和框架背后的深层原理,很多问题根本无法理解到本质,更谈不上解决,临时抱佛脚也于事无补。 所谓「授人以鱼不如授人以渔」

zookeeper入门(二)

喜你入骨 提交于 2020-08-15 13:30:51
接触zookeeper也有一段时间了,一直有一个问题困扰着我,那就是zookeeper在codis中扮演什么角色,zookeeper中到底存储了哪些数据。 本文将结合实际操作来一步一步来进行。 来源: oschina 链接: https://my.oschina.net/u/4262150/blog/4277960

美团架构师从应用、原理、集群、拓展、源码等方面深入解析Redis

南笙酒味 提交于 2020-08-11 01:29:38
全书由:基础篇、应用篇、原理篇、集群篇、拓展篇、源码篇六部分组成 总览 由于文档的内容太多,所以只截取了部分内容展示,有想获取完整PDF文档的朋友:点赞后,私信【文档资料】即可(一定要记得关注我,不然没办法回复陌生人私信) 基础篇 Redis基础数据结构 应用篇 分布式锁 延时队列 位图 HyperLogLog 布隆过滤器 简单限流 漏斗限流 GeoHash Scan 原理篇 线程IO模型 通信协议 持久化 管道 事务 PubSub 小对象压缩 主从同步 集群篇 Sentinel Codis Cluster 拓展篇 Stream Info指令 再谈分布式锁 过期策略 LRU 懒惰删除 优雅地使用Jedis 保护Redis Redis安全通信 源码篇 来源: oschina 链接: https://my.oschina.net/u/4338498/blog/4335893

聊聊微服务架构及分布式事务解决方案!

与世无争的帅哥 提交于 2020-08-10 17:59:14
作者:伈情的博客 http://nickid.cn/2017/04/分布式事务/ 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。 什么是事务 事务(Transaction)及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性: 原子性(Atomicity): 事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性(Consistent): 在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。 隔离性(Isoation): 数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。 持久性(Durabe): 事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。 典型场景:银行转账业务 例如:李雷账户中有500块钱

聊聊微服务架构及分布式事务解决方案!

无人久伴 提交于 2020-08-09 21:45:17
作者:伈情的博客 http://nickid.cn/2017/04/分布式事务/ 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。 什么是事务 事务(Transaction)及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性: 原子性(Atomicity): 事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性(Consistent): 在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。 隔离性(Isoation): 数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。 持久性(Durabe): 事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。 典型场景:银行转账业务 例如:李雷账户中有500块钱

一文读懂 Redis 分布式部署方案

穿精又带淫゛_ 提交于 2020-08-09 11:31:18
为什么要分布式 Redis是一款开源的基于内存的K-V型数据库,因为内存访问速度快,一般被用来做系统的缓存。 Redis作为单机部署能够支持业务简单,数据量不大的系统需求,但在实际应用中,一旦系统规模上来,单机的Redis就会遇到下面的挑战: 伸缩性。系统随着长期运行与业务增长,对Redis存储的数据量需求也越来越大,单机必然受限于服务器的内存与磁盘大小。 高性能。系统规模变大后,对Redis的吞吐量需求也会提高,而单机的吞吐量必然有限,这种情况会影响整体系统的性能。 高可用。Redis持久化机制一定程度上能缓解单点问题,但是需要花费时间去恢复,在恢复的过程中服务可能不可用,或者数据会有丢失。 分布式解决方案 分布式的解决方案对于业内是通用的: 水平拆分。单点的一个重要挑战就是数据量大的时候单点存储不够。直接的想法就是部署多个实例,将需要存储的数据分散存储到各个实例中。当实例存储空间不够时,继续扩大实例个数就可以解决数据伸缩性问题。同时这种数据水平拆分的方法也可以解决单机性能问题,因为不同的数据读写可以分配到不同的实例。 主从复制。如果只有水平拆分,如果其中一个实例出现了问题,那该实例上存储的数据都不可访问,还是存在可用问题。为此可以进行所有数据的主备复制,同一份数据可以有多个副本,当某个实例出现问题时,可以启用该实例的副本,达到高可用的目的。同时副本也可以帮助提高系统的吞吐能力

Redis 集群演进探讨和总结

丶灬走出姿态 提交于 2020-08-08 21:49:31
Redis 集群演进探讨和总结 Redis为什么需要集群? 首先Redis单实例主要有单点,容量有限,流量压力上限的问题。 Redis单点故障,可以通过主从复制replication,和自动故障转移sentinel哨兵机制。 但Redis单Master实例提供读写服务,仍然有容量和压力问题,因此需要数据分区,构建多个Master实例同时提供读写服务(不仅限于从replica节点提供读服务)。 那么就需要一定的机制保证数据分区。这样能充分把容量分摊到多台计算机,或能充分利用多核计算机的性能。 并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。 探讨数据分区方案 针对数据分区,一般来说,分为两个大类: 逻辑拆分: 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服务需要的业务数据,而 Redis 中的 M2 节点存储 B服务需要的业务数据。 数据分区: 当逻辑上不能拆分,那么只能按数据来拆分,需要保证客户端读和写数据一致。 因此需要一个高效快速的数据结构来路由对应的Master节点。 最容易想到的就是类比 Java 中的 HashMap, 采用 哈希算法,快速找到,快速设置。 这里有四种方式,分别是固定取模,随机,哈希一致性,哈希槽。 固定取模 假设有三个 Master,配置IP 和权重如下: Real Server IP weight 10

Redis 集群演进探讨和总结

吃可爱长大的小学妹 提交于 2020-08-05 13:56:27
Redis为什么需要集群? 首先Redis单实例主要有单点,容量有限,流量压力上限的问题。 Redis单点故障,可以通过主从复制 replication ,和自动故障转移 sentinel 哨兵机制。 但Redis单 Master 实例提供读写服务,仍然有容量和压力问题,因此需要数据分区,构建多个 Master 实例同时提供读写服务(不仅限于从 replica 节点提供读服务)。 那么就需要一定的机制保证数据分区。这样能充分把容量分摊到多台计算机,或能充分利用多核计算机的性能。 并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。 探讨数据分区方案 针对数据分区,一般来说,分为两个大类: 逻辑拆分: 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服务需要的业务数据,而 Redis 中的 M2 节点存储 B服务需要的业务数据。 数据分区: 当逻辑上不能拆分,那么只能按数据来拆分,需要保证客户端读和写数据一致。 因此需要一个高效快速的数据结构来路由对应的 Master 节点。 最容易想到的就是类比 Java 中的 HashMap , 采用 哈希算法,快速找到,快速设置。 这里有四种方式,分别是固定取模,随机,哈希一致性,哈希槽。 固定取模 假设有三个 Master,配置IP 和权重如下: Real Server IP weight 10.0.2

Redis 集群演进探讨和总结

坚强是说给别人听的谎言 提交于 2020-07-28 08:47:24
Redis为什么需要集群? 首先Redis单实例主要有单点,容量有限,流量压力上限的问题。 Redis单点故障,可以通过主从复制 replication ,和自动故障转移 sentinel 哨兵机制。 但Redis单 Master 实例提供读写服务,仍然有容量和压力问题,因此需要数据分区,构建多个 Master 实例同时提供读写服务(不仅限于从 replica 节点提供读服务)。 那么就需要一定的机制保证数据分区。这样能充分把容量分摊到多台计算机,或能充分利用多核计算机的性能。 并且数据在各个主Master节点间不能混乱,当然最好还能支持在线数据热迁移的特性。 探讨数据分区方案 针对数据分区,一般来说,分为两个大类: 逻辑拆分: 逻辑上能拆分,比如 Redis 中的 M1 节点 存储 A服务需要的业务数据,而 Redis 中的 M2 节点存储 B服务需要的业务数据。 数据分区: 当逻辑上不能拆分,那么只能按数据来拆分,需要保证客户端读和写数据一致。 因此需要一个高效快速的数据结构来路由对应的 Master 节点。 最容易想到的就是类比 Java 中的 HashMap , 采用 哈希算法,快速找到,快速设置。 这里有四种方式,分别是固定取模,随机,哈希一致性,哈希槽。 固定取模 假设有三个 Master,配置IP 和权重如下: Real Server IP weight 10.0.2