李子捌 Redis 精通系列文章 研究分享| 内容合集
Redis 是一个开源(BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 目前国内外对 Redis 的使用场景可以说无处不在,Redis 也成为了高级程序员必备的知识点,本专题合集主要涉及到 Redis 的高级部分知识,涉及到持久化、事务、主从复制、高可用、分布式等知识点,认真看完必定有不少收获。
本篇文章讲述的是 Redis 主从复制的技术。主从复制是 Redis 分布式的基石,也是 Redis 高可用的保障。在 Redis 中,被复制的服务器称为主服务器(Master),对主服务器进行复制的服务器称为从服务器(Slave)。文中介绍了主从复制的演进,各个版本的实现的细节,以及主从复制的整个架构体系。
Redis 分布式锁就应该这样学,精细胞与卵细胞的故事告诉你真实原理!
本篇文章讲述的是 Redis 分布式锁的技术。分布式知识是考验一个程序员知识面广度和深度很好的度量标准,而分布式锁又是其中非常重要的一个知识点。可以说面试只要谈到分布式,没有不问分布式锁的。文中详述了分布式锁的演进,集群中分布式所得实现,以及 RedLock、Redisson 等知识
Redis 值 Sentinel(哨兵)详述,图文并茂才能浅显易懂
主从复制奠定了 Redis 分布式的基础,但是普通的主从复制并不能达到高可用的状态。在普通的主从复制模式下,如果主服务器宕机,就只能通过运维人员手动切换主服务器,很显然这种方案并不可取。针对上述情况,Redis 官方推出了可抵抗节点故障的高可用方案——Redis Sentinel(哨兵)。Redis Sentinel(哨兵):由一个或多个 Sentinel 实例组成的 Sentinel 系统,它可以监视任意多个主从服务器,当监视的主服务器宕机时,自动下线主服务器,并且择优选取从服务器升级为新的主服务器。
Redis 集群模式,你若还是一知半解,试试仔细阅读一遍这篇文章
Redis 集群是 Redis 提供的分布式数据库方案,集群通过分片(sharding)进行数据共享,Redis 集群主要实现了以下目标:在 1000 个节点的时候仍能表现得很好并且可扩展性是线性的。没有合并操作(多个节点不存在相同的键),这样在 Redis 的数据模型中最典型的大数据值中也能有很好的表现。写入安全,那些与大多数节点相连的客户端所做的写入操作,系统尝试全部都保存下来。但是 Redis 无法保证数据完全不丢失,异步同步的主从复制无论如何都会存在数据丢失的情况。可用性,主节点不可用,从节点能替换主节点工作。
Redis 的 LRU(Least Recently Used) 算法你了解多少?
Redis 是基于内存存储的 key-value 数据库,我们知道内存虽然快但空间小,当物理内存达到上限时,系统就会跑的很慢,这是因为 swap 机制会将部分内存的数据转移到 swap 分区中,通过与 swap 的交换保证系统继续运行;但是 swap 属于硬盘存储,速度远远比不上内存,尤其是对于 Redis 这种 QPS 非常高的服务,发生这种情况是无法接收的。(注意如果 swap 分区内存也满了,系统就会发生错误!)
LRU 经常被吐槽,要不试试 LFU?本文详述 LFU(Least Frequently Used)
LRU 有一个明显的缺点,它无法正确的表示一个 Key 的热度,如果一个 key 从未被访问过,仅仅发生内存淘汰的前一会儿被用户访问了一下,在 LRU 算法中这会被认为是一个热 key。LFU(Least Frequently Used)是 Redis 4.0 引入的淘汰算法,它通过 key 的访问频率比较来淘汰 key,重点突出的是 Frequently Used。
都在用 MQ,Redis 的 Pub/Sub 也可以试着了解下
Redis 的 Pub/Sub 发布订阅,是 Redis 一步步完善消息队列功能的一个进步点,虽然现在没人用 Pub/Sub 做消息队列,但是它的思想和功能也非常值得学习。
Redis 之 Geospatial,助你轻松实现附近的 xx 功能
Geospatial 是 Redis 在 3.2 版本以后增加的地理位置 GEO 模块,这个模块可以用来实现微信附近的人,在线点餐“附近的餐馆”等位置功能。
HyperLogLog 是用来做基数统计的算法,它提供不精确的去重计数方案(这个不精确并不是非常不精确),标准误差是 0.81%,对于 UV 这种统计来说这样的误差范围是被允许的。HyperLogLog 的优点在于,输入元素的数量或者体积非常大时,基数计算的存储空间是固定的。在 Redis 中,每个 HyperLogLog 键只需要花费 12KB 内存,就可以计算接近 2^64 个不同的基数。
Bitmaps 称为位图,它不是一种数据类型。网上很多视频教程把 Bitmaps 称为数据类型,应该是不正确的。Bitmaps 是 Redis 提供给使用者用于操作位的“数据类型”。
Redis 类似大多数成熟的数据库系统一样,提供了事务机制。Redis 的事务机制非常简单,它没有严格的事务模型,无法像关系型数据库一样保证操作的原子性。Redis 事务最大的作用是保证多个指令的串行执行,它可以借助于 Redis 单线程读写的特性,保证 Redis 事务中的指令不会被事务外的指令打搅,不过要注意它不是原子性的。
Redis 高可用的绝对的利器——持久化(RDB 和 AOF)
Redis 的非常快,很大一部分原因是因为 Redis 的数据存储在内存中,既然在内存中,那么当服务器宕机或者断电的时候,数据就会全部丢失了,所以 Redis 提供了两种机制来保证 Redis 数据不会因为故障而全部丢失,这种机制称为 Redis 的持久化机制。
听说你的服务经常被打崩?试试布隆过滤器(Bloom Filter)
布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
Skip List(跳跃列表) 它到底好在哪?今天我们不仅只聊为什么,还手写一个玩玩
跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。
令牌桶算法比较简单,它就好比摇号买房,拿到号的人才有资格买,没拿到号的就只能等下次了(还好小编不需摇号,因为买不起!)。
漏斗容量有限,当流水的的速度小于灌水的速度,漏斗就会水满溢出,利用这个原理我们可以设计限流代码!漏斗的剩余的空间就代表着当前行为(请求)可以持续进行的数量,漏斗的流水速率代表系统允许行为(请求)发生的最大频率,通常安装系统的处理能力权衡后进行设值。
指定时间 T 内,只允许发生 N 次。我们可以将这个指定时间 T,看成一个滑动时间窗口(定宽)。我们采用 Redis 的 zset 基本数据类型的 score 来圈出这个滑动时间窗口。在实际操作 zset 的过程中,我们只需要保留在这个滑动时间窗口以内的数据,其他的数据不处理即可。
版权声明: 本文为 InfoQ 作者【李子捌】的原创文章。
原文链接:【http://xie.infoq.cn/article/4079b891ad05781bf68ef6ef9】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论