黑馬旅遊網(三)Redis簡單使用

上幾篇博客博客大致說了Reids的基本用法,那麼這篇博客就來實際使用一下Redis。

Redis的主要使用流程如下:

1、首先從Redis中查數據

2、若查到數據,則直接返回,否則從數據庫中查數據,將查到的數據放入緩存中。

需求如下:

處理方式:

1、首先寫好Dao層查詢categories的代碼:

package dao.impl;

import dao.CategoryDao;
import domain.Category;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import utils.JDBCUtils;

import java.util.List;

public class CategoryDaoImpl implements CategoryDao {
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
    @Override
    public List<Category> findAll() {
        //注意裏面的方法
        String sql = "select * from tab_category";
        List<Category> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Category>(Category.class));
        return query;
    }
}

2、再service中使用Redis做緩存

(再沒有使用Redis之前,我還以爲要在Dao裏面做緩存呢)

package service.impl;

import dao.CategoryDao;
import dao.impl.CategoryDaoImpl;
import domain.Category;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;
import service.CategoryService;
import utils.JedisUtil;

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做緩存
        //1首先子啊redis中查詢是否有數據
        //如果沒有數據  則從數據庫中查詢並放入緩存中
        Jedis jedis = JedisUtil.getJedis();
        //利用jedis的排序查詢  從0道-1  是指查詢全部
        //這種方式只能查詢值  不能查詢值和對應的score
        //Set<String> category = jedis.zrange("category", 0, -1);
        Set<Tuple> category = jedis.zrangeWithScores("category", 0, -1);
        List<Category> cs = null;
        if (category==null||category.size()==0){
            //如果緩存中不存在category  就到數據庫中去查找
            cs= categoryDao.findAll();
            for (Category c : cs) {
                jedis.zadd("category", c.getCid(),c.getCname());
            }
        }else {
            //如果緩存中存在數據 此時需要把緩存中查的數據類型轉換成list
            // 因爲返回的數據格式是list
            cs = new ArrayList<Category>();
            for (Tuple tuple : category) {
                Category cate = new Category();
                cate.setCname(tuple.getElement());
                cate.setCid((int) tuple.getScore());
                cs.add(cate);
            }
        }
        return cs;//返回的數據類型是一個泛型爲category的list列表
    }
}

 

 下面這幅圖是Redis可視化工具中顯示的數據:

 這樣就算完成Redis的基本應用,更深入的應用需要更多的學習,我們一起努力吧!!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章