分类数据显示功能_缓存优化

该篇博客介绍了如何利用Redis的SortedSet进行分类数据的ID排序存储,以实现缓存优化。首先尝试从Redis中查询,若无数据则从数据库获取并存入Redis;反之,直接从SortedSet中构建结果列表返回。博客中还展示了Jedis工具类的使用以及配置文件的内容。
摘要由CSDN通过智能技术生成

分类数据显示功能_缓存优化

问题:如何使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值