LruCache(本地cache)生产环境中遇到的问题及改进

ops/2024/12/18 17:20:39/

问题:单机qps增加时请求摘要后端,耗时也会增加,因为超过了后端处理能力(最大qps,存在任务堆积)。

  • 版本一
    引入LruCache。为了避免数据失效,cache数据的时效性要小于摘要后端物料的更新时间,设置0.8倍的过期时间。写cache时将数据更新的时间戳一起缓存下来,读cache时计算当前时间与时间戳的差值是否超过过期时间,如果过期清空缓存数据。
    如何防止大量缓存数据一起失效?

问题:并发读写的LruCache使用锁保护,单机qs过高时锁竞争严重,很多时间消耗在锁等待上,导致耗时增长。

  • 版本二
    Cache分片,引入key的哈希函数,将数据分散到不同分片上,减小临界区,降低锁的竞争。分片数可以与线程数保持一致。

  • 版本三
    读cache时使用零拷贝机制,对缓存数据增加原子变量的引用计数,每次获取数据时引用计数+1,释放数据时-1,计数为0且达到过期时间时从cache中清除,防止内存泄漏。


http://www.ppmy.cn/ops/142965.html

相关文章

高并发-缓存预热

缓存预热的必要性 缓存预热是为了在系统面临高并发请求时,确保热点数据已经被加载到缓存中,从而提高系统响应速度和稳定性。通过缓存预热,可以避免因数据未命中而导致的数据库压力激增。 典型应用场景 电商系统:在秒杀活动期间&…

火山引擎声音复刻API-2.0

火山引擎声音复刻API-2.0使用解释 付费模式解释: 1.字符版本按照字符付费 2.并发版 是按 并发连接数 或 同时使用量 来收费的付费模式,常见于软件、API 服务、云服务等产品中。 上传音频文件demo代码 import base64 import os import requestshost …

基于单片机的智能化教室环境系统设计

本设计的智能化教室环境系统选用STC89C52做为核心控制器,通过红外传感装置检测教室人数,温度感应模块及光强感应模块检测当前教室内的温度和光照强度,以此来为单片机提供数据来控制灯光与风扇。控制模式设有自动和手动,可调节温度…

优化算法之遗传算法思想和应用实例

优化算法有很多,常用的有粒子群(蚁群)算法,模拟退火、遗传算法、免疫算法(IA)、差分进化算法(Differential Evolution, DE)、梯度下降等。这些算法思想有一些共性,大概是…

汽车租赁系统(数据库存储)

一、系统简介 本系统是一个汽车租赁管理系统,旨在为用户提供便捷的车辆租赁服务。系统包括用户注册、登录、查看车辆信息、租赁车辆、更换车辆、付款、还车等功能,并且管理员可以添加、删除、修改车辆信息以及查看营业额。 二、数据库设计 1. 需求分析…

RK3576 Android14,内存大于4G时UVC应用无法申请内存

最近有个项目需要将Linux虚拟成UVC摄像头,开发过程中遇到一个奇怪的事情,通过V4l2框架接口申请内存时,相同的板子,只是内存一个4G一个8G。4G的内存可以申请成功,8G就不行。提示“内存不足” 内存更大反而内存不足&…

PugiXML,一个高效且简单的 C++ XML 解析库!

嗨,大家好!我是一行。今天要给大家介绍 PugiXML,这可是 C 里处理 XML 数据的得力助手。它能轻松地读取、修改和写入 XML 文件,就像一个专业的 XML 小管家,不管是解析配置文件,还是处理网页数据,…

【Maven】生命周期和插件详解

Maven生命周期 Maven 将项目的生命周期抽象成了 3 套生命周期,每套生命周期又包含多个阶段(phase)。每套中具体包含哪些阶段是 Maven 已经约定好的,但是每个阶段具体需要做什么,是用户可以自己指定的。 Maven 中定义…