高可用架构」的各位老铁们,你们好!你是否还记得上个月发布的文章中,有两篇深入讲解Redis的文章,分别是和,广大粉丝读者们对这两篇文章整体评价颇高.而我就是这两篇文章的原创作者「老钱」(钱文品),我是来自掌阅的服务端技术专家. 上周我用了蹩脚的英语向Redis作者antirez就「跳跃列表」的算法问题向他提了一个优化建议,这个优化可以显著提升zadd指令的操作性能,避免非必要的计算浪费. 几天后,antirez向我表达了感谢,作为小学生的我感到非常激动,他告诉我这个小建议在某些应用场合下足以将z…
本文为分布式Redis深度历险系列的第三篇,主要内容为Redis的Cluster,也就是Redis集群功能. Redis集群是Redis官方提供的分布式方案,整个集群通过将所有数据分成16384个槽来进行数据共享. 集群基础实现 一个集群由多个Redis节点组成,不同的节点通过CLUSTER MEET命令进行连接: CLUSTER MEET <ip> <port> 收到命令的节点会与命令中指定的目标节点进行握手,握手成功后目标节点会加入到集群中,看个例子,图片来自于Redis的设计…
Redis深度历险分为两个部分,单机Redis和分布式Redis. 本文为分布式Redis深度历险系列的第一篇,主要内容为Redis的复制功能. Redis的复制功能的作用和大多数分布式存储系统一样,就是为了支持主从设计,主从设计的好处有以下几点: 读写分离,提高读写性能 数据备份,减少数据丢失的风险 高可用,避免单点故障 旧版复制实现 Redis的复制主要分为同步和命令传播两个步骤: 同步可以理解为全量,是将主服务器某一时刻的所有数据全部同步到从服务器. 命令传播可以理解为增量,当主服务器数据…
1.redis五种数据结构 1.1 String字符串类型,对应java字符串类型 用户信息序列化后,可以用string类型存入redis中批量读写string类型,见效网络消耗数字类型的string类型,可以自增自减操作,有一个大小限制. 1.2 list类型,对应java的LinkedList,链表结构. 增删O(1),查询O(n)异步队列,一边线程塞入,一边线程取出消费.结构又和java的不同,多个ziplist组合成quicklist 1.3hash字典类型,对应java的HashMap…
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取. 传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q   一.概述 二.数据类型STRING LIST SET HASH ZSET 三.数据结构字典 跳跃表 四.使用场景计数器 缓存 查找表 消息队列 会话缓存 分布式锁实现 其它 五.Redis 与 M…
一.节点间的内部通信机制 1.基础通信原理 (1)redis cluster节点间采取gossip协议进行通信 跟集中式不同,不是将集群元数据(节点信息,故障,等等)集中存储在某个节点上,而是互相之间不断通信,保持整个集群所有节点的数据是完整的 维护集群的元数据用得,集中式,一种叫做gossip 集中式:好处在于,元数据的更新和读取,时效性非常好,一旦元数据出现了变更,立即就更新到集中式的存储中,其他节点读取的时候立即就可以感知到; 不好在于,所有的元数据的跟新压力全部集中在一个地方,可能会导致…
Redis-Cluster工作原理: redis集群内置了16384个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点. 例如三个节点:槽分布的值如下: SERVER1:  0-5460 SERVER2:  5461-10922 SERVER3:  109…
学习资料 https://juejin.im/book/5afc2e5f6fb9a07a9b362527 包括下面几方面的内容 基础 应用 原理 集群 拓展 源码 to be done…