上幾篇博客博客大致說了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的基本應用,更深入的應用需要更多的學習,我們一起努力吧!!!