zoukankan      html  css  js  c++  java
  • redis新手入门,摸不着头脑可以看看<三>——lrange分页

    看了几天 redis开发与运维,写了个小demo练练手,直接上代码。

    1.首先是数据库,本地要有redis,具体的如何安装redis,官网下个就好了,sososo。

    2.启动redis

    注意启动命令。另,我的redis数据是通过单元测试直接写到数据库里的,贴一下

     1 @Test
     2     public void testJedisPool1(){
     3         //create a simple and not-safe pool
     4         GenericObjectPoolConfig config = new GenericObjectPoolConfig();
     5         //init connect pool
     6         JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
     7         Jedis jedis = null;
     8         try {
     9             jedis = jedisPool.getResource();
    10             for (int i = 1; i <= 100000; i++) {
    11                 jedis.rpush("nameList","zl"+i);
    12             }//代码还是自己敲的为好
    13             out.println("write ok");
    14         } catch (Exception e) {
    15             e.printStackTrace();
    16         } finally {
    17             if (jedis != null){
    18                 jedis.close();
    19             }
    20         }
    21     }

    3.controller

     1 /**
     2  * create by zl on 2018/2/23
     3  *
     4  */
     5 @RequestMapping("/milu")
     6 @Controller
     7 public class PagingController {
     8     @RequestMapping("/paging")
     9     public String paging(Model model,Long currentPage){
    10 
    11 
    12         //create a simple and not-safe pool
    13         GenericObjectPoolConfig config = new GenericObjectPoolConfig();
    14         //init connect pool
    15         JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
    16         Jedis jedis = null;
    17         try {//别偷懒
    18             jedis = jedisPool.getResource();
    19             //total
    20             long total = jedis.llen("nameList");
    21             //size
    22             long size = 399L;
    23             if (total/size==0){
    24                 total = total/size;
    25             }else {
    26                 total = total/size + 1;
    27             }
    28             // set currentPage
    29             currentPage = currentPage==null?0L:currentPage;
    30             out.println(total);
    31             List<String> nameList = jedis.lrange("nameList",currentPage*size,(currentPage+1)*size);
    32             model.addAttribute("nameList",nameList);
    33             model.addAttribute("total",total);
    34             model.addAttribute("currentPage",currentPage);
    35             for (String name : nameList) {
    36                 out.println(name);
    37             }
    38         } catch (Exception e) {
    39             e.printStackTrace();
    40         } finally {
    41             if (jedis != null){
    42                 jedis.close();
    43             }
    44         }
    45         return "paging";
    46     }
    47 }

    4,.页面就很简单了

     1 <%--
     2   Created by zl.
     3   Date: 2018/2/23
     4   Time: 17:53
     5   To change this template use File | Settings | File and Code Templates.
     6 --%>
     7 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
     8 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     9 <%@ page isELIgnored="false" %>
    10 <html>
    11     <head>
    12         <title>测试</title>
    13     </head>
    14     <style>
    15         ul{
    16             list-style: none;
    17             float: left;
    18         }
    19         li{
    20             width: 50px;
    21             height: 50px;
    22         }
    23     </style>
    24     <script type="text/javascript" src="${pageContext.request.contextPath}/assets/js/jquery.min.js"></script>
    25     <body>
    26         <form action="${pageContext.request.contextPath}/milu/paging">
    27             按页数查询:<input class="pageNum" name="currentPage" maxlength="10" value="输入要查询的页数">
    28             <input type="submit" value="查询"><br><hr>
    29         </form>
    30         <strong>用户名称:</strong><br><hr>
    31         <ul>
    32             <c:forEach items="${nameList}" var="n">
    33                 <li>${n}</li>
    34             </c:forEach>
    35         </ul>
    36         <br><hr>
    37         <a href="${pageContext.request.contextPath}/milu/paging?currentPage=${currentPage-1}">上一页</a>
    38         当前第${currentPage+1}页,共${total}页
    39         <a href="${pageContext.request.contextPath}/milu/paging?currentPage=${currentPage+1}">下一页</a>
    40     </body>
    41 </html>

    5.效果图

     写在最后的,书中好像有写到lrange在高并发下可能会造成redis阻塞,应该用scan啥啥来着,忘了,有时间再补上

    这里要纠正一下,redis开发与运维 中写的是 lrange在列表的两端性能较好,若列表较大,获取中间范围的元素性能会变差

    从上图也可以看的出来lrange的时间复杂度的计算方式.

  • 相关阅读:
    vue slot
    展开合并全都是数组元素的数组
    vue中.sync 修饰符
    数组内元素全都是数组,展开并合并
    关于elment-ui树形控件Tree的使用
    vuejs实现瀑布流布局(三)
    Date对象设置一天的0点
    汇报一下这段时间的消失
    使用bootstrap3.0搭建一个具有自定义风格的侧边导航栏
    优秀HTML5活动页面
  • 原文地址:https://www.cnblogs.com/woooodlin/p/8465011.html
Copyright © 2011-2022 走看看