【Redis高手修炼之路】案例——异步加载所有联系人
- 💂 个人主页: 陶然同学
- 🤟 版权: 本文由【陶然同学】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
- 💅 想寻找共同成长的小伙伴,请点击【Java全栈开发社区】
目录
1.案例需求与效果
2.项目分析
3.准备数据
3.1复制原型目录web目录下
3.2表数据
3.3导入的包
3.4实体类
3.5工具类和配置文件
3.6Jedis工具类和配置文件
4.项目结构
5.源代码
1.案例需求与效果
- 案例需求与效果:
访问index.html页面,点击页面上的加载所有联系人按钮,才使用ajax请求异步加载所有联系人列表。用户第一次访问从数据库中获取数据,以后都从redis缓存里面获取。
- 执行效果

服务器控制器信息

MySQL中的数据

Redis中数据

2.项目分析

3.准备数据
3.1复制原型目录web目录下

3.2表数据
-- 联系人
create table contact (id int primary key auto_increment,name varchar(20) not null, -- 姓名phone varchar(20), -- 电话email varchar(50), -- 邮箱birthday date -- 生日
);insert into contact (name,phone,email,birthday) values
('孙悟空','13423431234','wukong@itcast.cn', '1993-11-23'),
('猪八戒','13525678909','bajie@itcast.cn', '1953-05-02'),
('白骨精','18642343123','xiaobai@itcast.cn', '1943-03-12');select * from contact;
3.3导入的包
3.4实体类
package com.itheima.entity;import java.sql.Date;/*** 联系人实体类*/
public class Contact {private int id; //编号private String name; //姓名private String phone; //电话private String email; //邮箱private Date birthday; //生日@Overridepublic String toString() {return "Contact{" +"id=" + id +", name='" + name + '\'' +", phone='" + phone + '\'' +", email='" + email + '\'' +", birthday=" + birthday +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}
}
3.5工具类和配置文件
package com.itheima.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;/**会话工厂工具类*/
public class SessionFactoryUtils {private static SqlSessionFactory factory;static {//实例化工厂建造类SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//读取核心配置文件try (InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml")) {//创建工厂对象factory = builder.build(inputStream);} catch (IOException e) {e.printStackTrace();}}/**得到会话对象@return 会话对象*/public static SqlSession getSession() {return factory.openSession();}/**得到工厂对象@return 会话工厂对象*/public static SqlSessionFactory getSqlSessionFactory() {return factory;}
}
3.6Jedis工具类和配置文件
jedis.properties
# 主机名
host=localhost
# 端口号
port=6379
# 最大连接数
maxTotal=30
# 最长等待时间
maxWaitMillis=3000
JedisUtils.java
package com.itheima.utils;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;import java.util.ResourceBundle;/*** 创建Jedis工具类*/
public class JedisUtils {private static JedisPool pool;static {//读取src下的配置文件,得到ResourceBundle对象ResourceBundle bundle = ResourceBundle.getBundle("jedis");//得到所有的属性并且赋值String host = bundle.getString("host");//以下属性要转成整数类型int port = Integer.parseInt(bundle.getString("port"));int maxTotal = Integer.parseInt(bundle.getString("maxTotal"));int maxWaitMillis = Integer.parseInt(bundle.getString("maxWaitMillis"));//创建配置对象JedisPoolConfig config = new JedisPoolConfig();config.setMaxWaitMillis(maxWaitMillis);config.setMaxTotal(maxTotal);//创建连接池对象pool = new JedisPool(config, host, port);}/*** 从连接池中得到Jedis连接对象*/public static Jedis getJedis() {return pool.getResource();}
}
4.项目结构

5.源代码
数据访问层
package com.itheima.dao;import com.itheima.entity.Contact;
import org.apache.ibatis.annotations.Select;import java.util.List;/**联系人数据访问层*/
public interface ContactDao {/**查询所有联系人*/@Select("select * from contact")List findAll();}
package com.itheima.dao.impl;import com.itheima.dao.ContactDao;
import com.itheima.entity.Contact;
import com.itheima.utils.SessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;import java.util.List;/**联系人数据访问层*/
public class ContactDaoImpl implements ContactDao {private SqlSessionFactory factory = SessionFactoryUtils.getSqlSessionFactory();/**查询所有联系人*/public List findAll() {SqlSession session = factory.openSession();ContactDao contactDao = session.getMapper(ContactDao.class);List contacts = contactDao.findAll();session.close();return contacts;}}
业务层
package com.itheima.service;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.dao.ContactDao;
import com.itheima.dao.impl.ContactDaoImpl;
import com.itheima.entity.Contact;
import com.itheima.utils.JedisUtils;
import redis.clients.jedis.Jedis;import java.util.List;/**业务层 */
public class ContactService {private ContactDao contactDao = new ContactDaoImpl();/**读取联系人的JSON数据*/public String findAllContacts() {//1. 从redis中获取联系人列表Jedis jedis = JedisUtils.getJedis();String contacts = jedis.get("contacts");//2. 判断数据是否为空,如果为空则调用DAO去MySQL找联系人,找到后转成JSON对象写入到redis中if (contacts == null) {System.out.println("访问MySQL");List list = contactDao.findAll();//转成JSON对象try {contacts = new ObjectMapper().writeValueAsString(list);} catch (JsonProcessingException e) {e.printStackTrace();}//写入到redis中jedis.set("contacts", contacts);} else {System.out.println("访问Redis");}//3.如果不为空,则从redis获取json数据。return contacts;}
}
Servlet
package com.itheima.servlet;import com.itheima.service.ContactService;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(name = "ContactServlet",urlPatterns = "/contact")
public class ContactServlet extends HttpServlet {private ContactService contactService = new ContactService();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//指定为json类型response.setContentType("text/json;charset=utf-8");PrintWriter out = response.getWriter();//调用业务类方法,得到所有联系人String contacts = contactService.findAllContacts();out.print(contacts);}
}
页面
通讯录管理
编号 姓名 电话 邮箱 生日

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
