jfinal + redis 缓存报错

存入数据时报错:

企业微信截图_15446028822796.png

如题:

1.在拦截器中进行缓存的逻辑处理和缓存存储等

image.png

2.将请求和数据分装到这个类中:

image.png

(代码来自CSDN)

评论区

千亦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 谢谢 老师儿 已经解决了

热门反馈

扫码入社