Redis-使用Java代码操作Redis(2)

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值