javaWeb实例之使用Redis保存分类数据

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaWeb实例之使用Redis保存分类数据相关的知识,希望对你有一定的参考价值。

本例实际上是Redis在Javaweb上的应用。

而分类数据属于哪种一直几乎不会发生变化的数据,而每次刷新页面都需要重新从数据库中查询,耗费性能,因此使用redis将分类数据放到内存中,提高性能。

本项目核心代码就是CategoryServiceImpl.java

public class CategoryServiceImpl implements CategoryService {
    private CategoryDao categoryDao = new CategoryDaoImpl();

    @Override
    public List<Category> findAll() {
        //1.从redis中查询
        //1.1获取jedis客户端
        Jedis jedis = JedisUtil.getJedis();
        //1.2可使用sortedset排序查询
        //Set<String> categorys = jedis.zrange("category", 0, -1);
        //1.3查询sortedset中的分数(cid)和值(cname)
        Set<Tuple> categorys = jedis.zrangeWithScores("category", 0, -1);

        List<Category> cs = null;
        //2.判断查询的集合是否为空
        if (categorys == null || categorys.size() == 0) {
            System.out.println("从数据库查询....");
            //3.如果为空,需要从数据库查询,在将数据存入redis
            //3.1 从数据库查询
            cs = categoryDao.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中查询.....");

            //4.如果不为空,将set的数据存入list
            cs = new ArrayList<Category>();
            for (Tuple tuple : categorys) {
                Category category = new Category();
                category.setCname(tuple.getElement());
                category.setCid((int) tuple.getScore());
                cs.add(category);
            }
        }
        return cs;
    }
}

也只有在此处使用了redis。

本节项目的完整代码:GitHub的Demo

以上是关于javaWeb实例之使用Redis保存分类数据的主要内容,如果未能解决你的问题,请参考以下文章

带你玩转JavaWeb开发之六-mysql基本语法详解及实例

JAVAWEB学习笔记网上商城实战2:异步加载分类Redis缓存分类和显示商品

JavaWeb之redis&Jedis

JavaWeb开发之redis知识总结

JavaWeb之redis&Jedis

简介redis之主从复制