Redis 案例

文章目录

    • 一、案例需求
    • 二、代码

一、案例需求

  1. 提供index.html页面,页面中有一个省份 下拉列表
  2. 当 页面加载完成后 发送ajax请求,加载所有省份
    Redis 案例_第1张图片
    需要注意:redis 常用于缓存一些不经常发生变化的数据
* 数据库的数据一旦发生改变,则需要更新缓存。
* 数据库的表执行增删改的相关操作,需要将redis缓存数据情况,再次存入
* 在service对应的增删改方法中,将redis数据删除。

二、代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Redis</title>
    <script src="js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
            //发送 Ajax 请求,加载所有省份数据
            $.get("provinceServlet", {}, function (data) {
                //获取 select
                var province = $("#province");
                //遍历 json 数组
                $(data).each(function () {
                    //    创建 option
                    var option = " + this.name + "";
                    //    调用 select 的 append 追加 option
                    province.append(option)
                })
            })
        })
    </script>
</head>
<body>
<select id="province">
    <option>--请选择省份--</option>
</select>
</body>
</html>

ProvinceServlet.java
当首次访问时,不存在缓存数据,所以需要调用数据库查询,然后将查询结果存入 redis,下次查询则直接调用 redis 缓存

@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//        调用 service 查询
        ProvinceServiceImpl service = new ProvinceServiceImpl();
        String json = service.findAllJson();

//        响应结果
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

Redis 案例_第2张图片
这里同样使用了三层架构,界面层,业务逻辑层,数据访问层。

业务逻辑层 ProvinceDaoImpl.java

public class ProvinceServiceImpl implements ProvinceService {
    //    声明 dao,直接处理数据库的操作
    ProvinceDao dao = new ProvinceDaoImpl();

    /*
    使用 redis 缓存
     */
    @Override
    public String findAllJson() {
//        先从 redis 中查询数据
//        获取 redis 客户端连接
        Jedis jedis = JedisPoolUtils.getJedis();
        String province = jedis.get("province");
//        判断 province 数据是否为 null
        if (province == null || province.length() == 0) {
//            redis 中没有数据
            System.out.println("redis 中没有数据,查询数据库。。。");
            List<Province> list = dao.findAll();
//            将 list 序列化为 json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province = mapper.writeValueAsString(list);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
//            将 json 数据存入 redis
            jedis.set("province", province);
//            归还连接
            jedis.close();
        } else {
            System.out.println("redis 中有数据,查询缓存。。。");
        }
        return province;
    }
}

你可能感兴趣的:(Redis,学习笔记,redis,java)