redis新手入门,摸不着头脑可以看看<三>——lrange分页
看了几天 redis开发与运维,写了个小demo练练手,直接上代码。
1.首先是数据库,本地要有redis,具体的如何安装redis,官网下个就好了,sososo。
2.启动redis

注意启动命令。另,我的redis数据是通过单元测试直接写到数据库里的,贴一下
@Test
public void testJedisPool1(){
//create a simple and not-safe pool
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
//init connect pool
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
for (int i = 1; i <= 100000; i++) {
jedis.rpush("nameList","zl"+i);
}//代码还是自己敲的为好
out.println("write ok");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null){
jedis.close();
}
}
}
3.controller
/**
* create by zl on 2018/2/23
*
*/
@RequestMapping("/milu")
@Controller
public class PagingController {
@RequestMapping("/paging")
public String paging(Model model,Long currentPage){ //create a simple and not-safe pool
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
//init connect pool
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
Jedis jedis = null;
try {//别偷懒
jedis = jedisPool.getResource();
//total
long total = jedis.llen("nameList");
//size
long size = 399L;
if (total/size==0){
total = total/size;
}else {
total = total/size + 1;
}
// set currentPage
currentPage = currentPage==null?0L:currentPage;
out.println(total);
List<String> nameList = jedis.lrange("nameList",currentPage*size,(currentPage+1)*size);
model.addAttribute("nameList",nameList);
model.addAttribute("total",total);
model.addAttribute("currentPage",currentPage);
for (String name : nameList) {
out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null){
jedis.close();
}
}
return "paging";
}
}
4,.页面就很简单了
<%--
Created by zl.
Date: 2018/2/23
Time: 17:53
To change this template use File | Settings | File and Code Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>测试</title>
</head>
<style>
ul{
list-style: none;
float: left;
}
li{
width: 50px;
height: 50px;
}
</style>
<script type="text/javascript" src="${pageContext.request.contextPath}/assets/js/jquery.min.js"></script>
<body>
<form action="${pageContext.request.contextPath}/milu/paging">
按页数查询:<input class="pageNum" name="currentPage" maxlength="10" value="输入要查询的页数">
<input type="submit" value="查询"><br><hr>
</form>
<strong>用户名称:</strong><br><hr>
<ul>
<c:forEach items="${nameList}" var="n">
<li>${n}</li>
</c:forEach>
</ul>
<br><hr>
<a href="${pageContext.request.contextPath}/milu/paging?currentPage=${currentPage-1}">上一页</a>
当前第${currentPage+1}页,共${total}页
<a href="${pageContext.request.contextPath}/milu/paging?currentPage=${currentPage+1}">下一页</a>
</body>
</html>
5.效果图


写在最后的,书中好像有写到lrange在高并发下可能会造成redis阻塞,应该用scan啥啥来着,忘了,有时间再补上
这里要纠正一下,redis开发与运维 中写的是 lrange在列表的两端性能较好,若列表较大,获取中间范围的元素性能会变差

从上图也可以看的出来lrange的时间复杂度的计算方式.
redis新手入门,摸不着头脑可以看看<三>——lrange分页的更多相关文章
- redis新手入门,摸不着头脑可以看看<二>
对<Redis开发与运维>的理解--下文中引号部分来自该书,略有修改 P19. Redis有序集合(图2-1) "Redis有序集合和集合一样也是某种类型元素的集合,不重复.不 ...
- redis新手入门,摸不着头脑可以看看<一>
公司在用redis,但我并不会.所以需求就来了.. redis的好处坏处自己百度就好我也不去复制黏贴了. ----------------------------------------------- ...
- git和github新手安装使用教程(三步入门)
git和github新手安装使用教程(三步入门) 对于新手来说,每次更换设备时,github的安装和配置都会耗费大量时间.主要原因是每次安装时都只关心了[怎么做],而忘记了记住[为什么].本文从操作的 ...
- Redis 快速入门
Redis 快速入门 谈到Redis,大家应该都不陌生.它是用c语言开发的一个高性能键值数据库,主要用于缓存领域.本章通过Redis的安装,Redis的五大数据类型,Redis的Java客户端,Red ...
- 超强、超详细Redis数据库入门教程
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...
- Redis快速入门详解
Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...
- 超强、超详细Redis数据库入门教程(转载)
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...
- 超详细Redis数据库入门教程
[本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介8.redis ...
- Redis快速入门及实现
redis的概念 (1)Redis的优点 以下是Redis的一些优点. 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET) ...
随机推荐
- 关于responseBody注解中文乱码的问题解决
在web.xml中定义字符集过滤器: <filter> <filter-name>SpringEncodingFilter</filter-name> <fi ...
- PHP和Python如何选择?或许可以考虑这三个问题
撤稿纠错 文/黄小天.李亚洲 (选自Hackernoon 机器之心编译) 2017 年可谓是网页应用与 API 之年,开发者不用每次重新发明轮子,而是利用脚手架和第三方库就能确保项目在几天内实时部署. ...
- Intellij idea 中修改java web代码 ,网页不同步
问题可能出在 Intellij idea 没有将源码保存在本地,浏览器访问了缓存而没有访问最新文件 用命令行查看了源码,同步了 接着禁止浏览器缓存,网页同步了 打开火狐浏览器 输入 about:c ...
- mysql批量数据脚本
mysql批量数据脚本 1 建表 create table dept( id int unsigned primary key auto_increment, deptno mediumint uns ...
- ArrayList 源码详细分析
1.概述 ArrayList 是一种变长的集合类,基于定长数组实现.ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个 ...
- 强大的Cmder
why 漂亮,包装并美化了各个shell 带task功能,能记忆,能执行脚本 配合win10的bash,能实现类似xshell的功能 注意点 需要注意的一点,Cmder来源于另外一个项目ConEmu, ...
- Spring 数据库连接(Connection)绑定线程(Thread)的实现
最近在看spring事务的时候在想一个问题:spring中的很多bean都是单例的,是非状态的,而数据库连接是一种有状态的对象,所以spring一定在创建出connection之后在threadloc ...
- 安装新的int 9中断例程2
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- php 利用Gd库添加文字水印乱码的问题及解决方案
最近一个项目进行了服务器迁移,部署后发现 ,其中一个为图片添加水印文字的功能出现了乱码问题,确认功能代码不存在问题,同时项目代码都是使用UTF-8编码,不存在编码问题,也检查排除了字体文件出现问题的可 ...
- 判断具有某个属性js、jQuery
if(!rr.classList.contains('invalid')){ updateCount(i,-1);//更新tab数量 } /*if(!$(rr).hasClass('invalid') ...