分类数据显示功能_缓存优化
问题:如何使用redis按照分类数据的id进行排序存储*数据库表有cid和cname两个字段
1.Service层代码如下:
public List<Category> findAll() {
//1.从redis中查询
Jedis jedis = JedisUtil.getJedis();
//可以使用sortedset排序查询
//查询sortedset中的分数(cid)和(cname)
Set<Tuple> travel_category = jedis.zrangeWithScores("travel_category", 0, -1);
List<Category> all = null;
//2.判断查询的集合是否为空
if (travel_category == null || travel_category.size() == 0) {
//从数据库中查询
//3.如果为空是第一次查询,需从数据库查询,并将查询结果放入redis中
all = categoryDao.findAll();
for (Category category : all) {
//将集合数据存储到redis
jedis.zadd("travel_category", category.getCid(), category.getCname());
}
} else {
//从缓存中查询
//4.如果不为空,将set的数据存入list
all = new ArrayList<Category>();
for (Tuple tuple : travel_category) {
Category category = new Category();
category.setCname(tuple.getElement());//设置cname
category.setCid((int) tuple.getScore());//设置cid
all.add(category);
}
}
return all;
}
2.JedisUtil:
**
* Jedis工具类
*/
public final class JedisUtil {
private static JedisPool jedisPool;
static {
//读取配置文件
InputStream is = JedisPool.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis() {
return jedisPool.getResource();
}
/**
* 关闭Jedis
*/
public static void close(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}
3.jedis.properties
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10