四、redis学习(案例)
效果如下
注意:必须要开启redis服务器端
数据库
CREATE DATABASE heima; -- 创建数据库
USE heima; -- 使用数据库
CREATE TABLE province( -- 创建表
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL );
-- 插入数据
INSERT INTO province VALUES(NULL,'北京');
INSERT INTO province VALUES(NULL,'上海');
INSERT INTO province VALUES(NULL,'广州');
INSERT INTO province VALUES(NULL,'陕西');
jar包
jedis.properties
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
js包
加入redis缓存
目录结构
HTML网页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>redis缓存+json</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$(function () {
//发送ajax请求,加载所有省份数据
$.get("provinceServlet",{},function (data) {
//json[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}] /*
1.获取select
2.遍历json数组
3.创建<option>
4.调用select的append追加option
*/
//1.获取select
var province=$("#province");
//2.遍历json数组
$(data).each(function () {
// 3.创建<option>
var option="<option id='"+this.id+"'>"+this.name+"</option>";
//4.调用select的append追加option
province.append(option);
});
});
});
</script>
</head>
<body>
<select id="province">
<option>---请选择省份---</option>
</select>
</body>
</html>
Servlet类
@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
1.调用service查询
2.序列化(写)list为json
3.响应结果
*/
// //1.调用service查询
// ProvinceService service=new ProvinceServiceImpl();
// List<Province> list = service.findAll();
// //2.序列化(写)list为json
// ObjectMapper mapper=new ObjectMapper();
// String json = mapper.writeValueAsString(list);
//1.调用service查询
ProvinceService service=new ProvinceServiceImpl();
String json = service.findAllJson(); //System.out.println("json"+json);
//json[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}] //3.响应结果
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);
}
}
Javabean
public class Province {
private int id;
private String name; public Province() {
} public Province(int id, String name) {
this.id = id;
this.name = name;
} @Override
public String toString() {
return "Province{" +
"id=" + id +
", name='" + name + '\'' +
'}';
} 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;
}
}
dao
public interface ProvinceDao {
public List<Province> findAll();
}
dao Impl
public class ProvinceDaoImpl implements ProvinceDao {
private JdbcTemplate template=new JdbcTemplate(JDBCUtil.getDataSource());
@Override
public List<Province> findAll() {
String sql="select * from province";
List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
return list;
}
}
service
public interface ProvinceService {
public List<Province> findAll();
//redis缓存
public String findAllJson();
}
sevice Impl(核心)
public class ProvinceServiceImpl implements ProvinceService {
private ProvinceDao provinceDao=new ProvinceDaoImpl();
@Override
public List<Province> findAll() {
return provinceDao.findAll();
} /*
使用redis缓存
*/
@Override
public String findAllJson() {
//1.先从redis中查询数据
//1.1获取redis客户端连接
Jedis jedis = JedisUtil.getJedis();
String province_json = jedis.get("province");
//2判断province是否为空
if (province_json==null||province_json.length()==0){
System.out.println("redis没有数据 --- 查询数据库");
//2.1province为空,也就是redis没有数据 --- 查询数据库
List<Province> ps = provinceDao.findAll();
//2.2将ps 序列化为json,也就是写
ObjectMapper mapper=new ObjectMapper();
try {
province_json = mapper.writeValueAsString(ps);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
//2.3 (不要忘记)将json数据存入到redis中
jedis.set("province",province_json);
//3.归还连接
jedis.close();
}else {
System.out.println("redis有数据 ---- 查询redis缓存");
//province不为空,也就是redis有数据 ---- 查询redis缓存
}
return province_json;
}
}
工具类
JDBCUtil
public class JDBCUtil {
private static DataSource ds;
static {
//读取配置文件
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties");
//创建Properties对象
Properties pro =new Properties();
try {
//获取关联
pro.load(is);
//2.初始化druid数据库连接池对象
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
} }
public static DataSource getDataSource(){
return ds;
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//释放资源
public void close(Connection conn, PreparedStatement ps){
if (ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//释放资源
public void close(Connection conn, PreparedStatement ps, ResultSet rs){
close(conn,ps);
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
JedisUtil
public class JedisUtil {
//工具类主要都是获取Jedis
private static JedisPool jedisPool;
static {
//读取配置文件
InputStream is = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro=new Properties();
//关联文件
try {
pro.load(is);
} catch (Exception e) {
e.printStackTrace();
}
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
jedisPool=new JedisPool(pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
druid.properties配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/heima?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password= # 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
jedis.properties配置文件
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
四、redis学习(案例)的更多相关文章
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- redis学习教程四《管理、备份、客户端连接》
redis学习教程四<管理.备份.客户端连接> 一:Redis服务器命令 Redis服务器命令 下表列出了与Redis服务器相关的一些基本命令. 序号 命令 说明 1 BGREWRITE ...
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- Spring Data Redis学习
本文是从为知笔记上复制过来的,懒得调整格式了,为知笔记版本是带格式的,内容也比这里全.点这里 为知笔记版本 Spring Data Redis 学习 Version 1.8.4.Release 前言 ...
- Redis学习十一:Redis的Java客户端Jedis
一.安装JDK tar -zxvf jdk-7u67-linux-i586.tar.gz vi /etc/profile 重启一次Centos 编码验证 二.安装eclipse 三.Jedis所需要的 ...
- Redis学习手册(目录)
为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
随机推荐
- 【python / mxnet / gluoncv / jupyter notebook】基于mxnet和gluoncv的图像分割
程序环境为高性能集群: CPU:Intel Xeon Gold 6140 Processor * 2(共36核心)内存:512GB RAMGPU:Tesla P100-PCIE-16GB * 2 In ...
- Cortex-M3 双堆栈指针(MSP&PSP)
[双堆栈指针(MSP&PSP)] Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个. 复位后处于线程模式特权级,默认使用MSP. 通过SP访问 ...
- 淘宝TAE平台定时任务包的部署步骤
淘宝TAE平台定时任务包的部署: 第一步:首先把自己的任务打包成一个jar包.使用maven打包的命令为:mvn clean install 第二步:把任务jar包依赖的jar包全部导出来.使用mav ...
- Zabbix - 配置服务器对第三方服务的监控
需求: 需要配置zabbix监控,使得zabbix服务器可以监控到另一台服务器上运行的第三方服务的状态,当状态异常时发送告警邮件. 限制:被监控的服务器不允许安装任意客户端,且该台服务器不能联通外网 ...
- npm install --save 和 npm install -d的区别
npm install -d 就是npm install --save-dev npm insatll -s 就是npm install --save 以前一直在纠结一个npm安装的包依赖管理的问题. ...
- JAVA VUser
JAVA VUser 一.java虚拟用户协议 java虚拟用户脚本主要有Java Vuser.Corba-Java.RMI-Java.EJB等类型.这些类型的虚拟用户脚本均可以用java语言来手工编 ...
- Linux LAMP源码安装
查看编译参数 # httpd cat /app/httpd24/build/config.nice # mysql cat /app/mysql/docs/INFO_BIN # php php -i ...
- 联想 ThinkPad 笔记本 Fn 键 关闭与启用方法
联想 ThinkPad 笔记本 Fn 键 关闭与启用方法 [最快捷的方式] 按 Fn + Esc 键,进行切换启用或者关闭 Fn 功能键 So easy!!! ^_^
- centos7安装VuePress
VuePress可以帮你快速建站,使用MarkDown语法生成静态html yum install -y gcc-c++ make curl -sL https://rpm.nodesource.co ...
- Centos7下yum安装kubernetes
一.前言 Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动态扩缩容等功能套件,目前centos yum源上 ...