`
yesjavame
  • 浏览: 693550 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

UOP设计思想应用之数据缓存

阅读更多
数据缓存是提高性能的有效手段,但缓存什么内容,如何缓存,这是重要的设计理念.也就是如何提高你的缓存命中率.

1.小批量数据完全缓存.
象字典数据,如省份,地区等,还有一个公司的部门,员工(如果一个公司员工超地一万人一般不会要你去设计,因为他们会找非常专业的人,但那些非常专业的人其实也是象我这么做的)这些数据应该一次缓存,用不了多少空间的,在现地动辄上G的内存中,放上几兆这样的数据,比你每次都从数据库提取性能要高多了.

2.Fat对象根据JVM需要得用软/弱/虚引用
这类对象是在构造时需要消耗一定资源,不应该每次都构造,但不用时又不能常时间放在内存中占用系统资的对象.那么我们可以根据需要取得他的软/弱/虚,即JVM没有回收他时,我们可以随时引用它,而JVM需要回收时,我们没的强引用句柄,你要回收就回收吧.我需要的时候再创建.

3.大批量数据遵循二八原则.
其实这也是二八原则的应用技巧.

百分之八十的请求只访问那百分之二十的常用数据,你放在缓存中,非常快.如果有查询不在缓存中的对象,比如根据一个ID在hashmap中get时为空,这时需要从数据库中获取,可能会比从缓存中慢10倍或100倍,但不要紧.即使查不出来也不要紧(那是不可能的)

因为这是一个用户心理的问题,他在正常的时候查询那80%的贴子都很快,一点,shua!,出来了.他的感觉就是你这个应用很快,如果有一个查询很慢(从数据库获取,其实即使慢10倍用户也感觉不了来,只是慢一些,因为0.1秒和0.01秒对用户是没有区别是),假如就是慢到几秒才出来,用户的感觉不是你的程序慢,可能是网络出问题了.因为他查询大多数的贴子很快啊.

所以一个好的设计方案不仅仅技术的问题,而且要充分考虑用户的感觉,这是我的UOP设计思想.比如论坛的贴子,大多数用户可以说90%的查询是请求最后10-30天内的数据,这部分数据只占数据库的百分之几到千分之几,所以把这个数据缓存在内存中,命中率是非常高的.


如果你的缓存是限定大小,那么在缓存达到限额时,以什么原则来删除原来的数据?

一次删除定额的数据应该在25%,这是装填因数的一般原则(0.75),而要删除的对象,基本是两个原则.一是时间最长的,是一引用最少的,对于link,list这样的数据结构,可以根据加入顺序认定时间顺序,但象hashmap这样的数据你没有办法认定时间,除非你加入的时候给这个地象加上一个属性.


其实更好的方法是加上引用计数,设计一个count.然后在每次get的时候强用加1

下面是我用来定制规定大小的缓存实现:


importjava.util.*;


publicclassLimitHashMap<K,V>extendsHashMap<K,V>{
privateintsize;
publicLimitHashMap(intsize){
super();
this.size=size;
}
publicVget(Objectkey){
Vv=(V)super.get(key);
if(vinstanceofDataBeanAdapter){
((DataBeanAdapter)v).refCount++;
}
returnv;
}
publicvoidshrink(){
if(this.size()<size)return;
if(size<200)return;
HashMaptmp=newHashMap();
Iteratori=keySet().iterator();
while(i.hasNext()){
Stringkey=(String)i.next();
tmp.put(((DataBeanAdapter)get(key)).refCount,key);
}
i=tmp.keySet().iterator();
Object[]array=tmp.keySet().toArray();
Arrays.sort(array);
Listt=Arrays.asList(array);
t=t.subList(0,size*25/100);
Object[]keys=t.toArray();
for(intx=0;x<keys.length;x++){
remove(tmp.get(keys[x]));
}
tmp.clear();
}
}
分享到:
评论

相关推荐

    uop.rar_UOP_genesis_创世 类库_创世类库_网络创世纪

    UOP是为了优化游戏性能和降低网络延迟而设计的一种高效的数据传输协议。它将游戏中的对象状态(如玩家位置、物品属性等)打包成紧凑的二进制格式,从而减少网络传输的数据量。在游戏中,这种优化对于提升玩家体验至...

    FANUC机器人SYST-034 SOP或UOP的暂停信号丢失.docx

    在FANUC机器人的操作中,用户可能会遇到“FANUC机器人SYST-034 SOP或UOP的暂停信号丢失”的警告。这个警告属于WARN级别,表明系统检测到一个异常情况,但还不至于导致机器人完全停止工作。下面将详细解释这个警告的...

    FANUC机器人UOP信号功能详细介绍(UI输入+UO输出信号).docx

    FANUC机器人的UOP信号是其控制系统中关键的输入输出信号,用于实现与外部设备的交互和控制机器人动作。UOP信号分为UI输入信号和UO输出信号两部分。 UI输入信号共有18个,主要用于控制机器人的启动、暂停等操作: 1...

    UOP3CC计算机控制连续精馏塔在不同回流比和功率下的应用研究.doc

    本文研究了UOP3CC计算机控制连续精馏塔在不同回流比和功率下的应用。通过纯水实验、连续精馏实验和间歇精馏实验,测定了不同回流比和功率下的全塔压降。研究结果表明,回流比和功率对精馏塔的操作有着重要影响。 在...

    22 用1602LCD与DS18B20设计的温度报警器.rar_UOP_基于proteus温度检测报警系统_温度报警

    该压缩包文件包含了一个基于1602LCD显示器和DS18B20温度传感器设计的温度报警系统项目。这个项目旨在实现一个温度监控系统,能够实时显示当前环境温度,并在温度超出预设的安全范围(-20℃到70℃)时发出报警。 ...

    Intel CPU微架构简介.docx

    首先,CPU的核心部分由多个核心组成,每个核心都拥有独立的L1指令缓存、L1数据缓存、L2缓存以及共享的L3缓存。L1缓存直接与处理器核心交互,使用虚拟地址空间进行寻址,而L2和L3缓存则通过线性地址空间来查找数据。...

    订单上云方案.pptx

    - **云上 ECS 应用**:逐步迁移到新环境,包括 WAR 包部署、Redis 缓存服务,以及使用 MySQL 数据库的应用服务。 - **订单相关应用**:云上保留一部分,主要处理 DPS 下单和推送,新环境则承担更多的订单处理任务...

    java面向对象笔试题-uop_cs1102:CS1102:编程I

    CS1102:程序设计Ⅰ 学习指南第 1 单元 ##Unit 1:编程、名称和事物简介 ##话题: 电脑操作简介 Java 简介、Java 虚拟机以及 Java 开发和运行时环境 面向对象编程 用户界面 一个基本的Java程序 变量和数据类型 ...

    企业IT互联网转型方案.pptx

    缓存服务Eon-IM则通过缓存热点数据,减少了对数据库的高并发访问,优化了性能。 在应用层面,Eon-OS云开放平台对外开放服务接口,鼓励互联网开发者基于这些接口创建新应用,实现了接口标准化、流量控制和计费管理。...

    方波、三角波发生器的设计

    ### 方波、三角波发生器的设计 #### 实验目的 1. **学习方波、三角波发生器的设计方法**:通过本次实验,学生能够掌握如何设计一个能够产生方波和三角波信号的基本电路。 2. **进一步培养电路的安装与调试能力**:...

    Android应用源码之Android Layout UI 首页加载过渡动画,星期变化动画.zip

    本资源“Android应用源码之Android Layout UI 首页加载过渡动画,星期变化动画.zip”专注于Android布局中的界面加载过渡动画以及星期变化动画的实现。 首先,我们关注的是首页加载过渡动画。这种动画在用户打开应用...

    RTHS展业.apk 分析报告1

    所有列出的服务器都位于中国,这表明应用的数据处理可能都在国内进行,符合中国的数据合规性要求。 然而,报告并未提供关于邮件线索的信息,这意味着该应用可能不依赖于电子邮件地址来收集用户信息或进行通信。 总...

    英特尔第十一代酷睿处理器首发测试.pdf

    L1数据缓存从32KB增加到48KB,减少了L1缓存未命中的概率,提高了效率。微操作(uOp)缓存和二级TLB缓存也得到了扩展,有助于减少延迟并提升性能。在架构上,Sunny Cove的执行端口从8个增加到10个,允许处理更多指令,...

    霍尼韦尔UOP技术助力储油船天然气脱杂处理

    霍尼韦尔UOP技术在储油船天然气处理领域的应用是一项重要的技术创新,旨在解决海上天然气脱杂处理的挑战。在此次项目中,柏阁森海洋公司(BW Offshore)选择了霍尼韦尔UOP的技术,为其在苏格兰海岸新建的浮式生产储...

    FANUC机器人后台逻辑功能使用方法.docx

    在实际应用中,FANUC机器人的后台逻辑功能可以用于监控机器人系统的健康状态,持续检测关键参数,如温度、压力或设备状态,以确保生产过程的稳定性和安全性。此外,它还能用于实时优化工作流程,例如根据生产线的...

    电源技术中的直流电源设计中一些问题的处理办法及其串联应用分析

    直流稳压电源的设计,是根据稳压电源的输出电压Uo、输出电流Io、输出纹波电压△Uop-p等性能指标要求,确定出变压器、集成稳压器、整流二极管和滤波电路中所用元器件的性能参数,从而合理地选择这些器件。  随着电力...

    霍尼韦尔uop-未来炼厂白皮书之六大关键能效分析-2021.5-8页.pdf

    未来炼厂的概念与传统炼厂相比,发生了一系列重要变化。在过去的能源革命中,炼厂主要生产的燃料产品如汽油和柴油,现在随着电气化的趋势,需求正逐步下降。同时,人类社会对石化产品的依赖和需求正快速增长,尤其是...

Global site tag (gtag.js) - Google Analytics