用redis获取分栏条数据,正常运行并正常展示,刷新也正常。隔了一段时间,刷新页面,分栏条数据展示全部消失了?!!重新运行项目,数据恢复正常。
并未提示任何错误信息,就是没展示数据。
public List findAll() {
//1.从redis中查询
//1.1获取jedis客户端
Jedis jedis = JedisUtil.getJedis();
//1.2可使用sortedset排序查询
//Set categories = jedis.zrange("category", 0, -1);
//1.3查询sortedset中的分数(cid)和值(cname)
Set categories = jedis.zrangeWithScores("category", 0, -1);
//zrangeByScore("cate", 2, 3)返回有序集合中指定分数区间的成员列表。
//Set cate = jedis.zrangeByScore("cate", 2, 3);
List 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();
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?
我重新运行项目,它便正常展示了,但不知道过了多久,它又失常了,想起redis缓存是有存活时间的,于是我怀疑是redis 缓存被清除了,但用redis的客户端查询keys * ,数据还在的,而且如果不在,不应该是从数据库重新获取数据吗?所以还是没找到它的原因,希望有人帮忙解疑一下,谢谢了!
不再打印数据从哪获取,打断点看了么
try catch一下看看是不是获取jedis报错了
有可能是报错是了
可以else先去掉 反复执行,看是不是有问题