如何使用Memecached做为JFINAL的jfinal 数据缓存存

当前访客身份:游客 [
当前位置:
你好,想跟你请教个问题:您好! 后台管理员界面 执行排序查询操作的时候, 结果不对,不会排序查询了, 因为Service层是从缓存里查询的list. 有没有啥办法? 还是我哪里写错了?
后端Service层代码:
共有4个答案
<span class="a_vote_num" id="a_vote_num_
引用来自“悠哉”的评论不好意思, 我没描述清楚. 我是说, 我现在的代码这么写, 是不是有问题? &我用了缓存后, 就发现排序功能不行了, 怎么点排序 显示的结果一样. 是不是我用错了?
& & &使用缓存时,cacheName 与 cacheKey 决定了去缓存中取什么值,那么,如果你的 cacheName 与 cacheKey 一直是固定的注定了每次取出来的值都是一样的,哪怕你后面用于查询数据的 sql 与参数变化都没用。
& & 让 cacheKey 与查询结果建立对应关系才可以,具体可以参考一下 com.jfinal.plugin.ehcacle.CacheInterceptor.java 中的 buildCacheKey(..) 方法
<span class="a_vote_num" id="a_vote_num_
& & 没秒懂? 到底要不要缓存,数据为什么不对?
<span class="a_vote_num" id="a_vote_num_
不好意思, 我没描述清楚. 我是说, 我现在的代码这么写, 是不是有问题? &我用了缓存后, 就发现排序功能不行了, 怎么点排序 显示的结果一样. 是不是我用错了?
<span class="a_vote_num" id="a_vote_num_
原来如此, 明白了, 非常感谢
更多开发者职位上
有什么技术问题吗?
悠哉的其它问题
类似的话题当前访客身份:游客 [
当前位置:
JFinal的缓存机制是如何的?近期在接触和熟悉JFinal,新手上路,版主多指点 哈哈
共有4个答案
<span class="a_vote_num" id="a_vote_num_
JFinal下一版将做一个缓存插件EhCachePlugin以及一个EhCacheInterceptor,这样就可以很轻松地在action之外添加缓存了,action完全不知道缓存的存在,仍然干着以前一样的事情,这样就达到了松耦合的目的,AOP还有很多非常好的用法,例如JFinal Validator也是靠AOP来实现的,非常方便自然
<span class="a_vote_num" id="a_vote_num_
妥了!期待下新版 解决缓存问题!
<span class="a_vote_num" id="a_vote_num_
引用来自“JFinal”的答案JFinal下一版将做一个缓存插件EhCachePlugin以及一个EhCacheInterceptor,这样就可以很轻松地在action之外添加缓存了,action完全不知道缓存的存在,仍然干着以前一样的事情,这样就达到了松耦合的目的,AOP还有很多非常好的用法,例如JFinal Validator也是靠AOP来实现的,非常方便自然
还能这么松耦合,太好了!继续!!!
<span class="a_vote_num" id="a_vote_num_
JFinal 1.0.7 正式发布了,提供了EhCachePlguin做缓存,支持自动化缓存与手动缓存两种方式,使用简单,可以下载手册看看:&
&里面有示例代码。
更多开发者职位上
有什么技术问题吗?
leleba...的其它问题
类似的话题当前访客身份:游客 [
好记性不如烂笔头,何况记性还不好--!
:引用来自“kyle1970”的评论 引用来自“林林悦之...
:看shiro 看到了这里·· 会话问题 就用 Shiro 。...
:引用来自“JFinal”的评论 引用来自“绝望的八皮...
:Shiro 的session管理其实蛮好用的~~ 可以借鉴一...
:真心不错啊,提供了好的避免使用session来验证保...
:引用来自“kyle1970”的评论 引用来自“_肖宇林”...
:3楼,IOC时会有问题的。像spring啊,hibernate啊...
:引用来自“_肖宇林”的评论 你的upperFirst方法是...
:// 对str=“iD”、“tTT”等,这种情况不做处理,...
:你的upperFirst方法是有问题的,并不是所有情况都...
今日访问:0
昨日访问:8
本周访问:12
本月访问:174
所有访问:7138
jfinal 使用ehcache 存储登陆信息
发表于3年前( 22:14)&&
阅读(3360)&|&评论()
0人收藏此文章,
&&& 今天接触了下EhCache 缓存机制,尝试着用jfinal实现了登陆成功后缓存用户对象。有问题还请大家指正。
第一步:配置环境
&&&&创建一个web工程,先把jfinal相关配置完成,可以直接用jfinal的demo(连jfinal的demo都没有?在osc搜索下吧)。下载ehcache.jar ,commons-logging.jar ,log4j-1.2.16.jar 把三个jar包放在WEB-INF/lib 下,找了半天没找到如何共享jar包,大家只有自己去下载了。给个链接
第二步:创建ehcache.xml
&&&&创建ehcache.xml文件,放在src即可。相关配置文件参数的介绍大家可以看下
&diskStore&元素:指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个文件目录下。 下面的参数这样解释:
&&&&user.home – 用户主目录
&&&&user.dir – 用户当前工作目录
&&&&java.io.tmpdir – 默认临时文件路径
&defaultCache&元素:设定缓存的默认数据过期策略。
&cache&元素:设定具体的命名缓存的数据过期策略。
&cache&元素的属性
&&&&name:缓存名称。通常为缓存对象的类名(非严格标准)。
&&&&maxElementsInMemory:设置基于内存的缓存可存放对象的最大数目。
&&&&maxElementsOnDisk:设置基于硬盘的缓存可存放对象的最大数目。
&&&&eternal:如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为
&&&&timeToIdleSeconds:
设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性 值,这个对象就会过期。当对象过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示 对象可以无限期地处于空闲状态。
&&&&timeToLiveSeconds:设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 & &&&&timeToLiveSeconds属性值,这个对象就会过期。当对象过期,EHCache将把它从缓存中清除。只有当eternal属性为false, 该属性才有效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds 属性,才有意义。
&&&&overflowToDisk:如果为true,表示当基于内存的缓存中的对象数目达到了maxElementsInMemory界限后,会把益出 的对象写到基于硬盘的缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。
&&&&memoryStoreEvictionPolicy:缓存对象清除策略。有三种:
&&&&&&&&1 、FIFO ,first in first out ,这个是大家最熟的,先进先出,不多讲了
&&&&&&&&2 、LFU , Less Frequently Used ,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
&&&&&&&&3、 LRU ,Least Recently Used ,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
我的ehcache.xml配置如下:
&ehcache xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:noNamespaceSchemaLocation=&ehcache.xsd&&
&diskStore path=&java.io.tmpdir&/&
&defaultCache
maxElementsInMemory=&10000&
eternal=&true&
timeToIdleSeconds=&3600&
timeToLiveSeconds=&3600&
overflowToDisk=&true&
&!-- 自定义cache --&
&cache name=&UserCachingFilter&
maxElementsInMemory=&10000&
maxElementsOnDisk=&1000&
eternal=&false&
overflowToDisk=&true&
timeToIdleSeconds=&900&
timeToLiveSeconds=&1800&
memoryStoreEvictionPolicy=&LFU&
&/ehcache&
第三步:在jfinal中加入ehcache插件
&&&&在jfinal配置类中加入该插件即可,注意ehcache.xml文件的路径。
plugins.add(new EhCachePlugin(&src/ehcache.xml&));
第四步:创建验证逻辑
直接贴我login方法,很简单,一看就懂。
public void login(){
String username=getPara(&username&);
String pwd=getPara(&pwd&);
User user=User.userDao.findFirst(&select * from m_user where name=? and pwd=?&, username,pwd);
if(null!=user){//验证成功
//CacheKit操作cache把user加入到缓存中
CacheKit.put(&UserCachingFilter&, &user&, user);
forwardAction(&/menu&);
setAttr(&loginError&, &账号或密码错误&);
render(&/login.html&);
第五步:登陆拦截
&&&&创建一个登陆拦截器,然后你就可以在任何地方拦截啦。我发现即使不在配置类中配置拦截器,也可以用。
public void intercept(ActionInvocation ai) {
System.out.println(&user interceptor is running....&);
User user=CacheKit.get(&UserCachingFilter&, &user&);
if(null==user){
//如果用户为空则跳转登陆,当然还可以进一步的操作
ai.getController().render(&/login.html&);
ai.invoke();
&&&&ps:感觉jfinal还是挺不错的,对于我这种菜鸟都能很好的上手,配置相应的东西也挺简单的,希望以后真的能广泛应用,哈哈。。。
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读}

我要回帖

更多关于 php memecached 扩展 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信