分类数据展示

博客探讨了如何利用Redis缓存分类数据,以减轻每次页面加载时对数据库的频繁请求,从而降低数据库压力。这种方法适用于数据不常变动的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

category
分类的数据在每一次页面加载后都会重新请求数据库来加载,对数据库的压力比较大,而且分类的数据不会经常产生变化,所有可以使用redis来缓存这个数据。

在这里插入图片描述

@Override
    public List<Category> findAll() {


        //每一次加载首页,都有从数据库去读取分类的信息
        //缺点:服务器压力大
        //用户体验差(等待页面整个加载完)
        //改进:使用redis技术
        /***
         * 1.应该从JedisUtils获取redis的客户端的对象:Jedis
         */
        Jedis jedis = JedisUtil.getJedis();

        //2.获取到客户端对象,操作redis数据库
        //应该先判断redis是否存在一个key名字"category"的信息范围(Set集合)
       // zrange key 0 -1
        //查询当前key中记录的所有信息   //zadd key field  value
       // Set<String> categorys = jedis.zrange("category", 0, -1);

        //改进:获取分类id
        Set<Tuple> categorys = jedis.zrangeWithScores("category",0,-1) ;

        //reids 数据结构:sortedset

        //声明List<Category>集合对象
        List<Category> list = null ;
        //3.判断当前redis是否存在categorys集合数据
        if(categorys==null || categorys.size()==0){
            System.out.println("从数据库中获取分类信息...");
            //调用CategoryDao中查询所有分类信息
            list = categoryDao.findAll() ; //第一次从数据库如果查询到了,将信息直接存储到redis中
            //遍历集合,获取每一个Category对象
            for(int i = 0 ; i <list.size() ; i++){
                //将当前cid和cname存储到redis中
                //查询旅游分类的value

                jedis.zadd("category",list.get(i).getCid(),list.get(i).getCname()) ;
            }

        }else{
            //不为空,将Set<String>---->List<Category>
            System.out.println("从redis数据库中获取分类信息....");
            //创建List<Category>对象
            list = new ArrayList<Category>() ;
            //创建Category对象
            /*Category category = new Category() ;
            for(String name:categorys){
//                    category.setCid(category.getCid()); //0
                    category.setCname(name);
                    list.add(category) ;
            }*/

          ;
            for(Tuple tuple:categorys){
                Category category = new Category() ;
                //Tuple :getElement():获取成员信息(分类名称)
                //获取score(对应的分类id)
                category.setCname(tuple.getElement());
                category.setCid((int)tuple.getScore());
                //将分类的实体对象添加到List集合
                list.add(category) ;
            }


        }

//        return categoryDao.findAll();

        return list ;
    }

前台代码

   //页面载入事件
    $(function () {
        //直接发送一个异步get提交
        $.get("user/findUser",{},function (data) {
            //接收服务器响应过来的User的姓名{uid:xx,username:xx,password:xx,name:'张三'}
            var  msg = "欢迎回来,"+data.name ;
            $("#span_username").html(msg) ;
        }) ;

        //发送ajax,加载index.html的时候,应该从后台查询数据库获取分类信息
        $.get("category/findAll",{},function (data) {
            //data:list集合
            var lis = "" ;
            lis += ' <li class="nav-active"><a href="index.html">首页</a></li>' ;
            // <li><a href="route_list.html">门票</a></li>
            //将当前的data遍历
            for(var i = 0 ; i < data.length;i++){
                //点击分类信息的时候,执行跳转到列表页面,应该传递分类id(cid)
                lis+='<li><a href="route_list.html?cid='+data[i].cid+'">'+data[i].cname+'</a></li>' ;
            }
            //<li><a href="favoriterank.html">收藏排行榜</a></li>
            lis += '<li><a href="favoriterank.html">收藏排行榜</a></li>' ;

            //将lis的信息作为ul标签的子标签(文本内容)
            $("#category").html(lis) ;

        }) ;
    }) ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值