1 java访问redis
1.1 添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
1.2 Java连接redis
//输入ip 端口号 密码
Jedis jedis = new Jedis("122.51.229.49", 6379);
jedis.auth("123456");//认证权限
//测试连接 打印pong 成功
// System.out.println(jedis.ping());
//选择数据库 打印OK 成功
// System.out.println(jedis.select(2));
1.3 Java操作redis
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(sorted set:有序集合)
zadd/zrevrange
package com.swx.idea;
import redis.clients.jedis.Jedis;
/**
* @author Songwanxi
* @site www.lentter.club
* @company
* @create 2019-11-12 16:17
*/
public class Redis {
public static void main(String[] args) {
//输入ip 端口号 密码
Jedis jedis = new Jedis("122.51.229.49", 6379);
jedis.auth("123456");//认证权限
//测试连接 打印pong 成功
// System.out.println(jedis.ping());
//选择数据库 打印OK 成功
// System.out.println(jedis.select(2));
//测试三种数据类型 String
//jedis.set("uname","swx");
// System.out.println(jedis.get("uname"));
// jedis.set("usex","man");
// jedis.set("addr","长沙");
// System.out.println(jedis.type("usex"));
//hash
//jedis.hset("swx","姓名","swx");
// jedis.hdel("swx","姓名");
// jedis.hset("学生1","姓名","时王");
// jedis.hset("学生1","年龄","18");
//用反射将一个对象存进去
// User user = new User("swx","man","cs",18);
// for (Field field : user.getClass().getDeclaredFields()) {
// //打开权限
// field.setAccessible(true);
// try {
// jedis.hset("学生2",field.getName(),field.get(user).toString());
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// }
//
// }
// System.out.println(jedis.hgetAll("学生2"));
// Map<String, String> map = jedis.hgetAll("学生2");
//list l/r 左/右
// jedis.lpush("list","a","b","d","e","f","g");
// System.out.println(jedis.lpop("list"));
// System.out.println(jedis.lrange("list", 2, -1));
// System.out.println(jedis.rpop("list"));
}
}
package com.swx.idea;
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 Songwanxi
* @site www.lentter.club
* @company
* @create 2019-11-12 18:20
*/
@WebServlet("/booklist")
public class RedisServlet 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 {
//假设第一次查询 需要进入mysql数据库查询,将查询到的结果存入到redis中,后面查询时就直接从redis中获取(性能更好)
Jedis jedis = new Jedis("122.51.229.49",6379);
jedis.auth("123456");
//查询
//字符串uname存放的是 json数据字符串 List<uname> ==>json
//如果需要通过json数组传做jsp页面展示的话,需要将json数据字符串转换为==>List<uname> 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);
}
}
项目实战
原理图:
遇到两个问题: