四、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(集合). ...
随机推荐
- HearthBuddy Plugin编写遇到的问题
错误1 赋值问题 貌似编译器版本有点低,无法识别C#的高级语法糖 属性的初始值,必须是public bool IsEnabled { get{return true;} } 不能写成public bo ...
- DP&图论 DAY 6 上午
DP&图论 DAY 6 上午 双连通分量 从u-->v不存在必经边,点 点双连通分量 边双连通分量 点/边双连通分量缩点之后变成一个树 找连通块的时候不越过割点或者桥 P3469 [ ...
- [转]Cookie详解
从事 Web 开发已有近17个月:在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感-差不多是了解一二,然而又非真切的明晰:这就使得再用的时候,总要去再搜索一番:如此颇为难受,倒不 ...
- brew update 很慢
brew使用国内镜像源 这里用中科大的,另外还有清华的可用 # 步骤一 cd $(brew --repo) git remote set-url origin https://mirrors.tuna ...
- Mybaits-Maven项目之逆向工程(代码自动生成)
1.添加maven插件,让maven环境支持mybatis-generator组件 在pom.xml里面添加如下代码: <project xmlns="http://maven.apa ...
- Python学习笔记:Unittest框架了解
Unittest单元测试框架不仅可以适用于单元测试,还可以适用于自动化测试用来的开发与执行,该测试框架可执行测试用例,并提供丰富的断言方法,最终生成测试报告. 一.Unittest常用方法 1.Tes ...
- python 学习笔记(二):为元组的每个元素命名,提高程序的可读性
在程序中有些数据为固定格式时,即字段数量确定.字段位置顺序确定不变,我们就可以用元组来储存.使用元组的优势是储存空间很小,访问速度也很快.如下代码对每个学生信息用元组来表示: # ('Jim', 16 ...
- phpstrom--------config php interpreter
phpstrom是一款比较好用的php代码编辑器,使用phpstrom进行代码编辑时我可能会需要看一下在网页上的实际效果,但是PHPstrom本身只是一款编辑器,不具备运行功能,我们需要自己安装一个服 ...
- Tomcat服务org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: Java heap space
一个运行了很久的项目,最近忽然报错:OOM( java.lang.OutOfMemoryError: Java heap space),异常如下 org.springframework.web.uti ...
- linux常用、常见错误
1.md5加密使用 oppnssl md5 加密字符串的方法 [root@lab3 ~]# openssl //在终端中输入openssl后回车. OpenSSL> md5 //输入md5后回车 ...