专栏首页智能大石头[NewLife.XCode]数据层缓存(网站性能翻10倍)

[NewLife.XCode]数据层缓存(网站性能翻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%。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [NewLife.XCode]对象字典缓存(百万军中取敌首级)

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

    大石头
  • [NewLife.XCode]实体列表缓存(最土的方法实现百万级性能)

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

    大石头
  • 每天4亿行SQLite订单大数据测试(源码)

    SQLite单表4亿订单,大数据测试 SQLite作为嵌入式数据库的翘楚,广受欢迎! 新生命团队自2010年以来,投入大量精力对SQLite进行学习研究,成功应...

    大石头
  • 对Hibernate二级缓存理解

    缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

    葆宁
  • 缓存穿透,缓存击穿,缓存雪崩解决方案分析

    设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。

    java思维导图
  • 分布式系统关注点——先写DB还是「缓存」?

    在前一篇《360°全方位解读「缓存」》中,我们聊了运用缓存的三种思路,以及在一个完整的系统中可以设立缓存的几个位置,并且分享了关于浏览器缓存、CDN缓存、网关(...

    Zachary_ZF
  • 【前端基础进阶】浏览器的缓存机制

    缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负...

    super.x
  • 细说.NET 缓存

    在项目开发中缓存可以说是一直的存在,但是缓存技术具体该怎么用用在哪里,对于大多数开发人员来说并不知道,甚至有些开发人员认为缓存使用过于复杂。那么通过这篇文章各位...

    喵叔
  • Redis-缓存穿透

    缓存穿透:查询一个根本不存在的数据,缓存和数据库都不会命中,这样每次这类的查询都会透过缓存层查数据库,造成后端数据库压力增大。

    别明天就今天吧
  • 缓存,确实很香!浅谈用不好缓存的几个受伤场景!

    缓存的使用,是一个逐渐演进的过程。问一下你自己,最直接的使用缓存的原因是什么?无它,唯快而已!

    业余草

扫码关注云+社区

领取腾讯云代金券