1. Java访问redis
添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
Java连接 redis
public class Demo1 {
public static void main(String[] args) {
Jedis jedis=new Jedis("122.**.249.***", 6379);
jedis.auth("***");
//校验redis服务正常,然后通过jedis连接服务正常
System.out.println(jedis.ping());
jedis.select(0);//切换数据库
}
}
Java操作redis
创建一个实体类
package com.bk201;
/**
* @author bk201
* @site www.fellingss.com
* @company
* @create 2019-11-13 20:04
*/
public class User {
private String uanem;
private String usex;
private String addr;
private String code;
public User(String uanem, String usex, String addr, String code) {
this.uanem = uanem;
this.usex = usex;
this.addr = addr;
this.code = code;
}
public User() {
}
public String getUanem() {
return uanem;
}
public void setUanem(String uanem) {
this.uanem = uanem;
}
public String getUsex() {
return usex;
}
public void setUsex(String usex) {
this.usex = usex;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
示例代码
package com.bk201;
import redis.clients.jedis.Jedis;
/**
* @author bk201
* @site www.fellingss.com
* @company
* @create 2019-11-13 19:41
*/
public class Demo1 {
public static void main(String[] args) {
Jedis jedis=new Jedis("122.**.**.**", 6379);
jedis.auth("***");
//校验redis服务正常,然后通过jedis连接服务正常
// System.out.println(jedis.ping());
// jedis.close();
//操作string
// jedis.set("sname","zsf");
// System.out.println(jedis.get("sname"));
// 操作hash
//所有的值都在user
// User user=new User("ww","牛逼","湖南","360");
// for (Field field : user.getClass().getDeclaredFields()) {
// field.setAccessible(true);
// try {
// System.out.println(field.getName() + "..." + field.get(user).toString());
// jedis.hset("user",field.getName(),field.get(user).toString());
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// }
// }
//一次娶一个
// System.out.println(jedis.hget("user", "usex"));
// 一次娶多个
// Map<String ,String> user=jedis.hgetAll("user");
// for (Map.Entry<String, String> entry : user.entrySet()) {
// System.out.println(entry.getKey() + ":" + entry.getValue());
//
// }
//操作list
jedis.lpush("hobby","a","b","c","d","e","f","g");
System.out.println(jedis.lpop("hobby"));
// left/reght
jedis.rpop("hoopy");
jedis.lpop("hobby");
// jedis.hset("user","uname","lisi");
// jedis.hset("user","usex","n");
// jedis.hset("user","uage","6");
}
}
redis项目应用
首页第一次是读取数据库,后面读取缓存(在没有增删改的情况)
先导入依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
BookListServler.java
package com.bk201;
import redis.clients.jedis.Jedis;
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;
/**
* @author bk201
* @site www.fellingss.com
* @company
* @create 2019-11-15 10:07
*/
@WebServlet("/list")
public class BookListServler extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Jedis jedis =new Jedis("1**.**.**.***",6379);
jedis.auth("*****");
// 字符串bookList存放的是,json数据字符串 List<Book>-->json
// 如果需要通过json数组串做jsp页面展示的话,需要将json数据字符串-->List<Book> jackSon
String bookList = jedis.get("bookList");
if(null == bookList || "".equals(bookList)){
// 此时意味着第一次查询,那么需要走数据库mysql
System.out.println("先走数据库做书籍列表查询。。。");
String list = "从mysql数据库中查询出十条数据,再转成json串。。";
jedis.set("bookList",list);
req.setAttribute("jspList","数据来源于mysql"+jedis.get("bookList"));
}else{
// 意味着不是第一次查询,那么就可以数据返回了
req.setAttribute("jspList","数据来源于redis:"+bookList);
}
req.getRequestDispatcher("bookList.jsp").forward(req,resp);
}
}
bookList.jsp
<%--
Created by IntelliJ IDEA.
User: Felling
Date: 2019/11/15
Time: 19:52
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>书籍列表</title>
</head>
<body>
书籍列表展示页数据:${jspList}
</body>
</html>
然后部署一下:
运行:
然后把redis的值清除掉之后:
增删改的时候,要顺带更新缓存,下一次再次访问首页要保证redis中数据跟mysql数据是一致
在自定义MVC框架使用redis缓存(增,删,改,查)
package com.bk201.web;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bk201.dao.BookDao;
import com.bk201.entity.Book;
import com.bk201.framework.ActionSupport;
import com.bk201.framework.ModelDriver;
import com.bk201.util.PageBean;
import com.bk201.util.StringUtils;
import redis.clients.jedis.Jedis;
public class BookAction extends ActionSupport implements ModelDriver<Book> {
private Book book = new Book();
private BookDao bookDao = new BookDao();
private static final String HOST = "***.**.***.**";
private static final int PORT = 6379;
private static Jedis jedis;
static {
jedis = new Jedis(HOST, PORT);
jedis.auth("*****");
}
public String list(HttpServletRequest req, HttpServletResponse resp) {
PageBean pageBean = new PageBean();
pageBean.setRequest(req);
try {
// 获取redis中 key :bookList 对应的value值
String bookList = jedis.get("bookList");
// 第一次查询走数据库
if(StringUtils.isBlank(bookList)) {
List<Book> list = this.bookDao.list(book, pageBean);
System.out.println("-----第一次查询走的数据库-------");
// 把从数据库查询的数据转换成josn格式存入 redis String zhong
String bookJosn = JSON.toJSONString(list);
jedis.set("bookList",bookJosn);
req.setAttribute("bookList", list);
}else {
// 第二次查询走redis
System.out.println("-----第二次查询走redis-------");
req.setAttribute("bookList",JSON.parse(bookList));
}
req.setAttribute("pagebean", pageBean);
} catch (Exception e) {
e.printStackTrace();
}finally {
jedis.close();
}
return "list";
}
/**
* 跳转新增修改页面(新增修改是同一个)
*
* @param req
* @param resp
* @return
* @throws Exception
*/
public String preSave(HttpServletRequest req, HttpServletResponse resp) {
if (book.getBid() != 0) {
try {
Book b = this.bookDao.list(book, null).get(0);
req.setAttribute("book", b);
} catch (Exception e) {
e.printStackTrace();
}
}
return "edit";
}
/**
* 新增
*
* @param req
* @param resp
* @return
*/
public String add(HttpServletRequest req, HttpServletResponse resp) {
try {
System.out.println("增加一条书籍记录,清空了redis 的缓存");
this.bookDao.add(book);
jedis.del("bookList");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
jedis.close();
}
return "toList";
}
public String edit(HttpServletRequest req, HttpServletResponse resp) {
try {
this.bookDao.edit(book);
jedis.del("bookList");
System.out.println("修改一条书籍记录,清空了redis 的缓存");
} catch (Exception e) {
e.printStackTrace();
}finally {
jedis.close();
}
return "toList";
}
public String del(HttpServletRequest req, HttpServletResponse resp) {
try {
this.bookDao.del(book);
jedis.del("bookList");
System.out.println("删除一条书籍记录,清空了redis 的缓存");
} catch (Exception e) {
e.printStackTrace();
}finally {
jedis.close();
}
return "toList";
}
public Book getModel() {
return book;
}
// 测试连接是否成功
public static void main(String[] args) {
// System.out.println(jedis.ping());
// jedis.close();
// String userString = "{\"name\":\"ZhangSan\",\"sex\":\"ZhangSan\"}";
// JSONObject userJson = JSONObject.parseObject(userString);
// System.out.println(userJson);
}
}
bookList.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/bk201" prefix="b"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>读取redis数据</title>
</head>
<body>
<h2>小说目录</h2>
<br>
<form action="${pageContext.request.contextPath}/book.action?methodName=list" method="post">
<!--用户设置查询 一页20条记录 -->
<!-- <input type="hidden" name="rows" value="20"/> -->
<!--用户设置不分页 -->
<!-- <input type="hidden" name="pagination" value="false"/> -->
书名:<input type="text" name="bname"> <input type="submit"
value="确定">
</form>
<a href="${pageContext.request.contextPath}/book.action?methodName=preSave">增加</a>
<table border="1" width="100%">
<tr>
<td>编号</td>
<td>名称</td>
<td>价格</td>
<td>操作</td>
</tr>
<c:forEach items="${bookList}" var="b">
<tr>
<td>${b.bid }</td>
<td>${b.bname }</td>
<td>${b.price }</td>
<td>
<a href="${pageContext.request.contextPath}/book.action?methodName=preSave&&bid=${b.bid }">修改</a>
<a href="${pageContext.request.contextPath}/book.action?methodName=del&&bid=${b.bid}">删除</a>
</td>
</tr>
</c:forEach>
</table>
<b:page pageBean="${pagebean}"></b:page>
</body>
</html>