精华内容
下载资源
问答
  • 页面缓存分页

    2017-11-27 22:03:38
    页面缓存分页

    前段时间做了个小需求,点击一个查询按钮将数据在新的JSP页面分页展示出来。
    基本思路就是将所有查询的数据放在页面缓存中,然后对数据进行分拆处理后展示。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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">
    <script type="text/javascript" src="scripts/jquery-1.5.2.min.js"></script>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <title>JS利用缓存分页</title>
    
    <script type="text/javascript">
    //初始化当前页为第一页
    var currentPage = 1;
    //每一页的数量定义为100
    var pageSize = 100;
    //总页数
    var totalSize = '';
    //数据总量
    var dataCount = '';
    //存放需要展示的所有数据
    var data = '';
    //存放展示的数据
    var detailData = '';
    
    $(function(){
    	var jsonData = $('#data').val();
    	data = eval('('+ jsonData +')');
    	dataCount = parseInt($('#dataCount').val());
    	//计算总页数
    	totalSize = Math.ceil(dataCount/pageSize);
    	//翻页
    	toPage(currentPage);
    })
    
    //翻页   根据传入的当前页码对数据进行拆分
    function toPage(pageNum) {
    	currentPage = pageNum;
    	detailData = data.slice((pageNum-1)*pageSize, pageNum*pageSize);
    	showData(detailData);
    }
    
    //在table中展示数据
    function showData(detailData) {
    	//分页处理
    	var perPage = currentPage-1;
    	var afterPage = currentPage+1;
    	if(perPage <= 1) {
    		perPage = 1;
    	}
    	if(afterPage >= totalSize) {
    		afterPage = totalSize;
    	}
    	//构建翻页DIV
    	var dataPage = "<div style='border:0px solid #78e1e7;margin-top:0px;margin-right:10px;' align='right'>";
    	if(currentPage == 0 || currentPage == 1) {
    		dataPage += "首页 | 上一页";
    	} else {
    		dataPage += "<a href ='#' οnclick=toPage(" + 1 + ")>首页</a> |" 
    			+ "<a href='#' οnclick=toPage("+ prePage +")>上一页</a>";
    	}
    	if(currentPage == totalSize) {
    		dataPage += "| 下一页 | 末页";
    	} else {
    		dataPage += "| <a href = '#' οnclick=toPage("+ afterPage +")>下一页 </a> |"
    			+ "<a href='#' οnclick=toPage("+ totalSize +")>末页</a>";
    	}
    	dataPage += "第" + currentPage "页/共" + totalSize + "页";
    	var dataTableContent;
    	//遍历数据填充table
    	for(var i = 0; i < dataCount; i++) {
    		dataTableContent += "<tr>"
    					+ "<td align='center'>"
    					+ detailData[i].id
    					+ "</td><td align='center'>"
    					+ detailData[i].name
    					+ "</td><td align='center'>"
    					+ detailData[i].phoneNo
    					+ "</td><td align='center'>"
    					+ detailData[i].address
    					+ "</td></tr>";
    	}
    	$('#detailData').html(dataTableContent);
    }	
    
    </script>
    
    </head>
    
    <body>
    	<div>
    		<!-- 数据展示table -->
    		<table>
    			<!-- 表头 -->
    			<thead>
    				<tr>
    					<td>ID</td>
    					<td>姓名</td>
    					<td>电话</td>
    					<td>地址</td>
    				</tr>
    			</thead>
    			<!-- 明细 -->
    			<tbody id="detailData">
    			</tbody>
    		</table>
    	</div>
    	<!-- 接收需要展示在table中的数据 -->
    	<input type="hidden" id="data" name="data" value='<c:out value="${data }" />' />
    	<!-- 接收需要展示在table中的数据总数 -->
    	<input type="hidden" id="dataCount" name="dataCount" value='<c:out value="${dataCount }" />' />
    </body>
    </html>


    展开全文
  • redis缓存分页思路

    2020-02-29 02:02:08
    传统分页 一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点...Redis缓存分页 1.数据以ID为key缓存到Redis里; 2.把数据ID和排序打分存到Redis的skip list,即zset里; 3.当查找数据时,...

    传统分页
    一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。
    如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。
    比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。

    Redis缓存分页
    1.数据以ID为key缓存到Redis里;
    2.把数据ID和排序打分存到Redis的skip list,即zset里;
    3.当查找数据时,先从Redis里的skip list取出对应的分页数据,得到ID列表。
    4.用multi get从redis上一次性把ID列表里的所有数据都取出来。如果有缺少某些ID的数据,再从数据库里查找,再一块返回给用户,并把查出来的数据按ID缓存到Redis里。

    在最后一步,可以有一些小技巧:
    比如在缺少一些ID数据的情况下,先直接返回给用户,然后前端再用ajax请求缺少的ID的数据,再动态刷新。
    还有一些可能用Lua脚本合并操作的优化,不过考虑到Lua脚本比较慢,可能要仔细测试。
    如果是利用Lua脚本的话,可以在一个请求里完成下面的操作:
    查找某页的所有文章,返回已缓存的文章的ID及内容,还有不在缓存里的文章的ID列表。
    其它的一些东东:
    Lua是支持LRU模式的,即像Memcached一样工作。但是貌似没有见到有人这样用,很是奇怪。
    可能是用redis早就准备好把redis做存储了,也不担心内存的容量问题。

    转发网址:https://www.cnblogs.com/l1pe1/p/7348976.html 作者:桃花雪,首页:博客园,转发时间:2020/2/22/14:51

    展开全文
  • redis缓存分页数据

    千次阅读 2017-09-23 11:09:00
    在我们开发项目的过程中,经常会对数据做分页展示,如果每次请求都去查询数据库,当访问量增大时,势必会加重数据库的负载,降低数据库性能。然而,有些数据的是极少变动的,或者说变动的频率不是很高,这时如果将...

                         

             在我们开发项目的过程中,经常会对数据做分页展示,如果每次请求都去查询数据库,当访问量增大时,势必会加重数据库的负载,降低数据库性能。然而,有些数据的是极少变动的,或者说变动的频率不是很高,这时如果将这些数据进行缓存,不仅可以提高程序性能,还能降低数据库的负载。下面就给出高并发下的分页数据缓存方案。

    一、需要了解的一些知识点

    1、redis的hmset(key, value)方法,将key值设置为value,value是map类型的数据结构

    2、redis的hgetAll(key)方法,获取key的值,改值的类型为map类型的

    3、关键字synchronized

    4、key值包含的一些关键信息,前缀+当前的页数+每页数据的大小等

    二、代码实现

              
     /* (non-Javadoc)
    	 * 默认为60秒刷新一次;采用加锁模式应对高并发
    	 */
    	@Override
    	public Page<StrategySummary> getAdvisorStrategys(AdvisorCondition condition) throws IOException{
    		Pageable pageable=condition.getPage();
    		int currentPage = pageable.getPageNumber();
    		int pageSize = pageable.getPageSize();
    		Map<String,String> result=RedisUtil.getMap("advisor:"+condition.getId()+"_number:"+currentPage+"_size:"+pageSize, MARKET);
            if (result!=null&&result.size()>0) {
            	List<StrategySummary> dataList=JsonUtils.toJavaBeanList(result.get("data"), new TypeReference<List<StrategySummary>>() {});
            	long total=Long.valueOf(result.get("total"));
            	return new PageImplBean<StrategySummary>(dataList, pageable, total);	
    		} else {
    			Page<StrategySummary> page=null;
    			synchronized (MobileAppServiceImpl.class) {         //当首个线程将数据缓存后,后面的线程需再次检查,防止重复查询数据库和缓存数据
    				int count = 0;              
    				for (int i = 0; i < 3; i++) {                   //取3次,防止获取失败
    					Map<String,String> map =RedisUtil.getMap("advisor:"+condition.getId()+"_number:"+currentPage+"_size:"+pageSize, MARKET);
    					if (map==null||map.size()==0) {
    						continue;
    					}
    					if (map!=null&&map.size()>0) {
    						count++;
    						break;
    					}
    				}
    				if (count==0) {
    					page= mobileAppDao.getAdvisorStrategys(condition);
    					List<StrategySummary> dataList=page.getContent();
    					long total=page.getTotalElements();
    					if(dataList.size()>0){
    						Map<String, String> map=new HashMap<String,String>();
    						map.put("data", JsonUtils.toJsonString(dataList));
    						map.put("total", String.valueOf(total));
    						RedisUtil.setMapWithExpire("advisor:"+condition.getId()+"_number:"+currentPage+"_size:"+pageSize, map, MARKET);
    					}
    				}else{
    					Map<String,String> map =RedisUtil.getMap("advisor:"+condition.getId()+"_number:"+currentPage+"_size:"+pageSize, MARKET);
    					List<StrategySummary> dataList=JsonUtils.toJavaBeanList(map.get("data"), new TypeReference<List<StrategySummary>>() {});
    		        	long total=Long.valueOf(map.get("total"));
    		        	page= new PageImplBean<StrategySummary>(dataList, pageable, total);
    				}
    			}
    			return page;
    		}
    		
    	}

              
         
    展开全文
  • 笔记69 基于Redis的zSet集合做数据缓存实现分页查询 基于Redis的zSet集合做数据缓存实现分页查询 posted @ 2018-07-20 12:25 雨落忧伤- 阅读(...) 评论(...) 编辑 ...
    展开全文
  • controller层 ...//评论分页 @RequestMapping("queryPingLun") @ResponseBody public JSONObject queryPingLun(String goodId, Integer page, Integer rows, CommentsBean commentsBean) { JSONObject...
  • 对于多次重复的操作,可以使用缓存代理的形式进行缓存(代理模式的知识,可以看我另外一篇文章设计模式-代理模式),在分页查询中,对于相同的分页,我们不希望进行重复的请求,毕竟ajax是非常消耗性能的,这个时候...
  • redis做缓存 分页思路

    2019-01-16 11:04:22
    传统分页 一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。...Redis缓存分页 1.数据以ID为key缓存到Redis里; 2.把数据ID和排序打分存到Redis的skip list,即zset里; 3.当查...
  • 基于redis的zSet集合做数据缓存实现分页查询 java

    万次阅读 热门讨论 2018-05-24 15:34:20
    需要场景:最近公司要做手机页面展示新闻文章数据查询的优化工作,让我提个优化方案。现状是目前手机页面的数据请求系统后台,系统后台然后调用其他系统的接口,返回分页数据到前台展示,这样一来,用户每次下拉到...
  • ​使用方式及代码 //查询某条记录表名ts =表名Cache.getValue(表名Cache.getEndkey(),datatype + "_" + number); //清除缓存 表名Cache.delete(null...//分页查询 List<Object> list = null; if("desc".e...
  • 最近公司要做手机页面展示新闻文章数据查询的优化工作,让我提个优化方案。现状是目前手机页面的数据请求系统后台,系统后台然后调用其他系统的接口,返回分页数据到前台展示,这样一来,用户每次下拉到页面底部加载...
  • 在面试中是否时常被问到:是否了解数据库的调优?今天Mybatis中的数据库调优基础技术来了.Mybatis中支持缓存机制,有Cache的数据库连接技术才能让查询的效率更高,
  • redis缓存分页数据ID

    2016-07-07 19:14:00
    1、用户通过分类、属性进来分页时 ...2、有缓存时,就直接读缓存分页数据Id,根据分页数,找出分页的ID,将分页id串成字符串,从数据库查询出数据 3、将查询出的数据和有序的数据ID进行排序 4、返回给前端用户...
  • TP5缓存分页

    千次阅读 2018-08-04 15:14:11
    //分页变量 $page=$articles-&gt;render(); $this-&gt;assign('page',$page); //文章变量 $this-&gt;assign('articles', $articles); //判断ajax请求,渲染到不同模板 ...
  • [优化]缓存分页和版本号 1 背景 当服务端返回给客户端的数据量比较大,而且大部份数据不经常修改。那么可以采取客户端缓存和版本号机制。   例如:游戏中,读取道具配置(脚本热更方式除外,有些配置或数据是不...
  • 业务需求 首页 实现缓存分页 spring boot 整合redis (我的是2.0.3版本的) 在pom 文件写上依赖包即可 <dependency><!--依赖包--> <groupId>org.springframework.boot</groupId> &...
  • 无论是那种分页,后台返回给前台数据时都是分页结构的数据,具体内容必须包括总的数据件数和当前查询页面的数据。   1.使用分页工具条(pagingtoolbar)分页 gridpanel必须首先增加pagingtoolbar,配置如下: ...
  • 基于SortedSet的分页查询缓存方案首先想到的解决方法是使用@see ListOperations不再根据分页条件使用多个key,而是使用一个key,也不分页将全部的数据缓存到redis中,然后按照分页条件使用range(key,...
  • qq_花开花谢_0对于有分页条件的缓存,我们也可以按照不同的分页条件来缓存多个key,比如分页查询产品列表,page=1&limit=10和page=1&limit=5这两次请求可以这样缓存查询结果productList:page:1:limit:10...
  • 利用ASP.NET的缓存功能,结合性能良好的存储过程,一次性地缓存数据库数页数据,以供用户分页查询,是优化Web数据查询性能的比较理想的方式。文章详细介绍了优化模型的实现,并进行了性能分析
  • 基于redis做缓存分页

    2018-02-02 11:20:00
    第二:基于redis的数据结构做缓存分页,这里又分2种 ①:基于redis的list数据结构,直接通过list的数据结构,用range方法可以进行分页,在数据量大的时候,性能也很可观,但是当存在接口高并发访问时,这个list...
  • 分页查询

    2017-08-29 15:51:54
    分页查询分为物理分页和逻辑分页,根据页面上传进去页码和页面大小参数进行分页叫做物理分页,还有一种是查询出来所有的记录,根据分页插件进行分页显示部分数据,缓存一部分数据,称为逻辑分页。
  • 算是一种数据库查询的优化升级吧。 前面封装了多种类型数据库,用了开源的数据库来组合需要的方案,任你选取。我通过组个项目一步步实现封装。最后把它整理成服务化的处理。给出了客户端请求,服务端回复的模式。还...
  • 怎么用redis实现分页缓存,比如有1000页数据,只缓存当前页的后两页,点击到其他页时再缓存当前页的后两页。
  • 分页缓存设置

    千次阅读 2014-03-20 11:16:17
    1,对于分页来说,效率是关键,本例是在分页的时候,缓存5页记录,默认每页20条,缓存大小100,这可以修改的; 2,基本思路是:第一次查的时候,先判断缓存中存不存在当前页的数据,如果存在,查找缓存中的数据,...
  • 缓存分页

    2012-11-07 02:14:53
    最近再做服务端缓存性能的优化,上一篇《分布式缓存缓存优化设计方案》[url]http://gkqcz-126-com.iteye.com/admin/blogs/1705695[/url]只是粗略的谈了谈对于设计的思路,最近在原设计上又做了一些优化,仅当...
  • MyBatis Plus 实现多表分页查询

    万次阅读 多人点赞 2019-07-08 17:25:52
    接口帮我们定义了很多常用的方法,但这些都是 T 对象有用,如果涉及到 多表的查询,还是需要自定义Vo 对象和自己编写sql 语句,Mybatis Plus提供了一个Page 对象,查询是需要设置其中的 size 字段 和 current 字段的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,368
精华内容 44,547
关键字:

缓存分页查询