关闭

ehcache显示文章阅读次数相关思考

标签: ehcache阅读访问量
274人阅读 评论(1) 收藏 举报
分类:

我们做接口,应用,网页时常常会需要显示某篇文章的阅读次数(假设现在文章叫做article,阅读次数为readCount的属性,setter,getter器ok不谈)。

最常用的是直接获取返回给前台。article.getReadCount()   这样就好了。如果是点击了文章,当然是在点击的接口里面顺便更新下实体咯,article.setReadCount(article.getReadCount()+1)  ,XXservice.update(entity)下ok。

那么问题就来了。如果这个网站是个日访问量不足5的渣渣,这个方法简单方便。但是,假如访问量比较大了一点呢?set后的update下还行么?不行!我拒绝。这样是否考虑过数据库的承受能力呢?一直在不停的写。。。恐怕不太好。

那么解决方法就是ehcache。ehcache框架的配置见我上一篇文章。下面讲讲思路与具体实现与代码。

思路:通过ehcache将访问量的数据存在cache(缓存)中,规定一个请求的访问更新数据库的间隔时间,当请求时间间隔超过时更新。

实现:

1,在实体类中先定义下缓存名和间隔时间。

2,ehcache.xml里面配置相同的缓存名

<cachename="growthDiaryHits"maxElementsInMemory="500"eternal="true"overflowToDisk="true"/>

3,service具体实现:

3.1:通过缓存名获取缓存,查找出对应每一篇文章的元素。定义阅读数变量count为0;

3.2:缓存元素存在,则设置count为缓存中的值;不存在则是数据库中值;

3.3:放入缓存;

3.4:判断时间来更新表;

4,接口,控制器等等调用service方法。


代码:(我觉得还是截图好,看着文章就证明这个没用过或者不熟悉,还是敲一遍学的快;截图省时间)

实体类中:


配置文件中(ehcache.xml):



service中:


接口中:



上面讲的是写,既然是存在缓存中的,那么读的时候从数据库中拿出来的阅读量肯定不是实时的了,代码如下:

// growthDiaryListBlock.setReadCount(growthDiary.getReadCount());

            // 修改获得阅读量的获取,通过ehcache判断,存在从ehcache获取,不存在从表获取

            Element element = cache.get(growthDiary.getId() + "_count");

            if (element != null)

            {

                growthDiaryListBlock.setReadCount((Integer) element.getValue());

            }

            else

            {

                growthDiaryListBlock.setReadCount(growthDiary.getReadCount());

            }





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:92987次
    • 积分:2525
    • 等级:
    • 排名:第15454名
    • 原创:159篇
    • 转载:40篇
    • 译文:0篇
    • 评论:13条