一、在pom.xml里添加依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
二、连接Redis
Jedis jedis =new Jedis("192.168.124.129",6379);
jedis.auth("123456");
//测试连接(打印pong就算连接成功)
System.out.println(jedis.ping());
三、操作数据
//操作字符串
//插入数据
// jedis.set("aaa", "zs");
//获取数据
// System.out.println(jedis.get("aaa"));
//操作哈希
//插入数据
// jedis.hset("user1 ","uname","ls");
// jedis.hset("useq r1","sex","女");
//获取数据
// System.out.println(jedis.hget("user1", "sex"));
// System.out.println(jedis.hgetAll("user1"));
//操作列表(堆栈结构)
jedis.lpush("hobby","a","b","c","d");
//从栈顶开始取值
System.out.println(jedis.lpop("hobby"));
//从栈底开始取值
System.out.println(jedis.rpop("hobby"));
四、运用
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//首页第一次是读取数据库,后面读取缓存(在没有增删改的情况下)
Jedis jedis =new Jedis("192.168.124.129",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 ="tianqi";
String upass ="123456";
//接下来把数据中的对应对象存储到缓存中
jedis.hset("currentUser","uname","tianqi");
jedis.hset("currentUser","upass","123456");
//此时能获取到值,原因是上面已经将数据存储到缓存中
currentUser = jedis.hgetAll("currentUser");
req.setAttribute("currentUser",currentUser);
}
req.getRequestDispatcher("/home.jsp").forward(req,resp);
}
五、实战
1.首页第一次是读取数据库,后面读取缓存(在没有增删改的情况):
// 从Redis中获取数据
String bolgListALL =jedis.get("blogList");
if(bolgListALL != null && bolgListALL.length()>0) {
System.out.println("使用Redis查询");
request.setAttribute("blogList", JSON.parse(bolgListALL));
}else {
// 从数据库中查询数据
List<Map<String, Object>> blogList = this.blogDao.freemarker_list(title, null);
// 放入缓存
jedis.set("blogList", JSON.toJSONString(blogList));
//传到jsp页面
request.setAttribute("blogList", blogList);
System.out.println("从缓存中拿数据");
2.增删改的时候,要顺带更新缓存,下一次再次访问首页要保证redis中数据跟mysql数据是一致:
public String add() {
HttpServletRequest request = ServletActionContext.getRequest();
Map parameterMap = request.getParameterMap();
try {
// 将博客添加到数据库中
this.blogDao.add(parameterMap);
//清除Redis缓存
jedis.del("blogList");
// 获取当前博客的id
int maxId = (int) this.blogDao.maxId();
// 添加到lucene 中
addIndex(maxId + "", parameterMap);
// 进行网页静态化
addStaticPage(maxId + "", parameterMap);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return "blogList";
}