使用MYSQL+Redis完成分页读取功能

public function getAnchorByPopularity($page, $pagesize){
        //验证参数的正确性
        if(!is_numeric($page) || !is_numeric($pagesize)){
            throw new Exception(__METHOD__ . "error param");
        }
        $page = ($page > 0) ? $page - 1 : 0;
        $pagesize = ($pagesize > 0) ? $pagesize : 20;

        $param = func_get_args();
        $redisKey = "autoapp_".__METHOD__ . implode("_", $param);
        $redisVal = $this->redis->get($redisKey);
        if($redisVal === false){
            if ($pagesize > 0) {
                $start = $page * $pagesize;
                $order = "FPopularity desc";
                $limit = "{$start}, {$pagesize}";
               // $limit = "{0},{1}";
            } else {
                $limit = "";
            }
            //从MySQL数据库读取数据

            //如果读取数据不为空,把数据存入redis
            if(!empty($list)){
                $this->redis->setex($redisKey, $this->cacheTime, $list);
            }
        }
        else{
            $list = unserialize($redisVal);
        }
        return $list;
    }

说明:

1.主要的逻辑就是先从redis中查找,如果不存在的话就在mysql中查找,并把找到的数据存入redis。

2.这里的一个技巧点是redis的key的设置使用函数名加参数的方式可以保证不重复。

时间: 2024-12-17 23:06:52

使用MYSQL+Redis完成分页读取功能的相关文章

使用shell分页读取600万+的MySQL数据脚本

shell-mysql  (1)脚本背景:  由于要在Linux上,远程读取mysql的表的数据,然后做一定清洗后,把数据上传至Hadoop集群中,使用Java写吧,感觉太麻烦了,得在Win上开发好,还得打成jar包, 上传到Linux上,如果那里出了问题,还得重复这样,非常不方便,那就用shell写一个吧,也不需要什么jdbc驱动包,只需要在Linux上装个MySQL的 客户端即可,用一行yum命令即可搞定,所以就花了点时间,封装了一个小脚本 (2)功能介绍:  直接在Linux下使用shel

通过Keepalived实现Redis Failover自动故障切换功能

通过Keepalived实现Redis Failover自动故障切换功能[实践分享] 参考资料: http://patrick-tang.blogspot.com/2012/06/redis-keepalived-failover-system.html http://deidara.blog.51cto.com/400447/302402 目前,Redis还没有一个类似于MySQL Proxy或Oracle RAC的官方HA方案.Redis作者有一个名为Redis Sentinel的计划(ht

hbase+springboot+redis实现分页

实现原理: 1.读取hbase数据每页的数据时多取一条数据.如:分页是10条一页,第一次查询hbase时, 取10+1条数据,然后把第一条和最后一条rowkey数据保存在redis中,redis中的key为用户的token+URL.即token.set(token+url:list<String>); 2.前台点击下页时,查询当前页(currentPagae)在redis的list是否存在list.get(currentPage)的rowkey.如果存在,则以之前为startRowKey,取1

redis实现分页

redis实现分页功能,主要是将数据缓存起来,无需频繁查询数据库,减少数据库的压力. 适用场景:单用户操作列表界面分页,如博客列表. 缺点:不可模糊查询,缺少灵活性. 封装类: class XgRedis { protected $_redis; public function __construct($hash_prefix=''){ $this->_redis = connectRedis::getinstance();; //$this->_redis = Redis::connecti

那些年我们学Flask-SQLAlchemy,实现数据库操作,分页等功能

那些年我们学Flask-SQLAlchemy 实现数据库操作,分页等功能  Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作. 一.配置Flask-SQLAlchemy 程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALchemy支持多种数据库,配

c#分页读取GB文本文件

原文:c#分页读取GB文本文件 应用场景: a.我在做BI开发测试的时候,有可能面对source文件数GB的情况,如果使用一般的文本编辑器,则会卡死,或要等很久才能显示出来. b.有时候,我们使用ascii(01)或ascii(02)作为行或列的分隔符,这样的临时文件用于导数据到DB,如果文件导入过程中有错误,需要查看文件 的时候,普通的编辑器不支持换行,则会很恐怖. 为解决这两个需求,我使用c#完成了一个简单的winform的应用程序. 功能列表: 1.根据配置的行数,写测试文件,指定行终止符

分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)

         分页查询信息       使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目时一个简单的运用eclipse+jdbc+mysql的小程序. 连接的数据库名称为db_database11,属性如下: 1.创建名为com.pmf.bean的包,包中是名为Product的类,用于封装商品信息. 全部代码如下: package com.pmf.bean; /** * 商品 * */

c#分页读取GB文本文件实例

本文实例讲述了c#分页读取GB文本文件的方法.分享给大家供大家参考.具体如下: 一.应用场景: ① .我在做BI开发测试的时候,有可能面对source文件数GB的情况,如果使用一般的文本编辑器,则会卡死,或要等很久才能显示出来. ② .有时候,我们使用ascii(01)或ascii(02)作为行或列的分隔符,这样的临时文件用于导数据到DB,如果文件导入过程中有错误,需要查看文件 的时候,普通的编辑器不支持换行,则会很恐怖. 为解决这两个需求,我使用c#完成了一个简单的winform的应用程序.

MySQL中的分页操作结合python

mysql中的分页操作结合python --分页: --方式1: select * from ta12 limit 10;-- 读取十行 select * from ta12 limit 10,10 --从第十行读取 往后再读十行 --方式2: select * from ta12 limit 10 offset 20 ; --从第二十行开始读取10行 -- 结合python 分页: page = input('请输入要查看的页码') page = int(page) select * from