看了几天 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分页的更多相关文章

  1. redis新手入门,摸不着头脑可以看看<二>

    对<Redis开发与运维>的理解--下文中引号部分来自该书,略有修改 P19.  Redis有序集合(图2-1) "Redis有序集合和集合一样也是某种类型元素的集合,不重复.不 ...

  2. redis新手入门,摸不着头脑可以看看<一>

    公司在用redis,但我并不会.所以需求就来了.. redis的好处坏处自己百度就好我也不去复制黏贴了. ----------------------------------------------- ...

  3. git和github新手安装使用教程(三步入门)

    git和github新手安装使用教程(三步入门) 对于新手来说,每次更换设备时,github的安装和配置都会耗费大量时间.主要原因是每次安装时都只关心了[怎么做],而忘记了记住[为什么].本文从操作的 ...

  4. Redis 快速入门

    Redis 快速入门 谈到Redis,大家应该都不陌生.它是用c语言开发的一个高性能键值数据库,主要用于缓存领域.本章通过Redis的安装,Redis的五大数据类型,Redis的Java客户端,Red ...

  5. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  6. Redis快速入门详解

    Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...

  7. 超强、超详细Redis数据库入门教程(转载)

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下   [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...

  8. 超详细Redis数据库入门教程

    [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介8.redis ...

  9. Redis快速入门及实现

    redis的概念 (1)Redis的优点 以下是Redis的一些优点. 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET) ...

随机推荐

  1. Vuethink正确安装过程

    1.      下载项目vuethink,本例将项目放置website文件下. 2.      后台搭建 本地建站–>以phpstudy为例 1)      新建站点域名 <Virtual ...

  2. QQ邮箱开启SMTP服务的步骤

    首先要确保你的QQ邮箱已经要开启超过一个月.对于新开启的邮箱,腾讯是不开放这些功能的. 方法/步骤 首先点QQ头像旁边的信封符号进入邮箱. 当然你也可以使用 mail.qq.com进邮箱 进入邮箱后点 ...

  3. 个人Vue-1.0学习笔记

    dVue.js是类似于angular.js的一套构建用户界面的渐进式框架,只关注视图层, 采用自底向上增量开发的设计. Vue.js的代码需要放置在指定的HTML元素后面. 关于Vue的数据绑定: 例 ...

  4. 版本控制——TortoiseSVN (3)多版本发布

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  5. 有经验JAVA程序员如何提升自己?

    作为一个具有一到五年开发经验程序员,需要学习内容很多: JVM/分布式/高并发/性能优化/Spring MVC/Spring Boot/Spring Cloud/MyBatis/Netty源码分析等等 ...

  6. OKMX6Q在ltib生成的rootfs基础上制作带QT库的根文件系统

    ltib每次执行后会在其目录下生成rootfs目录,并以其为基础生成rootfs.ext2.gz文件,而litb自带的QT库又太老,所以想到按照飞凌的<OKMX6X-S2-Qt4.8.5移植手册 ...

  7. ios开发 第三天

    1.复合 对象可以引用其它对象,可以利用其它对象提供的特性. 通过包含作为实例变量的对象指针实现的. 2.OC是单一继承 3.继承-重构 4.类实例化对象时,self指向了对象的首地址. 类对象isa ...

  8. 【开发技术】 Air display的介绍与使用

    原理是,通过ipad与电脑连接的同一网络,然后把你的ipad变成电脑的屏幕 安装方法:1, 2, 3,

  9. JAVA正则表达式 Pattern和Matcher

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  10. nginx中location匹配顺序

    一.location语法 语法: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: - ...