缓存加速新玩法,让你的应用飞起来

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文主要叙述如何运用云数据库 Tair 构建缓存,助力应用提速、优化性能。

一、引言

随着业务的不断发展,应用系统面临的流量压力日益增大。如何在高并发场景下降低系统响应时间、提升整体性能,成为每一位开发人员需要攻克的关键课题。使用缓存,无疑是解决这一问题的首选方案。今天,我们为您介绍如何运用云数据库 Tair 构建缓存,助力应用提速、优化性能。


为什么选择云数据库 Tair 构建缓存?

缓存是一种数据存储机制,通过在高速存储介质中暂存频繁请求的数据,减少对主存储或数据库的直接访问,从而提高系统性能和响应速度。根据应用需求、数据特性和系统架构的不同,构建缓存的方式也是灵活多样。云数据库 Tair 是兼容开源 Redis 协议标准的数据库服务,适用于缓存、实时流数据处理等场景,具有稳定可靠、弹性扩展、易用高效等特点,并支持多种数据结构和高级功能。


核心优势:

  • 高性能存储服务:提供了高性能的键值存储服务,可以满足各种业务场景的需求。采用多线程模型,读写性能达到同规格云数据库 Redis 社区版实例的数倍,能够有效地提高应用的响应速度。
  • 高可用性和弹性伸缩:基于双机热备架构及集群架构,支持自动扩容,提供多种高可用方案,可以根据业务需求动态调整实例规格和容量,帮助您快速弹性适配业务高峰,避免内存溢出的风险,有效保障线上业务稳定性。
  • 丰富数据类型支持:提供丰富的自研增强型数据结构,包括 exString(包含Redis String 命令增强)、exHash、exZset、GIS、Bloom、Doc、TS、Cpc、Roaring、Search 和Vector,帮助您精简代码并提高业务整体性能。


二、方案展示

1. 通过对比访问带缓存与不带缓存的接口,验证缓存功能

通过ECS实例的公网IP访问应用接口,通过不同参数验证方案。


验证不带缓存的接口

通过浏览器访问http:///getAllEmployeesInDepartment?departmentId=1&cacheFirst=false接口,返回值为:

image.png


通过浏览器访问

http:///getAllEmployeesInDepartment?departmentId=1&cacheFirst=true接口,此时再次访问此接口,返回值为:


image.png

可见message字段中提示当前数据从缓存中读取。

验证缓存数据:

i. 登录云数据库 Tair 控制台,在实例列表页面,找到目标实例,点击实例名称;

ii. 在新页面点击登录数据库,如出现了登录实例对话框,输入数据库账号(此处为redis)密码(此处为用户设置的密码),安全托管可以选择不开启,管控模式选择自由操作,点击登录

iii. 在SQLConsole中输入:GET department:1

image.png

可以看到执行历史中返回值为接口数据:

image.png


2. 通过Locust性能测试,验证缓存减轻数据库压力


为了进一步验证方案在高并发场景下数据库的压力情况,我们使用负载测试工具 Locust(参考官方文档安装) 进行测试。

性能测试:无缓存接口

i. 创建文件locustfile.py,完整代码如下:

image.png

ii. 在命令行中运行locust启动 Locust。

打开浏览器,访问 Locust Web 界面 http://localhost:8089,如图所示填写新的测试参数。

image.png


参数说明:

  • Number of users:并发用户数量。
  • Ramp up:即每秒钟增加的用户数量。
  • Host:目标系统的基地址,例如:http://。

iii. 启动测试并执行一段时间后,点击 Stop 停止测试。

iv. 登录云数据库RDS控制台,在实例列表页面,找到目标实例,点击监控

image.png


性能测试:缓存接口

i. 修改locustfile.py代码如下:

image.png

ii. 在命令行中运行locust启动 Locust,参考上一步的操作,完成测试,并查看RDS监控。

image.png


对比分析:

对比前后两次的数据库监控数据,可以明显看出,在测试无缓存接口时,数据库的流量吞吐量、TPS/QPS、执行次数等指标发生了显著变化,出现了一个处理波峰。而在访问带缓存的接口时,这些指标则更为平滑。具体来看,无缓存访问时的执行次数峰值接近700,而带缓存的情况下则稳定在个位数。这表明缓存机制能够有效缓解数据库的压力。


3. 通过删除数据库中的数据,验证缓存命中

清理数据库中的数据记录:

i. 登录云数据库RDS控制台,在实例列表页面,找到目标实例,点击实例名称;

ii. 在新页面点击登录数据库,如出现了登录实例对话框,输入数据库账号(此处为rds)密码(此处为用户设置的密码),管控模式选择自由操作,点击登录

iii. 在SQLConsole窗口中输入

image.png

当执行历史出现提示:

image.png

说明数据清理完成。

访问缓存接口:

通过浏览器访问http://<公网IP>/getAllEmployeesInDepartment?departmentId=1&cacheFirst=true接口,返回值为:

image.png

可见 message 字段中提示当前数据从缓存中读取,说明缓存已被正确命中。





来源  |  阿里云开发者公众号

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
93 0
|
5月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
2月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
46 5
|
2月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
3月前
|
存储 缓存 数据库
缓存技术有哪些应用场景呢
【10月更文挑战第19天】缓存技术有哪些应用场景呢
|
4月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
206 15
|
3月前
|
缓存 移动开发 前端开发
HTML5 应用程序缓存详解
HTML5 应用程序缓存(Application Cache)通过缓存 HTML、JavaScript、CSS 和图像等资源,使 Web 应用能在离线状态下运行。它利用 Manifest 文件(`.appcache`)定义缓存资源列表,浏览器会在加载页面时下载并缓存这些资源。此外,应用程序缓存还提供了事件处理机制,允许开发者监控缓存状态并进行手动管理。尽管这一技术已被视为过时,建议使用 Service Workers 和 Cache API 等现代替代方案来实现更强大的离线功能和缓存控制。
|
4月前
|
机器学习/深度学习 缓存 NoSQL
深度学习在图像识别中的应用与挑战后端开发中的数据缓存策略
本文深入探讨了深度学习技术在图像识别领域的应用,包括卷积神经网络(CNN)的原理、常见模型如ResNet和VGG的介绍,以及这些模型在实际应用中的表现。同时,文章也讨论了数据增强、模型集成等改进性能的方法,并指出了当前面临的计算资源需求高、数据隐私等挑战。通过综合分析,本文旨在为深度学习在图像识别中的进一步研究和应用提供参考。 本文探讨了后端开发中数据缓存的重要性和实现方法,通过具体案例解析Redis在实际应用中的使用。首先介绍了缓存的基本概念及其在后端系统性能优化中的作用;接着详细讲解了Redis的常见数据类型和应用场景;最后通过一个实际项目展示了如何在Django框架中集成Redis,
|
3月前
|
存储 缓存 NoSQL
构建高性能Web应用:缓存的重要性及其实现
构建高性能Web应用:缓存的重要性及其实现
|
5月前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
237 1