综合案例-黑马旅游网_分类数据展示缓存优化

综合案例-黑马旅游网_分类数据展示缓存优化

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

图解分析

 

 代码实现

希望数据中存储的顺序是将来展示的顺序

categoryServiceImpl类

复制代码
package com.bai.service.impl;

import com.bai.dao.CategoryDao;
import com.bai.dao.impl.CategoryDaoImpl;
import com.bai.domain.Category;
import com.bai.service.categoryService;
import com.bai.util.JedisUtil;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class categoryServiceImpl implements categoryService {
    private CategoryDao categoryDao = new CategoryDaoImpl();

    @Override
    public List<Category> findAll() {
        //从redis中查询
        //获取jedis客户端
        Jedis jedis = JedisUtil.getJedis();
        //可使用sortedset排序查询
        Set<String> categorys = jedis.zrange("category", 0, -1);
        List<Category> cs=null;
        //判断查询的集合是否为空
        if (categorys == null || categorys.size()==0){
            System.out.println("从数据库查询数据....");
            //如果为空 需要从数据库查询 在将数据存入redis
            //从数据库查询
            cs=categoryDao.findAll();
            //将集合数据存储到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查询数据....");
            //如果不为空 将set的数据存入list
            cs = new ArrayList<Category>();
            for (String name : categorys) {
                Category category = new Category();
                category.setCname(name);
                cs.add(category);
            }


        }


        return categoryDao.findAll();
    }
}
复制代码

运行结果

 

 redis缓存

posted @   baimingze  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示