Redis 案例

一、案例需求

  1. 提供index.html页面,页面中有一个省份 下拉列表
  2. 当 页面加载完成后 发送ajax请求,加载所有省份
    在这里插入图片描述
    需要注意: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 = "<option name='" + this.id + "'>" + this.name + "</option>";
                    //    调用 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);
    }
}

在这里插入图片描述
这里同样使用了三层架构,界面层,业务逻辑层,数据访问层。

业务逻辑层 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;
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值