用观察者模式解决点击一次文章 update一次数据库的问题

接上文http://xuliangyong.iteye.com/blog/171240

对于第二种方法现用观察着模式来解决

思路是这样:当点击a文章(id=1234)够10次后 ,通知文章管理器更新点击次数

update article set hit_count = hit_count+10 where id = 1234

这样就减少了访问数据库的次数

代码如下:

Java代码
  1. publicclassHitCachedextendsObservable{
  2. privatestaticfinalintDEFAULT_MAX_HITS=10;
  3. privateMap<Long,Integer>hits=Collections.synchronizedMap(newHashMap<Long,Integer>());
  4. /**
  5. *最大点击量。超过该值就更新数据库
  6. */
  7. privateintmaxHits=DEFAULT_MAX_HITS;
  8. publicHitCached(){}
  9. publicHitCached(intmaxHits){
  10. this.maxHits=maxHits;
  11. }
  12. publicvoidput(Longkey,Integervalue){
  13. hits.put(key,value);
  14. }
  15. /**
  16. *为指定key增加指定的点击量
  17. *@paramhitIncreased增加的点数
  18. */
  19. publicvoidaddHit(Longkey,IntegerhitIncreased){
  20. if(!hits.containsKey(key))
  21. hits.put(key,0);
  22. Integervalue=hits.get(key);
  23. if(value+hitIncreased>=maxHits){
  24. setChanged();
  25. notifyObservers(KeyValuePair.create(key,value+hitIncreased));
  26. hits.remove(key);
  27. }else{
  28. hits.put(key,value+hitIncreased);
  29. }
  30. }
  31. publicIntegerget(Longkey){
  32. returnhits.get(key);
  33. }
  34. publicvoidclear(){
  35. hits.clear();
  36. }
  37. }
Java代码
  1. publicclassArticleManagerImplextendsHibernateGenericDao<Article,Long>implementsArticleManager,Oberver{
  2. publicvoidupdate(Observableo,Objectarg){
  3. KeyValuePairkeyValue=(KeyValuePair)arg;
  4. Articlearticle=this.get(keyValue.getKey());
  5. article.setHitCount(article.getHitCount()+keyValue.getValue());
  6. save(article);
  7. }

action中调用

Java代码
  1. privatestaticHitCachedhitCached=newHitCached(5);
  2. publicStringview(){
  3. if(id!=null){
  4. entity=articleManager.get(id);
  5. hitCached.addObserver(articleManager);
  6. hitCached.addHit(id,1);
  7. }
  8. }

这样没十次查看才update一次数据库 更新一次缓存 性能得到了大的提升

存在的问题:

停止服务会丢失一些数据 可加一个监听器 来处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值