Java访问redis
2.1 添加依赖
redis.clients
jedis
2.9.0
2.2 Java连接redis
Jedis jedis = new Jedis(ip, port);
jedis.auth(“123456”);//权限认证
jedis.ping();
jedis.select(0);//切换数据库
2.3 Java操作redis
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(sorted set:有序集合)
zadd/zrevrange
注1:不需要记得API的方法,只需要查redis命令
基础操作
package com.zking;
import redis.clients.jedis.Jedis;
/**
* @author润红的爸爸
* @site www.xiaomage.com
* @company 潇洒公司
* @create 2019-09-18 10:55
*/
public class demo1 {
// 连接redis
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.252.128",6379);
jedis.auth("123456");
System.out.println(jedis.ping());
// 操作字符串
// jedis.set("aaa","zs");
// System.out.println(jedis.get("aaa"));
// 操作哈希
// jedis.hset("user1","uname","ls");
// jedis.hset("user1","sex","难");
// System.out.println(jedis.hgetAll("user1"));
// System.out.println(jedis.hget("user1", "uname"));
// 操作列表list
jedis.lpush("hobby","a","b","c","d","e");
System.out.println(jedis.lpop("hobby"));
System.out.println(jedis.lpop("hobby"));
System.out.println(jedis.rpop("hobby"));
}
}
2.案例
当我们查数据时,可以利用redis。第一次查询查询数据库,然后将数据放入redis中,之后的数据就直接从redis中获取
home.jsp
<%--
Created by IntelliJ IDEA.
User: lx
Date: 2019/9/18
Time: 11:09
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</title>
</head>
<body>
博客首页
拿取数据的方法${msg}<br/>
拿取到的数据${currentUser}
</body>
</html>
demoServlet
package com.zking;
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;
import java.util.Map;
/**
* @author润红的爸爸
* @site www.xiaomage.com
* @company 潇洒公司
* @create 2019-09-18 11:09
*/
@WebServlet("/getData")
public class demoSevlet 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("192.168.252.128",6379);
jedis.auth("123456");
Map<String, String> currentUser = jedis.hgetAll("currentUser");
if(currentUser!=null && currentUser.size()>0){
req.setAttribute("msg","我是从缓存中拿的");
req.setAttribute("currentUser",currentUser);
}else{
req.setAttribute("msg","我是从数据库中拿的");
String uname = "wanwu";
String upass = "123456";
jedis.hset("currentUser","uname","wanwu");
jedis.hset("currentUser","upass","123456");
currentUser = jedis.hgetAll("currentUser");
req.setAttribute("currentUser",currentUser);
}
req.getRequestDispatcher("/home.jsp").forward(req,resp);
}
}
1、首页第一次是读取数据库,后面读取缓存(在没有增删改的情况)
String blogListJsonStr = jedis.get("blogList");
if(blogListJsonStr != null && blogListJsonStr.length() > 0) {
System.out.println("使用redis查询");
request.setAttribute("blogList", JSON.parse(blogListJsonStr));
}else {
System.out.println("从数据库查询");
//从数据库中查询数据
List<Map<String, Object>> blogList = this.blogDao.freemarker_list(title, null);
//放入缓存
jedis.set("blogList", JSON.toJSONString(blogList));
//传到jsp页面
request.setAttribute("blogList", blogList);
}
2、增删改的时候,要顺带更新缓存,下一次再次访问首页要保证redis中数据跟mysql数据是一致
//清空缓存
jedis.del("blogList");
//加入数据库
this.blogDao.save(parameterMap);