jfinal的缓存处理
@JFinal 你好,想跟你请教个问题:
我刚过了下jfinal官方提供的实例->jfinal_blog,想到以下几点,不知有价值没,如下:
1、
@Before(CacheInterceptor.class)
@CacheName("jfinal_cache")
public List<Blog> list() {}
这注解将就把CacheName为jfinal_cache的缓存全都清除了,要是再有个参数key,感觉就更细化了,例如:
@Before(CacheInterceptor.class)
@CacheName("jfinal_cache", "blogList")
public List<Blog> list() {}
---------------------------------------------------
2、
这个可以有吗?@CacheEvict("jfinal_cache", "blogList")放在方法上清除缓存
@CacheEvict("jfinal_cache", "blogList")
public List<Blog> list() {}
---------------------------------------------------
3、
看见已经有这样的实现,me.add(new TxByRegex(".*delete.*", false));
还可以有这样的吗?me.add(new CacheEvictByRegex(".*delete.*", false, "jfinal_cache", "blogList"));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
您好,在学习JFinal,感觉官方的JFinal手册讲的太简单了,在实际应用中会出现各种问题,比如说在登录验证的时候,我们的需求是不光验证一个表中的用户名密码,如果该表的用户名密码不同,那么就验证另外一张表的用户名密码,这样的话我怎么用Interceptor来实现对这两张表的验证,在JFinal手册中没有找见,我是初学者,不知道描述的是否清楚?
可以判断一下得到的 class,当得到的是代理类的时候,使用一下getSuperclass() 即可,具体可以看一下 jfinal 2.0 版本的 Model.java 最后一行代码,可以知道具体的做法
回复
非常感谢得到回复,我想了想还是不新增包了,用2.0包自带的字节码解决了。
回复
即便得到的是增强的class,也是可以获取到类和方法上的注解的,你试试,具体怎么解决的,能否贴出代码来分享一下,这可能是一个比较重要的需求
mark,学习到了不少东西
:) 从提问到出结果,都很有收获。
这块为啥有线程安全的问题,没看懂,改应该改哪里?
感谢楼主支持哈!关于 1、2这两点,如果 cacheKey 是确定的那当然是可以的,但是有多数情况 cacheKey 是动态的,例如 list 方法可能要分页,那么 pageNumber 就要参与 cacheKey 的生成。
关于第三点,也是可以的,只要正则能够满足清除缓存的要求就行。
另外,有位朋友前段时间对 CacheInterceptor 进行并发测试时偶尔报异常,后来经代码审核发现 CacheInterceptor.java 第 118 行有线程安全问题,这个问题 jfinal 1.9 中会改进,有用到的童鞋,可以改下代码,使用 new XxxxRender 的方法创建具体的 render,避免线程安全问题
谢谢,还没看源码实现,只看了表面。
3ks,还可以这样啊,原来已经有。回去测试了看看效果。
1.你直接使用@CacheName("jfinal_cache_blogList")
2.处理思路同上
3.我不说了