博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式的累加器
阅读量:7137 次
发布时间:2019-06-28

本文共 1487 字,大约阅读时间需要 4 分钟。

  今天闲来无事优化了一下框架里的累加器类。

      累加器顾名思义就是当基数累加到一定数量后在做相应的处理。比如我们在开发一套日访问量在200WPV左右的应用时总是会考虑到访问量统计的优化,一个PV UPDATE

一次数据库会有灾难性的后果。

       第一版的累加器是用缓存做的。每次累加记录从缓存里获取当前量,累加后判断总数是否达标,OK的话UPDATE一次数据库。这样的处理方式在流程上没有问题,弊端就是因为每个存储的KEY不同,会再内存里储存很多内存片段。

       所以我考虑能不能用单例模式+事件的方式解决这个问题,下面是我写的代码:

      

public class Summation     {
private static Dictionary
list; ///
/// 静态构造函数 /// static Summation() {
if (list == null) list = new Dictionary
();//单例模式 } ///
/// 累加方法 /// ///
///
public static void Load(string key, int maxCount) {
int count = 0; if (list.ContainsKey(key)) {
count = list[key]; count++; list[key] = count; } else {
count = 1; list.Add(key, count); } if (count == maxCount) {
OnServing(count); list[key] = 0; } } ///
/// 触发的事件 /// public static event EventHandler
Serving; private static void OnServing(int count) {
if (Serving != null) {
Serving(count, EventArgs.Empty); } } }

    这样写的好处是在内存里之会有一个对象存储。但有一个问题就是一定要累加到够数量才能触发事件,也就是说如果访问量小的应用统计的就不够精确。不像缓存可以定义缓存过期事件,即使没人访问也能触发。各有利弊吧。哈哈

    还有就是我的单例没LOCK,我错了!

转载于:https://www.cnblogs.com/xiha/archive/2011/09/16/2178427.html

你可能感兴趣的文章
macos下命令行通过ndk编译android下可以执行的ELF程序(并验证opencl的调用)
查看>>
深入理解Lustre文件系统-第6篇 OST和obdfilter
查看>>
Selenium Web 自动化 - 项目持续集成(进阶)
查看>>
POJ 2456: Aggressive cows(二分,贪心)
查看>>
Opencv+C++之身份证识别(一)
查看>>
在使用gdb调试过程中,经常需要查看变量的值
查看>>
python源码解剖
查看>>
关于ava容器、队列,知识点总结
查看>>
Eclipse -Xms256M -Xmx640M -XX:PermSize=256m -XX:MaxPermSize=768m
查看>>
框架重构:规范集成测试的结构和命名规则
查看>>
「转」xtrabackup新版详细说明
查看>>
Spring Boot 构建电商基础秒杀项目 (十) 交易下单
查看>>
HTTP协议入门知识
查看>>
SQL中创建用户的方法
查看>>
PHP168 6.0及以下版本login.php代码执行
查看>>
Java代理(jdk静态代理、动态代理和cglib动态代理)
查看>>
WPF生命周期
查看>>
各大Oj平台介绍
查看>>
hdu1059 dp(多重背包二进制优化)
查看>>
四象限分析法分析你是否适合做管理
查看>>