• php利用redis实现分页列表,新增,删除功能


    在开发中经常遇到主页面大量数据加载,同时又不会经常改变的数据,每次从数据库里取数据对数据库的负荷非常大,然而将其放入到缓存内可以有效减轻数据库压力,提升页面加载速度。

    1.基本连接方式实现:

    use Redis; 引入redis类
    $this->redis = Redis::connection('email'); //连接
    $basicKeys = 'emailList:'.$own['user_id']; //key可以根据自己需求进行更改


    2.添加数据至redis缓存
    $this->redis->hMset($basicKeys.':'.$temp['email_id'],['list'=>serialize($temp)]);  //将数据以hash类型写入到redis

    $this->redis->zAdd($basicKeys.'_sort',$temp['email_id'],$temp['email_id']);     //设置识别符,使用有序队列将对于缓存的数据id存在到当前key下,以方便数据查找

    3.获取分页数据

    $pageSize = $data['limit'] ? intval($data['limit']) : 5; //页大小
    $page = $data['page'] ? intval($data['page']) :1;     //当前页码
    $limit_s = ($page-1) * $pageSize;
    $limit_e = ($limit_s + $pageSize) - 1;
    $count = $this->redis->zCard($basicKeys.'_sort'); //统计ScoreSet总数
    $pageCount = ceil($count/$pageSize); //总共多少页
    $ids = $this->redis->ZRANGE($basicKeys.'_sort',$limit_s,$limit_e); //获取分页id,对应获取hash内的分页数据
    rsort($ids);
    if($ids && is_array($ids)){
    foreach ($ids as $v){
    $dataFinal[] = $this->redis->hgetall($basicKeys.':'.$v) ? unserialize($this->redis->hgetall($basicKeys.':'.$v)['list']) : '';
    }
    }

    $res = [
      'data' = $dataFinal,
      'pageinfo' = $count,      //总条数
      'page_count'=> $count, //总页数
      'page_size' => $pageSize,  //每页显示数量
      'page_num'  => $page,   //当前页
    ]
    return $res;

    3.删除或者修改数据:为了保持数据库数据与缓存数据同步性,需要在对数据库操作后同时修改对应redis内数据,原理其实就是对hash与集合类型的数据修改与删除
      删除时:

    $this->redis->del($basicKeys.'$email_id');      //删除缓存数据
    $this->_redis->zRem($basicKeys.'_sort',$email_id); //删除查询索引id


  • 相关阅读:
    CentOS6.4 配置mysql服务器启动多个端口,同步单表数据
    生成CSV文件后再将CSV文件导入到mysql
    Quartz Cron 表达式
    Jquery 提示插件alertify 【备用】
    tnsping 命令解析
    Gearman安装及使用
    Redis安装部署
    Linux多网卡负载均衡 : bond
    ulimit命令
    Nginx 负载均衡
  • 原文地址:https://www.cnblogs.com/littledonkey/p/10348694.html
Copyright © 2020-2023  润新知