![](https://img-blog.csdnimg.cn/f157797531834f96afe5ab79379e61d2.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
中间件
文章平均质量分 92
此专栏,主要介绍中间件相关知识,包括但不限于 Redis、Nginx、MQ/Kafka、Zookeeper 等相关内容~
栗筝i
海到无边天作岸,山登绝顶我为峰。期待更好的自己
展开
-
Redis分布式锁及其常见问题解决方案
Redis 提供了一种简单有效的分布式锁实现方式。其基本思想是使用 Redis 的 SETNX 命令,这个命令可以在键不存在时设置值,如果键已存在则不做任何操作。通过这个原子操作,我们可以实现在多个节点之间的互斥访问。然而,虽然 Redis 分布式锁的实现相对简单,但在实际使用中还需要考虑很多问题,例如锁的超时和续期问题、锁的公平性问题、网络分区的问题等。在接下来的文章中,我们将详细介绍这些问题以及解决方案。原创 2023-09-21 08:00:00 · 3297 阅读 · 118 评论 -
Redis缓存实现及其常见问题解决方案
Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。此外,Redis 还提供了一系列的特性,如数据持久化、事务和发布订阅等。然而,如何利用 Redis 实现高效的缓存机制呢?这就是我们今天要探讨的主题。在这篇文章中,我们将详细介绍 Redis 的缓存实现,包括其读写策略、过期策略和淘汰策略等。我们希望通过这篇文章,帮助读者更好地理解和使用 Redis,从而提高自己的系统性能。原创 2023-09-19 08:00:00 · 2154 阅读 · 133 评论 -
Redis集群总结
Redis,作为一款开源的、内存中的数据结构存储系统,以其出色的性能和丰富的数据结构在业界赢得了广泛的认可。然而,当我们面临大量数据和高并发请求时,单个 Redis 实例可能无法满足我们的需求。这时,我们就需要使用到 Redis 的主从模式、哨兵系统和集群模式。通过这些模式,我们可以提高数据的可用性和可靠性,提高系统的性能和扩展性。在接下来的文章中,我将详细介绍如何搭建和使用 Redis 主从模式、哨兵系统和集群模式,以及这些模式的工作原理,故障转移和扩容等操作。原创 2023-09-17 08:00:00 · 1511 阅读 · 11 评论 -
Redis Cluster 集群的介绍
Redis,作为一款开源的、内存中的数据结构存储系统,以其出色的性能和丰富的数据结构在业界赢得了广泛的认可。然而,当我们面临大量数据和高并发请求时,单个 Redis 实例可能无法满足我们的需求。这时,我们就需要使用到 Redis 的集群模式。通过集群模式,我们可以提高数据的可用性和可靠性,提高系统的性能和扩展性。在接下来的文章中,我将详细介绍 Redis 集群的基本概念,以及 Redis 集群的工作原理,故障转移和扩容等操作。原创 2023-09-15 08:00:00 · 1733 阅读 · 20 评论 -
Redis哨兵集群的介绍及搭建
Redis 是一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。然而,作为一个单点服务,Redis 在面临硬件故障或者网络问题时可能会导致服务不可用。为了解决这个问题,Redis 提供了哨兵模式,一个高可用性解决方案。在这篇博客中,我们将深入探讨 Redis 的哨兵模式。我们将首先介绍哨兵模式的基本概念,包括主节点、从节点和哨兵节点。然后,我们将详细解析哨兵模式下的主要流程,包括主观下线、客观下线、领导者选举和故障转移。无论你是一个 Redis 的新手,还是一个有经验的开发者原创 2023-09-13 08:00:00 · 1804 阅读 · 94 评论 -
Redis主从复制集群的介绍及搭建
主从复制集群是一种常见的数据库集群架构,它包含一个主服务器和多个从服务器。主服务器负责处理写操作,所有的写操作会被复制到从服务器。从服务器主要用于处理读操作,分担读负载。通过这种方式,我们可以在多台服务器上读取相同的数据,提高读取性能,同时也可以防止数据丢失。原创 2023-09-11 08:00:00 · 1790 阅读 · 105 评论 -
Redis发布订阅
在现代的软件开发中,数据存储和管理是至关重要的一环。Redis,作为一个开源的、内存中的数据结构存储系统,以其出色的性能和灵活的数据结构,赢得了开发者们的广泛喜爱。它不仅可以用作数据库,还可以用作缓存和消息代理。今天,我们要探讨的是 Redis 中一个强大的功能——发布订阅模式。发布订阅模式是一种消息通信模式,发送者(发布者)发送消息,订阅者接收消息。在 Redis 中,客户端可以订阅任意数量的频道,当有新消息通过 PUBLISH 命令发送给频道时,这个消息会被发送给订阅它的所有客户端。原创 2023-09-09 08:00:00 · 3139 阅读 · 87 评论 -
Redis事务机制
Redis 是一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。在日常的使用中,我们经常会遇到需要一次执行多个命令,并且这些命令要么全部成功,要么全部失败的场景。这就需要用到 Redis 的事务机制。Redis 的事务提供了一种将多个命令请求打包,然后一次性、顺序地执行的能力。这种机制可以确保在事务执行过程中,不会被其他客户端的命令请求所打断,保证了事务的原子性。原创 2023-09-07 08:00:00 · 1990 阅读 · 82 评论 -
Redis持久化机制
然而,作为数据库,数据的安全性也是我们需要考虑的重要因素。如果 Redis 仅仅将数据存储在内存中,那么一旦发生断电或者系统崩溃等情况,数据将会丢失,这对于任何一个系统来说都是无法接受的。因此,Redis 提供了持久化机制来保证数据的安全性。在这篇博客中,我们将详细介绍 Redis 的两种持久化机制:RDB 和 AOF,以及它们的工作原理、使用场景和优缺点。原创 2023-09-05 08:00:00 · 1632 阅读 · 7 评论 -
Redis数据结构总结
Redis 是一款开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis 支持多种类型的数据结构,如字符串(String)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)、位图(Bitmaps)、HyperLogLogs 和地理空间索引(Geospatial)。这些数据结构提供了丰富的操作,使得 Redis 能够应对各种各样的场景。在这篇博客中,我们将详细介绍 Redis 的各种数据结构,包括它们的特性、底层实现、常用命令以及应用场原创 2023-09-02 08:00:00 · 1856 阅读 · 1 评论 -
Redis数据结构:Stream类型全面解析
Redis,作为一种高性能的键值对数据库,因其丰富的数据类型和高效的性能而受到了广泛的关注和使用。在 Redis 的多种数据类型中,Stream 类型可能是最新,也是最具有挑战性的一种。Stream 类型是 Redis 5.0 版本引入的一种新的数据类型,它提供了一种持久化的、可查询的、可扩展的消息队列服务。原创 2023-08-31 08:00:00 · 2120 阅读 · 2 评论 -
Redis数据结构:Zset类型全面解析
Redis,作为一种高性能的键值对数据库,因其丰富的数据类型和高效的性能而受到了广泛的关注和使用。在 Redis 的五种主要数据类型中,Zset(有序集合)类型可能是最复杂,但也是最强大的一种。Zset 不仅可以存储键值对,还可以为每个元素分配一个分数,然后根据这个分数进行排序。这使得 Zset 非常适合用于实现排行榜、时间线等功能。原创 2023-08-29 08:00:00 · 6063 阅读 · 45 评论 -
Redis数据结构:Hash类型全面解析
Redis,作为一个开源的、内存中的数据结构存储系统,以其出色的性能和灵活的数据类型,广泛应用于缓存、消息队列、发布订阅系统等多种场景。在 Redis 的五种基本数据类型中,Hash 类型是一种非常重要的数据类型。它可以存储键值对的集合,且能够用小于1毫秒的时间复杂度进行添加、删除、更新和查找操作,因此在实际应用中有着广泛的用途。在接下来的文章中,我将详细介绍 Redis 的 Hash 类型,包括它的内部实现、主要特性、常用命令以及应用场景。无论你是刚接触 Redis 的新手,还是已经有一定经验的开发者原创 2023-08-27 08:00:00 · 10433 阅读 · 29 评论 -
Redis数据结构:Set类型全面解析
Set 类型是一个无序并唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。相对于列表,集合也有两个特点:无序、不可重复一个集合最多可以存储 2^32-1 个元素。概念和数学中个的集合基本类似,数学集合的概念是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。原创 2023-08-25 08:00:00 · 4142 阅读 · 46 评论 -
Redis数据结构:List类型全面解析
Redis 中列表(List)类型是用来存储多个有序的字符串,列表中的每个字符串成为元素 Eelement),一个列表最多可以存储 2^32-1 个元素。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,可以充当栈和队列的角色,在实际开发中有很多应用场景。原创 2023-08-23 08:00:00 · 4513 阅读 · 127 评论 -
Redis数据结构:String类型全面解析
Redis,作为一个开源的、内存中的数据结构存储系统,以其出色的性能和灵活的数据类型,广泛应用于缓存、消息队列、发布订阅系统等多种场景。在 Redis 的五种基本数据类型中, String 类型是最基本也是最常用的一种。它不仅可以存储字符串,还可以存储整数和浮点数,甚至可以执行原子操作,如自增和自减。这使得 Redis 的 String 类型在实际应用中有着广泛的用途,从简单的键值对存储,到复杂的实时系统,都离不开 String 类型的支持。原创 2023-08-21 08:00:00 · 2947 阅读 · 99 评论 -
Redis实战:Redis在Java中的基本使用
本片将介绍 Redis 在 Java 中的基本使用原创 2023-08-19 08:00:00 · 9597 阅读 · 97 评论 -
Redis简介
Redis,一个开源的数据结构服务器,最近赢得了越来越高的声誉。为什么 Redis 如此受欢迎?是因为Redis具有高度可扩展的架构、它的高性能、适合用于缓存、消息代理、计数器和队列。Redis 在各种场景下的高性能和易用性让它成为 Web 应用程序的首选。原创 2023-08-15 08:00:00 · 2423 阅读 · 62 评论 -
RabbitMQ:订阅模型-匹配模式
阅模型-匹配模式,相比于前两种订阅模型,是更细致的分组,允许 在RoutingKey 中使用匹配符- `*`:匹配一个单词- `#`:匹配0个或多个单词RabbitMQ 订阅模型-匹配(topics)模式主要有以下六个角色构成:- 生产者(producer/ publisher):一个发送消息的用户应用程序。- 交换机(Exchange) :在 RabbitMQ 的消息传递模型中,对于 Exchange 的核心思想就是:生产者生产的消息从不会直接发送到队列,生产者只能将消息发送到交换机。交换原创 2022-12-29 11:00:00 · 1903 阅读 · 1 评论 -
RabbitMQ 订阅模型-路由模式
订阅模型-路由模式,此时生产者发送消息时需要指定 RoutingKey,即路由 Key,Exchange 接收到消息时转发到与 RoutingKey 相匹配的队列中。在 Direct 模型下:队列与交换机绑定,不能任意绑定,而要指定一个 RoutingKey (路由 key)消息的发送方在向 Exchange 发送消息时,也必须指定消息的 RoutingKeyExchange 不在把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的 RoutingKey 与消原创 2022-12-28 11:00:00 · 1723 阅读 · 2 评论 -
RabbitMQ:订阅模型-消息订阅模式
订阅模型-消息订阅模式,也可以称为广播模式,生产者将消息发送到 Exchange,Exchange 再转发到与之绑定的 Queue中,每个消费者再到自己的 Queue 中取消息。RabbitMQ 单生产单消费模型主要有以下五个角色构成:生产者(producer/ publisher):一个发送消息的用户应用程序。交换机(Exchange) :在 RabbitMQ 的消息传递模型中,对于 Exchange 的核心思想就是:生产者生产的消息从不会直接发送到队列,生产者只能将消息发送到交换机。交换机工作原创 2022-12-27 11:00:00 · 3923 阅读 · 4 评论 -
RabbitMQ:消息分发模型
Work queues,也被称为 Task queues,任务模型,当消息处理比较耗时时的时候,可能产生消息的速度会远远大于消息的消费速度,消息会堆积越来越多,无法及时处理,此时就可以使用work模型:让多个消费者绑定一个队列,共同消费队列中的消息,队列中的消息一旦消费,就会消失,因此任务不会被重复执行。原创 2022-12-26 11:05:29 · 1843 阅读 · 6 评论 -
RabbitMQ:基本消息模型
单生产单消费模型,即基本消息模型或简单消费模型,即完成基本的一对一消息转发。RabbitMQ 单生产单消费模型主要有以下三个角色构成:生产者(producer/ publisher):一个发送消息的用户应用程序。消费者(consumer):消费和接收有类似的意思,消费者是一个主要用来等待接收消息的用户应用程序队列:RabbitMQ 内部类似于邮箱的一个概念。虽然消息流经 RabbitMQ 和你的应用程序,但是它们只能存储在队列中。队列只受主机的内存和磁盘限制,实质上是一个大的消息缓冲区。许多生产原创 2022-12-25 11:01:42 · 1789 阅读 · 10 评论 -
RabbitMQ:消息模型
RabbitMQ 提供了 6 种消息模型,分别为:单生产单消费模型(Hello World)、消息分发模型(Work queues)、Fanout 消息订阅模式(Publish/Subscribe)、Direct 路由模式(Routing)、Topic 匹配模式(Topic)、RPC 模式(RPC)。本篇内容包括:RabbitMQ 6 种消息模型、RabbitMQ 6 种消息模型介绍原创 2022-12-12 10:27:03 · 2395 阅读 · 5 评论 -
RabbitMQ:安装配置
一般来说,安装分为两种方式:1. 下载 RabbitMQ 源文件,解压源文件之后进行安装。2. 通过 brew 命令安装。在这里,推荐使用 brew 来安装,非常强大的 Mac 端包管理工具。本篇内容包括:Mac 安装 RabbitMQ、Mac 后台启动 RabbitMQ原创 2022-12-11 13:11:37 · 1821 阅读 · 5 评论 -
Zookeeper:实现“分布式锁”的 Demo
Zookeeper 能保证数据的强一致性,用户任何时候都可以相信集群中每个节点的数据都是相同的。一个用户创建一个节点作为锁,另一个用户检测该节点,如果存在,代表别的用户已经锁住,如果不存在,则可以创建一个节点,代表拥有一个锁。本篇内容包括:Demo 概述、代码实现、测试结果原创 2022-11-22 22:16:15 · 2223 阅读 · 15 评论 -
Zookeeper:实现“命名服务”的 Demo
命名服务是分步实现系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等,通过命名服务,客户端可以根据指定名字来获取资源的实体、服务地址和提供者的信息。Zookeeper 也可帮助应用系统通过资源引用的方式来实现对资源的定位和使用,广义上的命名服务的资源定位都不是真正意义上的实体资源,在分布式环境中,上层应用仅仅需要一个全局唯一的名字。Zookeeper 可以实现一套分布式全局唯一 ID 的分配机制。原创 2022-11-22 10:24:10 · 2500 阅读 · 2 评论 -
Zookeeper:Mac通过Docker安装Zookeeper集群
此篇为 “Mac通过Docker安装Zookeeper集群”,笔者原本计划是接下来更新Zookeeper应用系列的相关内容,但相关内容依赖Zookeeper集群,虽然前面也更新了 Linux下Zookeeper在三种模式下的部署,但是大家很可能不会有相关的Linux集群准备着,所以才有了此篇:“Mac通过Docker安装Zookeeper集群”。原创 2022-11-21 10:11:14 · 3235 阅读 · 3 评论 -
Zookeeper:事件监听和通知机制
Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher 通知状态和事件类型做出业务上的改变。本篇内容包括:关于观察者模式、Zookeeper 事件监听和通知机制、Zookeeper 工作流程原创 2022-11-20 18:03:01 · 3445 阅读 · 3 评论 -
Zookeeper:Zookeeper的主从选举机制
ZAB 协议,全称 Zookeeper Atomic Broadcast(Zookeeper 原子广播协议),是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的一致性协议。基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副本之间的数据一致性。当 Zookeeper 集群中的一台服务器出现以下两种情况之一时,需要进入 Leader 选举:(1)服务器初始化启动;(2)服务器运行期间 Leader 故障。本篇内容包括:关于 ZAB 协议、Zookeeper原创 2022-11-20 12:10:15 · 2795 阅读 · 3 评论 -
Zookeeper:在三种模式下的部署
zookeeper 安装模式有三种:单机模式:单机单 server;集群模式:多机多 server,形成集群;伪集群模式:单机多 server,形成伪集群。本篇内容包括:Zookeeper 官网下载、Zookeeper 单机模式部署、Zookeeper 集群安装、Zookeeper 集群安装原创 2022-11-19 17:52:58 · 3276 阅读 · 1 评论 -
Zookeeper:分布式过程协同技术
Zookeeper 是一个高性能的分布式一致系统,在分布式系统中有着广泛的应用。基于它,可以实现诸如“分布式同步”、“配置管理”、“命名空间管理”等众多功能,是分布式系统中常见的基础系统。Zookeeper 主要用来解决分布式集群中应用系统的一致性问题。本篇内容包括:Zookeeper————分布式过程协同技术 以及 Zookeeper 的数据结构。原创 2022-11-19 11:40:25 · 2453 阅读 · 0 评论 -
Redis系列:Redis主从、哨兵、集群介绍
本篇内容包括:Redis 主从架构、Redis 哨兵架构、Redis 集群架构 的介绍等内容~原创 2022-11-12 16:24:22 · 2469 阅读 · 8 评论 -
Redis系列:Redis持久化机制与Redis事务
Redis 是个基于内存的数据库。那服务一旦宕机,内存中数据必将全部丢失。所以丢失数据的恢复对于 Redis 是十分重要的,我们首先想到是可以从数据库中恢复,但是在由 Redis 宕机时(说明相关工作正在运行)且数据量很大情况下,从数据库恢复的话,会为数据库带来巨大的压力,进而导致程序相应缓慢。因此实现数据的持久化,避免从后端数据库中恢复数据,对于Redis 是十分必要的。原创 2022-11-12 10:49:15 · 2330 阅读 · 13 评论 -
Redis系列:使用Redis实现分布式锁及相关问题
分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。本篇内容包括:关于 Redis 与 分布式锁,Redis 分布式锁的问题及解决方式,Redis 中的 Lua 脚本 以及 Redis 中的 RedLock 算法!原创 2022-11-11 18:54:00 · 4217 阅读 · 3 评论 -
Redis系列:使用Redis实现缓存及相关问题
Redis 会把 MySQL 中经常被查询的数据缓存起来,比如热点数据,这样当用户来访问的时候,就不需要到 MySQL 中去查询了,而是直接获取 Redis 中的缓存数据,从而降低了后端数据库的读取压力。如果说用户查询的数据 Redis 没有,此时用户的查询请求就会转到 MySQL 数据库,当 MySQL 将数据返回给客户端时,同时会将数据缓存到 Redis 中,这样用户再次读取时,就可以直接从 Redis 中获取数据。本篇内容包括:关于 Redis 缓存,缓存相关问题(包括 Redis 缓存热 key原创 2022-11-11 10:44:40 · 3671 阅读 · 11 评论 -
Redis系列:Redis的数据结构
Redis 的基本数据类型包括:二进制安全字符串 String、Hashes(哈希)、Lists 列表、Sets 集合 和 Sorted sets 有序集合;Redis 的特殊数据类型还包括:geospatial 地理位置、Bitmap 位存储、HyperLogLogs 基数统计;此外,Redis 在 5.0 版本中还引入了 stream 这个全新的数据类型。本篇内容包括:Redis 基本数据类型(二进制安全字符串 String、Hashes(哈希)、Lists 列表、Sets 集合 和 Sorte原创 2022-11-10 19:00:56 · 3006 阅读 · 9 评论 -
Redis系列:Redis的概述与安装
Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。本篇内容包括:Redis 简介(为什么快?为什么单线程?优点,缺点等),Redis 在 Java Web 中的应用,Redis 安装(Win、Linux、Mac 场景下的安装)等内容原创 2022-11-10 06:18:21 · 2604 阅读 · 5 评论