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

来源:互联网 发布:网络电视无信号 编辑:程序博客网 时间:2024/05/16 11:17

我们做接口,应用,网页时常常会需要显示某篇文章的阅读次数(假设现在文章叫做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