redis实现缓存优化的例子

文章目录

  • 需求
  • 效果
  • 步骤
    • 环境搭建
    • 操作mySql数据库
    • redis缓存优化

需求

  1. 提供index.html页面,页面中有一个省份 下拉列表
  2. 当 页面加载完成后 发送ajax请求,从数据库中加载所有省份。

效果

(1)第一次访问index页面时,由于redis中没有数据,需要从数据库中获取,控制台显示:
在这里插入图片描述
index页面下拉从数据库中加载了所有省份:
redis实现缓存优化的例子_第1张图片
(2)再次访问index页面时,控制台显示:
在这里插入图片描述
index页面显示所有省份

步骤

环境搭建

(1)新建工程,导入jar包,并设为add as library…
(2)新建数据库,创建省份数据表;

CREATE DATABASE province; -- 创建数据库
USE province; 			   -- 使用数据库
CREATE TABLE provinceTable(   -- 创建表
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20) NOT NULL
	
);
-- 插入数据
INSERT INTO provinceTable VALUES(NULL,'山西');
INSERT INTO provinceTable VALUES(NULL,'上海');
INSERT INTO provinceTable VALUES(NULL,'广州');
INSERT INTO provinceTable VALUES(NULL,'北京');

(3)环境目录如下:
redis实现缓存优化的例子_第2张图片

操作mySql数据库

ProvinceDaoImpl 代码:

package com.li.dao.impl;

import com.li.dao.ProvinceDao;
import com.li.domain.Province;
import com.li.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.util.List;

public class ProvinceDaoImpl implements ProvinceDao {
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<Province> provinceFindAll() {
        String sql = "select * from provinceTable";
        List<Province> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
        return list;
    }
}

redis缓存优化

ProvinceServiceImpl代码:

package com.li.service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.li.dao.ProvinceDao;
import com.li.dao.impl.ProvinceDaoImpl;
import com.li.domain.Province;
import com.li.jedis.JedisUtils;
import com.li.service.ProvinceService;
import redis.clients.jedis.Jedis;

import java.util.List;

public class ProvinceServiceimpl implements ProvinceService {
    //声明dao
   private ProvinceDao provinceDao = new ProvinceDaoImpl();
    @Override
    public List<Province> provinceFindAll() {
        return provinceDao.provinceFindAll();
    }

    @Override
    public String provinceFindAllJson() {
        Jedis jedis = JedisUtils.getJedis();
        //查询键为“province”的值
        String province = jedis.get("province");
        //没有省份,添加
        if(province==null || province.length()==0){
            System.out.println("redis没有数据,从数据库中查询");
            List<Province> list = this.provinceFindAll();
            //序列化
            ObjectMapper objectMapper = new ObjectMapper();
            try {
                province  = objectMapper.writeValueAsString(list);
                jedis.set("province",province);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }finally {
                jedis.close();
            }
        }else{
            System.out.println("redis有数据");
        }
        return province;
    }
}

其他部分代码省略…

你可能感兴趣的:(redis实现缓存优化的例子)