Ajax+redis实现下拉列表缓存优化用户体验【JAVAEE基础】

Jedis案例

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

注意:使用redis缓存一些不经常发生变化的数据。

  • 数据库的数据一旦发生改变,则需要更新缓存。
  • 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
  • 在service对应的增删改方法中,将redis数据删除。

分析: 图解
页面效果:
在这里插入图片描述

代码:
1.前台页面:
页面加载完成时使用ajax发送get请求,并接受返回来的省份数据(json)显示到下拉列表中。
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax & Redis</title>
    <script src="js/jquery-3.4.1.min.js"></script>
    <script>
        $(function () {
            $.get("provinceServlet",{},function (data) {
                //1.获取select下拉列表
                var select=$("#province");
                //2.遍历Json数组
                $(data).each(function () {
                    //3.创建<option>
                    var option="<option name='"+this.id+"'>"+this.name+"</option>"
                    //4.追加<option>
                    select.append(option);
                })


            })
        })
    </script>
</head>
<body>
    <select id="province">
        <option>---请选择省份---</option>
    </select>
</body>
</html>

2.前台Servlet
接受ajax的get请求—并调用service获取json数据------返回json

package com.chif.web.Servlet;

import ...

@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        //1.调用Service查询获取list集合
//        ProvinceService service=new ProvinceServiceImpl();
//        List<Province> list = service.findAll();
//        //2.序列化list为Json
//        ObjectMapper mapper=new ObjectMapper();
//        String json = mapper.writeValueAsString(list);
//
//        //3.响应结果
//        response.setContentType("application/json;charset=UTF-8");
//        response.getWriter().write(json);


        //1.调用Service查询获取Json字符串
        ProvinceService service=new ProvinceServiceImpl();
        String json = service.findAllJson();

        //2.响应结果
        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);
    }
}

3.Provinceservice实现类

  • 查询redis缓存
  • 如果没有缓存,查询数据库,转为json存入缓存
  • 返回json
package com.chif.service.impl;

import com.chif.dao.*;
import com.chif.entity.Province;
import com.chif.service.ProvinceService;
import com.chif.utils.JedisPoolUtils;
import com.fasterxml.jackson.*;
import redis.clients.jedis.Jedis;

import java.util.List;

public class ProvinceServiceImpl implements ProvinceService {

    private ProvinceDao dao=new ProvinceDaoImpl();

    /**
     * 查询省份信息list集合
     * @return
     */
    @Override
    public List<Province> findAll() {
        return dao.findAll();
    }


    /*
      1.查询redis缓存
      2.如果没有缓存,查询数据库,转为json存入缓存
     */
    @Override
    public String findAllJson() {
        Jedis jedis = JedisPoolUtils.getJedis();
        String province_json = jedis.get("province");
        if (province_json==null || province_json.length()==0){
            //redis中没有缓存
            System.out.println("redis中没有有缓存,查询数据库。。。");

            //查询数据库
            List<Province> list = dao.findAll();
            //list转为json字符串
            ObjectMapper mapper=new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(list);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            //存入redis缓存
            jedis.set("province",province_json);
        } else {
            //redis中有缓存
            System.out.println("redis中有缓存。。。");
        }

        return province_json;
    }
}

4.Provincedao实现类
查询mysql数据库返回list集合

package com.chif.dao.impl;

import com.chif.dao.ProvinceDao;
import com.chif.entity.Province;
import com.chif.utils.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class ProvinceDaoImpl implements ProvinceDao {

    private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<Province> findAll() {
        String sql="select * from province";
        //执行sql
        List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
        return list;
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值