NutzCN Logo
问答 nutzboot想在启动的时候缓存一些表数据该如何操作
发布于 2425天前 作者 NullPointerException 1726 次浏览 复制 上一个帖子 下一个帖子
标签:

nutzboot想在启动的时候缓存一些表数据
想到使用jedis来将表数据缓存到Redis中去
在MainLauncher中调用service里的一个jedis.set()
jedis.set()貌似没插入进去相应的数据
另一个问题是,在其它地方获取Redis中的数据时报空指针jedis().get()

请问该如果把表数据缓存到Redis中?或者有什么别的方法呢?

20 回复

在MainLauncher.init方法加上@Aop("redis")

这个是调用jedis()必要条件之一

@wendal 在使用中,获取不到存储的数据

@Aop("redis")
public void init() {
......
ioc.get(Cached2RedisService.class).doInsert2Redis();

//存Redis
@IocBean(name="cached2RedisService")
public class Cached2RedisService {
......
    public void doInsert2Redis() {
        String cachedTableNames = conf.get("cachedTableNames");
        if (StringUtils.isNotEmpty(cachedTableNames)) {
            for (String tableName : cachedTableNames.split(",")) {
                List<Record> list = dao.query(tableName, Cnd.where("delFlag", "=", 0));
                if (list.size() > 0) {
                    ioc.get(Jedis.class).set(tableName, Json.toJson(list));
                }
            }
        }
    }

//使用
@IocBean(name="downStreamService")
public class DownStreamService {

    @Aop("redis")
    public MonitorStation getMonitorStationInfo(String mn) {
        String str = jedis().get("monitor_Station");
        ......

init被调用到了没?

@wendal 上面列的都可以被正常调用,就是jedis().get()取出来为null

这是啥?? ioc.get(Jedis.class)

应该走jedis()呢

@wendal 忽略那个上面那个错误,我已经修正了那个错误了,已更改为如下的语句,就是问题依旧!

jedis().set(tableName, Json.toJson(list));

是不是填的tableName的大小写错了

@wendal 图里的大小写居然是错误的,但是我改过来了,还是不行😂😂😂

set打断点,执行了, 到redis看看数据

那get等于null的时候,redis是否有数据

那就只能是key写错咯

在get之前,调用keys看看

@wendal 我去,还真的是key的错误,存到redis中的key,前面有一个空格
谢谢 wendal 的耐心解答

@wendal 提个建议,可以给帖子加上一个打已解决标签的功能吗,这样既可以关闭这个问题,也能让大家快速查找问题的解决方法

添加回复
请先登陆
回到顶部