问题遇到的现象和发生背景
用redis获取分栏条数据,正常运行并正常展示,刷新也正常。隔了一段时间,刷新页面,分栏条数据展示全部消失了?!!重新运行项目,数据恢复正常。
遇到的现象和发生背景,请写出第一个错误信息
并未提示任何错误信息,就是没展示数据。
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
public List<Category> findAll() {
//1.从redis中查询
//1.1获取jedis客户端
Jedis jedis = JedisUtil.getJedis();
//1.2可使用sortedset排序查询
//Set<String> categories = jedis.zrange("category", 0, -1);
//1.3查询sortedset中的分数(cid)和值(cname)
Set<Tuple> categories = jedis.zrangeWithScores("category", 0, -1);
//zrangeByScore("cate", 2, 3)返回有序集合中指定分数区间的成员列表。
//Set<String> cate = jedis.zrangeByScore("cate", 2, 3);
List<Category> cs = null;
//2.判断查询的集合是否为空
if(categories == null || categories.size() == 0) {
System.out.println("从数据库查询......");
//redis还没有category数据,需要从数据库查询,再将数据存入redis
//3.1从数据库查询
cs = dao.findAll();
//3.2 将集合数据存储到redis中的category的key
for(int i = 0; i< cs.size(); i++) {
jedis.zadd("category",cs.get(i).getCid(),cs.get(i).getCname());
}
} else {
System.out.println("从redis查询......");
System.out.println(categories);
//4.如果不为空,将set的数据存入list
cs = new ArrayList<Category>();
for(Tuple tuple : categories) {
Category category = new Category();
category.setCname(tuple.getElement());
category.setCid((int)tuple.getScore());
cs.add(category);
}
}
return cs;
}
运行结果及详细报错内容
在idea控制台上也打印了查找分栏条的方法名(即该方法被运行了),但却不再打印数据从哪获取(无论是从数据库,还是redis获取,都会打印渠道),并且没有打印数据(即这些本该打印的都没打印),为啥呢?why?
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我重新运行项目,它便正常展示了,但不知道过了多久,它又失常了,想起redis缓存是有存活时间的,于是我怀疑是redis 缓存被清除了,但用redis的客户端查询keys * ,数据还在的,而且如果不在,不应该是从数据库重新获取数据吗?所以还是没找到它的原因,希望有人帮忙解疑一下,谢谢了!