数据层缓存(网站性能翻10倍)

简介: 缓存是一把尖刀,合理使用可大大提升吞吐率!

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。

开源地址:https://github.com/NewLifeX/X (求star, 760+)

 

缓存是一把尖刀,合理使用可大大提升吞吐率!

 

历史背景

2006年,某某省电网门户卒!

经查,首页某个sql先后执行了8次,正好对应页面上8大块新闻列表。

实在忍无可忍,于是在底层用Hashtable做了一层sql/DataSet缓存,当时.NET1.1好像还没有泛型字典。

于是世界清静了,效果还不错,特别对于访问量很大的门户网站。

 

XCode的数据层缓存设计于2003年,那时候只做网站和普通MIS系统,数据库性能还很差……

 

数据层缓存:以查询sql为key,把查询结果缓存起来,提升系统性能!

 

数据层缓存

经过16年的发展,XCode里面数据层缓存曾经一度被干掉,若干年后又请回来,现在是这个样子:

数据层DAL内,所有查询类方法 Query/Select/SelectCount 都先走一趟缓存(默认配置关闭);

所有添删改操作类方法 Execute 都清空本DAL连接的所有缓存;

 

** 多年前,查询方法指定要用到的表名,添删改方法指定会影响到的表名,做到部分表缓存过期。现在数据库性能大有提升,为了“简约”设计理念,简化了缓存设计。

 

缓存设置

数据层缓存只有一个缓存时间的设置DataCacheExpire,位于配置文件 config/xcode.config 中,默认0秒表示不启用。

设置缓存时间的方式有多种:

  • 修改配置文件 config/xcode.config 中的DataCacheExpire
  • 魔方,魔方设置页面,修改数据中间件页的“数据层缓存”
  • 直接修改DAL类的Expire属性
  • 连接字符串中配置DataCache参数,如 DataCache=60

前面两者的本质相同,也是最常见用法。

连接字符串配置提供了个性化,针对部分连接需要打开数据层缓存,或者不同连接采用不同缓存时间的场景。

 

总结

2016年起,XCode采取了“简约”且稍微“保守”的理念,于是数据层缓存默认配置0秒,大部分场景推荐使用10~60秒。

各种网站,推荐过期时间60秒起,经实际线上项目压测,吞吐率可轻易从300rps提升到10000rps以上,命中率99.99%。

每一个应用系统,总会有那么一些表或数据很少改变,非常适合使用数据层缓存,建议在实践中探索得到最优缓存时间!

相关文章
|
26天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
60 1
|
26天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
37 2
数据的存储--Redis缓存存储(二)
|
3月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
16天前
|
缓存 监控 前端开发
处理页面缓存中数据不一致的问题
【10月更文挑战第9天】
29 2
|
19天前
|
缓存 弹性计算 应用服务中间件
如何使用 Wordpress?托管, 网站, 插件, 缓存
如何使用 Wordpress?托管, 网站, 插件, 缓存
|
21天前
|
缓存 JavaScript 前端开发
Vue 3的事件监听缓存如何优化性能?
【10月更文挑战第5天】随着前端应用复杂度的增加,性能优化变得至关重要。Vue 3 通过引入事件监听缓存等新特性提升了应用性能。本文通过具体示例介绍这一特性,解释其工作原理及如何利用它优化性能。与 Vue 2 相比,Vue 3 可在首次渲染时注册事件监听器并在后续渲染时重用,避免重复注册导致的资源浪费和潜在内存泄漏问题。通过使用 `watchEffect` 或 `watch` 监听状态变化并更新监听器,进一步提升应用性能。事件监听缓存有助于减少浏览器负担,特别在大型应用中效果显著,使应用更加流畅和响应迅速。
47 1
|
22天前
|
消息中间件 缓存 NoSQL
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
38 2
|
2月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
118 6
|
2月前
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
2月前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
112 12