目录
前言
这里只会讲解redis 的应用,redis的基础使用
https://blog.csdn.net/middleware2018/article/details/80355418
https://blog.csdn.net/yzj17025693/article/details/81660693
使用redis处理首页分类数据
因为首页会有很多人访问,所以有很高的并发量,不可能使用session或者request来存储分类信息
然后再用EL表示访问出来,显然是不可行,直接访问数据库,肯定会让数据库炸了.所以这时候就需要使用redis
打开首页,发送ajax请求
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<html>
<head>
<!-- 注意一下,引入jquery,在当前路径目录下的,前面加./ -->
<script type="text/javascript" src="./js/jquery-1.11.3.min.js"></script>
<script>
$(function(){
// 下面一大串,其实只是在处理字符串而已,var url=projectName+"/CategoryServlet" 这个才是重点
<%-- 可以直接用 <%=path%>+"/CategoryServlet" 来替换 --%>
var pathName=window.document.location.pathname;
//substring 是截取指定索引之间的字符串,包头不包围
//substr是返回指定索引的字符串,省略第2个参数,就是返回所有后面所有,这里过滤了第一个 /
//indexOf是查找第一个出现的字符串, /example003store/index.jsp,因为源字符串是这样的,而上面substr排除第1个
//就变成example003store/index.jsp,后面的+1是因为substring包头不包尾,这样就能处理成/example003store
var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);
var url=projectName+"/CategoryServlet";
var obj={"method":"findAllCats"}
$.post(url,obj,function(data){
//每次首页会通过ajax访问服务器获取分类信息,这样就不会丢失了
//返回json数据
$.each(data,function(i,obj){
var li="<li><a href=''></a></li>"
$("#myUL").append(li);
});
},"json");
});
</script>
</head>
<body>
<ul id="myUL"></ul>
</body>
</html>
java操作redis
而在CategoryServlet里的findAllCats方法便是redis应用的重点了
这里redis用windows环境做测试
使用java操作redis还需要导入2个包
public class CategoryServlet extends BaseServlet
{
private static Jedis jedis=null;
static
{
// 创建redis连接池配置
JedisPoolConfig config = new JedisPoolConfig();
// 设置最大连接数
config.setMaxTotal(30);
// 设置最大空闲数
config.setMaxIdle(10);
// 设置最小空闲数
config.setMinIdle(5);
// 创建redis连接池
JedisPool pool = new JedisPool(config, "127.0.0.1",6379);
// 获取jedis资源,相当于获取单个连接
jedis = pool.getResource();
}
public String findAllCats(HttpServletRequest request, HttpServletResponse response) throws IOException
{
//获取allCats里的数值,如果是第一次,那么allCats肯定不存在
//返回的也是类似json形式的字符串
String jsonStr=jedis.get("allCats");
//如果allCats不存在hip或为空
if (null==jsonStr||"".equals(jsonStr))
{
//调用业务层,查询数据库获取全部分类,这里我们就不查了,直接填充数据
//Category类里就一个cid,一个cname
List<Category>list=new ArrayList<Category>();
list.add(new Category(1,"aa"));
list.add(new Category(2,"bb"));
list.add(new Category(3,"cc"));
//把list转换成json
jsonStr=JSONArray.fromObject(list).toString();
//设置json到redis
jedis.set("allCats", jsonStr);
}
//如果jsonStr存在内容,直接传输到客户端
response.setContentType("application/json;charset=utf-8");
response.getWriter().print(jsonStr);
return null;
}
}