首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
jfinal + redis 缓存报错
千亦Zz
2018-12-12 16:25
存入数据时报错:
如题:
1.在拦截器中进行缓存的逻辑处理和缓存存储等
2.将请求和数据分装到这个类中:
(代码来自CSDN)
项目:
JFinal
评论区
千亦Zz
2018-12-12 16:27
3.当controller中使用 render(页面)渲染数据时,缓存正常使用,使用renderJson时,数据保存到redis是报上边的错。
回复
千亦Zz
2018-12-12 16:27
ps:代码来自某论坛(花了五积分)。
回复
千亦Zz
2018-12-12 16:29
package com.sview.web.redis.utils;
import com.jfinal.plugin.redis.Cache;
import com.jfinal.plugin.redis.Redis;
import com.sview.web.redis.bean.RedisCacheAttrBean;
/**
*
* @category App层使用的Redis缓存工具类
*
@author
liuy
*/
public class RedisAppUtils {
public static Cache cache = Redis.use("sview_redis");
public static final int EXPIRY_SECONDS = 60*2;
public static final String HEAD = "key_";// 键值前缀,可能会用于搜索
/**
* Redis好像不支持带/,需要把url地址的 "/" 转化成 "_"
* @category admin/index 内容缓存
*
@author
liuy
*/
public static void setJsonToCache(Object object, String actionKey) {
setRedisExpiry(HEAD + actionKey.replaceAll("/", "_"), object);
}
public static void setAttrToCache(RedisCacheAttrBean request, String actionKey) {
setRedisExpiry(HEAD + actionKey.replaceAll("/", "_"), request);
}
public static RedisCacheAttrBean getAdminIndex(String actionKey) {
return cache.get(HEAD + actionKey.replaceAll("/", "_"));
}
public static Object getObjectByKey(String actionKey) {
return cache.get(HEAD + actionKey.replaceAll("/", "_"));
}
/**
*
* @category 同一配置过期时间为120秒
*
@author
liuy
*/
private static void setRedisExpiry(String key, Object object) {
cache.setex(key, EXPIRY_SECONDS, object);
}
}
存数据
回复
oschina
2018-12-12 17:34
错误不是提示很清晰吗 实体类需要序列化的
回复
千亦Zz
2018-12-12 18:14
public class RedisCacheAttrBean implements Serializable 在这里序列化了啊
@oschina
回复
JFinal
2018-12-13 21:42
org.apache.catalina.session.StandardSessionFacade 这个类不能被序列化,所以保存到 reids 时抛出这个异常
将这个对象从你要保存的数据中去除即可
注意:上面这个不能保存的类,并非你直接保存才报错,通常是间接保存出问题的多
什么叫间接保存,假定你有一个对象叫 Aaa, 还有一个对象叫 Bbb, 你 Aaa 持有了 Bbb 这相对象,这里你保存 Aaa 的时候, Bbb 会被间接保存
回复
千亦Zz
2018-12-14 09:30
@JFinal
谢谢 老师儿 已经解决了
回复
发送
我要反馈
热门反馈
扫码入社