- 博客(151)
- 收藏
- 关注
原创 缓存 --- Redis的三种高可用模式
模式主从复制哨兵模式集群模式核心能力数据冗余、读写分离自动故障转移数据分片、自动故障转移扩展性垂直扩展(读能力)垂直扩展(读能力)水平扩展(读写能力)单点故障主节点单点故障主节点单点故障(写瓶颈)无单点故障适用场景小规模读写分离中小规模高可用大规模高并发与高可用配置复杂度简单中等复杂。
2025-04-20 22:46:29
749
原创 缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透
问题类型触发条件解决方案核心实现技术击穿热点Key过期 + 高并发互斥锁、逻辑过期分布式锁(SETNX)、异步重建穿透查询不存在的数据布隆过滤器、空值缓存Bloom Filter、NULL占位雪崩大量Key同时过期随机过期时间、集群容灾过期时间随机化、Redis集群注意事项布隆过滤器需要预热数据,适用于静态数据(如商品ID列表)。互斥锁需设置合理的锁超时时间,避免锁过期后业务线程仍在执行。空值缓存的过期时间不宜过长,防止内存浪费。
2025-04-20 22:11:02
1093
原创 缓存 --- Redis性能瓶颈和大Key问题
某电商平台的商品评论数据存储在 Redis 中,使用列表(List)数据结构存储每个商品的评论 ID。将每个商品的评论列表拆分为多个小列表。本地缓存(Caffeine )
2025-04-20 18:23:27
925
原创 缓存 --- 内存缓存 or 分布式缓存
定义:特点:使用案例:常用库:示例:分布式缓存(Distributed Cache)定义:特点:使用案例:常用库:示例:内存缓存 vs 分布式缓存特性内存缓存分布式缓存存储位置本地内存远程缓存服务器(如Redis、Memcached)数据共享不支持,数据隔离支持,数据可跨服务器共享访问速度极快(内存访问)较快(受网络延迟影响)扩展性有限(受限于单机内存)高(可通过增加服务器扩展)一致性差(多个服务器缓存不一致)较好(通过缓存服务器
2025-04-20 18:07:23
845
原创 C# --- yield关键字 和 Lazy Execution
立即执行(Eager Evaluation)延迟执行(使用yield)示例:生成斐波那契数列。
2025-04-12 23:33:55
887
原创 C# --- IEnumerable 和 IEnumerator
正确做法:IEnumerable + IEnumerator。确保多次遍历互不干扰。
2025-04-12 23:06:12
818
原创 设计模式 --- 观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,用于在对象之间建立一对多的依赖关系。当一个对象(称为“主题”Subject)的状态发生改变时,所有依赖它的对象(称为“观察者”Observer)会自动收到通知并更新。这种模式的核心是解耦主题和观察者,让它们可以独立变化。核心思想主题(Subject):维护一个观察者列表,提供注册、注销和通知机制。观察者(Observer):定义统一的更新接口,当主题状态变化时被调用。主题不需要知道观察者的具体实现,只需通过接口通知。
2025-04-08 21:36:48
1063
原创 Web框架 --- Web服务器和Web应用服务器
HTTP Web 服务器是用于托管网站、处理 HTTP/HTTPS 请求的软件. 其中又分为Web服务器和Web应用服务器Web服务器(也称为HTTP服务器)是负责处理客户端(如浏览器)的HTTP请求,并返回静态内容(如HTML、图片、CSS、JavaScript文件等)的软件。它主要关注静态资源的快速响应和基础的请求处理。Web应用服务器(简称应用服务器)是用于处理动态内容和复杂业务逻辑的服务器。它通常与编程语言或框架(如Java、ASP.NET、Python的WSGI)结合。
2025-04-08 00:48:37
980
原创 MessageQueue --- RabbitMQ WorkQueue and Prefetch
Work queues,任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。此时就可以使用workqueu模型,多个消费者共同处理消息处理,消息处理的速度就能大大提高了。
2025-04-05 23:15:52
1175
1
原创 C# --- LINQ
LINQ的全称为Language Integrated Query, 为各种查询(包括对象查询,数据库查询,XML查询) 提供了统一模型.LINQ源于SQL,但比SQL更加强大,更加灵活.LINQ可以用类似于SQL的形式对C# Collection中的对象进行查询LINQ可以在代码中对数据库进行查询,编程语言和数据库之间配合上的鸿沟,也就是不用再手动拼接SQL字符串去查询数据库.可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松地理解和维护。
2025-03-15 19:35:29
1031
1
原创 Api架构设计--- HTTP + RESTful
RESTful(Representational State Transfer)是一种基于HTTP协议设计网络应用程序接口(API)的架构风格,由Roy Fielding在2000年的博士论文中提出。其核心思想是以资源为中心,通过统一的接口对资源进行操作,实现客户端与服务器的解耦也就是RESTful是基于http定义了一组接口格式规范,用来规范所有http请求。
2025-03-15 17:32:02
1037
原创 关系型数据库主键的选择
主键唯一主键不可修改业务字段不可用于主键自增idUUIDUUID基于某个单表做自增主键基于多个单表+步长做自增主键雪花算法优点:缺点:
2024-12-31 18:21:53
825
原创 Web系统设计 --- 后端消息推送
Web网络通信 --- 后端消息推送轮询长轮询WebSocketSSEExample -- SignalR轮询长轮询WebSocketSSEExample – SignalR
2024-12-17 17:38:21
532
原创 Web身份认证 --- JWT Token
JWT,全称为JSON Web Token,是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。它本质上是一个经过数字签名的JSON对象,能够携带并传递状态信息(如用户身份验证、授权等)JWT由三部分组成, 并经过Base64Url编码之后使用 (注意编码不是加密)HeaderJWT 的头部通常由两部分组成,分别是令牌类型(typ)和加密算法(alg)。一般情况下,头部会采用 Base64 编码。Payload。
2024-12-16 16:20:36
1449
原创 Mongo --- Mongo Pipeline
在MongoDB中,聚合管道(aggregation pipeline)是一种用于处理和转换数据的机制。它允许您按顺序对集合中的文档执行一系列操作,并将结果从一个阶段传递到下一个阶段。聚合管道由多个阶段组成,每个阶段在输入文档上执行特定的操作,并生成转换后的输出,作为下一个阶段的输入。聚合管道中的每个阶段接收输入文档,并应用某种操作,例如过滤、分组、投影或排序,以生成一组修改后的文档。一个阶段的输出成为下一个阶段的输入,形成了一个数据处理的管道流程.
2024-11-24 18:25:56
1256
原创 Web框架 --- C#中的ActionFilter
Action Filter 是一种用于在执行controller方法之前或之后执行自定义逻辑的机制。>* Action Filter 可以用来处理各种任务,包括但 不限于日志记录、身份验证、授权、参数验证,错误处理和其他横切关注点(cross-cutting concerns)C# Net Core 有四种常用的Filter(按照执行顺序排列)attribute.attribute.(最常用)attribute.attribute.ActionFilter有两种方法可以执行。
2024-10-29 18:23:19
843
原创 DevOps --- Pipeline和Yaml文件
在DevOps中pipeline可以按顺序在一台虚拟机上实现一组特定的操作,包括但不限于执行git命令,如拉取代码,push代码等执行任意程序执行python或bash脚本基于以上操作,pipeline通常可以完成以下场景持续集成:拉取代码,运行代码质量检查工具,运行集成测试,部署代码等使用第三方控件对代码进行安全扫描(DAST, Image,SAST等)定时运行E2E测试。
2024-10-28 20:02:18
1369
3
原创 Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader]
【代码】Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader]
2024-08-19 18:19:49
663
原创 C# --- .Net Framework中的Binding Redirect
为什么需要绑定重定向?在.Net Framework 中, 假设你有一个应用程序 A,它引用了libray B 和 library C, 同时B又引用了D的1.1.1.0版本,而C引用了D的1.1.1.1版本. 现在我们面临一个冲突,因为在运行时无法加载不同版本的同一个程序集一般会报出以下Error Message为了解决这个冲突,你可以使用绑定重定向,通常是指向新版本(但也可以指向旧版本)。
2024-07-21 18:18:38
447
原创 C# --- 在项目中使用Attribute + Reflection
将需要执行的TestCase包装成一个类,并将TestCase分成几个Steps,每个Step是一个方法自定义一个Attribute,修饰每个Step方法//自定义Attributeset;使用反射拿到所有被自定义Attribute “StepMethod” 修饰的方法.使用Invoke方法执行。
2024-07-02 15:42:02
288
原创 C# --- 浮点数类型 float, double, decimal
【代码】C# --- 浮点数类型 float, double, decimal。
2024-05-27 17:17:59
874
原创 计算机网络 --- WebSocket协议
HTTP是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,是半双工通信。通常,打开某个网页,我们每点击一次网页上的某个选项,前端就会发送一次HTTP请求,网站返回一次HTTP响应。这种由客户端主动请求,服务器响应的方式满足大部分网页的功能场景。但这种情况下,服务器不会主动给客户端发消息。而类似网页游戏这样的场景,是需要客户端和服务器之间互相主动发大量数据的。因此,我们需要一个基于TCP的新协议,即新的应用层协议WebSocket。
2024-04-22 23:33:33
1757
原创 浮点类型(float、double)在内存中如何存储
另外一种简单的计算方法: 十进制的小数采用乘2取整法进行计算,取掉整数部分后,剩下的小数继续乘以2,直到小数部分全为0.
2024-03-19 20:46:50
977
原创 分布式基础 --- Leader election
为什么需要leader electionRing electionBully Algorithm
2024-03-03 21:16:27
905
原创 注册中心 Service Discovery --- Intro
原文链接:https://blog.csdn.net/weixin_42774617/article/details/131740758。客户端注册(调用方实现)客户端发现(调用方实现)
2024-02-24 20:51:56
1036
原创 MessageQueue --- RabbitMQ入门
RabbitMQ IntroRabbitMQ 核心概念RabbitMQ 分发类型Dead letter (死信)保证消息的可靠传递
2024-02-16 21:25:07
1581
原创 MessageQueue --- Intro
MQ全称是Message Queue,消息的队列,因为是队列,所以遵循FIFO 先进先出的原则,它是一种跨进程的通信机制,用于上下游传递消息.目前主要有两种MQ协议:AMQP和MQTT。
2024-02-01 23:03:55
1306
原创 Web框架 --- 依赖注入实例的生命周期
通过依赖注入的实例都有一个生命周期, 主要有三种生命周期Singleton整个程序运行过程中, 只产生一个实例, 应用程序结束后会被销毁controller默认为singleton, 大部分情况下service和repository的实例也都为单例当使用 Singleton 生命周期时,一个典型的例子是在一个应用程序中管理全局状态或共享资源,确保整个应用程序只有一个实例。// 全局状态管理服务接口// 具体的全局状态管理服务实现// 在 Startup.cs 中进行注册。
2023-12-28 01:03:09
1012
原创 git --- restore, reset, revert
git revertgit restoregit resetgit reset --softgit reset --mixedgit reset -- hard
2023-09-24 22:29:08
541
原创 git --- 基础介绍
git 是什么git --- 工作区, 暂存区, 资源库git --- 文件状态git --- branch 和 HEADgit --- 一次正常的git提交流程
2023-09-18 03:00:17
416
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人