`
soleghost
  • 浏览: 41991 次
  • 性别: Icon_minigender_1
  • 来自: 未知
社区版块
存档分类
最新评论

缓存小技巧--NullObject模式&&表识cache

阅读更多

在我们的应用中,有一张表的查询量非常之大,高峰期时6000次/second查询,而且更新很少,于是我们的改造来了:

 

第一次优化:

方法:每次从cache中读取,如果cache中没有命中,则从DB读取,如果有值将此值放入cache中。

效果:上线后效果并不是特别明显,高峰期仍有3000次/second的查询,原因在哪里呢?此表只有700w的数据量,但是对于3亿用户,每个用户都要查询此表,就是说,只有700w/3亿=2.33%可以命中cache,间接导致每次从cache中取数据为空后,仍有97.67%的数据仍然会查询DB。

 

第二次优化:

方法:每次从DB中查询后,如果是空,则在cache中放入一个NullObject,用于区分null的数据。如果结果是NullObject或者此表的对象模型,则直接从cache中返回,不再从db中查询。

效果:这次优化后,相信可以减少对宝贵的db资源大量的浪费。

 

第三次优化:

方法:有一个背景,我们的3亿用户基于读多写的业务已经放入分布式cache,我们可以将业务看做是是用户的一个属性(一个假设的例子:网银的硬key),可以把此业务和客户模型绑定在一起,即在用户的客户模型表中增加一个字段,每次查询客户模型时,即将此字段查询出来;如果此属性有值,外围系统可以在第二步的基础上,继续查询具体表的缓存去完成自己的业务。

效果:客户模型的表识cache+具体业务的cache,即可以避免大部分业务二次查询的问题;又充分利用了cache的功效

分享到:
评论

相关推荐

    【ASP.NET编程知识】.NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法.docx

    .NET Core 2.0 迁移小技巧之 MemoryCache 问题修复解决的方法 .NET Core 2.0 中的 MemoryCache 问题修复解决方法是指在 .NET Core 2.0 迁移过程中,如何解决 MemoryCache 相关代码不再起作用的问题。MemoryCache 是...

    初学ehcache,3分钟搞定。

    2. **`cache`**:定义了名为`jsArray`的缓存配置。 - `name`: 缓存名称,这里是`jsArray`。 - `maxElementsInMemory`: 缓存在内存中的最大元素数量,此处为1000。 - `eternal`: 同上,此处为`false`。 - `...

    .NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法

    在.NET Framework中,MemoryCache是System.Runtime.Caching命名空间下的一个类,用于提供应用程序的内存缓存服务。然而,当你将项目迁移到.NET Core 2.0时,会发现System.Runtime.Caching命名空间不再被支持,因此...

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...

    Oracle运维最佳实践-上.pdf 带书签

    - **分类**: CLOB (Character Large Object) 和 BLOB (Binary Large Object)。 - **挑战**: 管理和优化大对象的存储、重做日志及性能问题。 ##### 2.7.2 新一代大对象处理技术:Securefiles - **优点**: 改善了...

    android_中webView控件详解

    - **禁用缓存**:如果希望完全禁用缓存,可以使用`wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);`。 - **清理Cookies**:可以使用以下代码来清理WebView中的Cookies: ```java CookieSyncManager....

    前端笔试面试题目总结.pdf

    13. JavaScript数据类型:包括基本类型(String、Number、Boolean、Null、Undefined、Symbol)和引用类型(Object)。 14. 继承方式:原型链继承、构造函数继承、组合继承、寄生式继承、寄生组合式继承、ES6的Class...

    2010年oracle命令176页完整版型

    CREATE SYNONYM synonym_name FOR object_owner.object_name; ``` **2. 删除同义词:** - **删除同义词:** ```sql DROP SYNONYM synonym_name; ``` #### 八、dblink操作 **1. dblink创建:** - **创建...

    Android程序研发源码Android WebViewJS应用源码.rar

    - 使用WebView缓存:`webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);` - 启用数据压缩:`webView.getSettings().setUseWideViewPort(true);` - 释放内存:在不需要时调用`webView.clearHistory...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...

    summary:知识点总结

    1. 数据类型:包括基本类型(String、Number、Boolean、Null、Undefined)和引用类型(Object)。 2. 变量声明:var、let、const关键字的区别和使用场景。 3. 运算符:算术运算符、比较运算符、逻辑运算符、赋值...

Global site tag (gtag.js) - Google Analytics