1.iOS本地缓存方案之YYCache源码解析
2.ASP.NET Core中使用固定窗口限流
iOS本地缓存方案之YYCache源码解析
简单列举一下,iOS的本地缓存方案有挺多,各有各的适用场景:
本文主要聊聊YYCache的优秀设计。高性能的线程安全方案是YYCache比较核心的一个设计目标,很多代码逻辑都是围绕性能这个点来做的。与TMMemoryCache方案相比,bilibili后端源码下载YYCache在同步接口的设计上采用了自旋锁来保证线程安全,但仍然在当前线程去执行读操作,这样就可以节省线程切换带来的开销。而TMCache在同步接口里面通过信号量来阻塞当前线程,然后切换到其他线程去执行读取操作,主要的性能损耗在这个线程切换操作上,同步接口没必要去切换线程执行。此外,使用dispatch_sync实现同步的发卡平台源码大全方案也可以做到节省线程切换的开销,与加锁串行的方案相比,性能如何还需要进一步测试验证。除了高性能的本地存储方案,YYCache在本地持久化提高性能方面采取了策略,对于大于k的数据采取直接存储文件,然后在sqlite中存元信息;对于小于k的数据则直接存储在sqlite中。数据完整性保障方面,redis淘汰策略源码YYCache在存储文件时,存在数据库的元信息和实际文件的存储必须保障原子性。此外,YYCache还新增了实用功能,比如LRU算法,基于存储时长、数量、python爬虫课程源码大小的缓存控制策略等。这些设计和功能使得YYCache在iOS本地缓存方案中具有较高的竞争力和实用性。
ASP.NET Core中使用固定窗口限流
在ASP.NET Core中,固定窗口限流是一种实用的策略,它基于计数器算法,通过设定单位时间内的阈值和计数值来控制请求流量。当计数值超过阈值时,飞桨源码编译会触发限流,然后在时间窗口结束时清零重计。以下是两种常见的实现方式:
1. 进程内(内存)固定窗口算法:利用C#的MemoryCache或字典存储计数信息,每个限流目标关联一个计数值和过期时间。处理请求时,检查目标并更新计数,考虑到多线程,需确保读写操作的线程安全。这种方案适合单实例应用,但对于多实例环境,限流效果可能受实例间请求分布不均影响。
2. 基于Redis的固定窗口算法:利用Redis作为KV存储,其自带过期机制。将限流目标和计数值存储为键值对,Redis的原子操作特性确保分布式环境下计数的准确性。FireflySoft.RateLimit库提供了集成这种限流策略到ASP.NET Core的方法,包括Nuget包安装和中间件配置。
要应用FireflySoft.RateLimit,首先安装对应的Nuget包,然后在Startup中注册限流服务和规则。对于.NET Framework,需在Application_Start中注册一个RateLimitHandler。这个库具有轻量级和灵活性的特点,可以适应多种限流场景,且其源代码在Github开源,方便查阅。
要深入了解架构知识,可以关注公众号“萤火架构”,获取更多独家内容。