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


原文地址:https://www.cnblogs.com/littledonkey/p/10348694.html

时间: 2024-08-29 09:30:37

php利用redis实现分页列表,新增,删除功能的相关文章

利用redis完成自动补全搜索功能(二)

前面介绍了自动完成的大致思路,现在把搜索次数的功能也结合上去.我采用的是hash表来做的,当然也可以在生成分词的时候,另外一个有序集合来维护排序, 然后2个有序集合取交集即可.这里介绍hash的方式来实现. 产生分词 dist.php <?php require './redis.php'; //分词 $words = ['花讯','nba','nba直播','nba赛事','nba季后赛','nba录像','花讯品牌','花讯女装','花','n']; //利用管道 Cache::getIns

Editable DataGrid 实现列表新增编辑功能

今天在开发一个功能时候,需要直接在列表实现新增.编辑等功能.于是查看easyui 相关文档,找到相关解决办法. easyui的datagrid支持可编辑功能.它使用户能够向数据网格中添加一个新行.用户也可以更新一个或多个行. 下面是我在项目中的实现代码: 第一步:引用 easyui.css jquery-1.8.1.min.js jquery.easyui.min.js 第二步:Html和Javascript代码 <h2>Editable DataGrid Demo</h2> &l

【Redis+PHP】利用redis的zset实现游戏排行榜功能

1.需求:①完成游戏排行榜实时刷新 ②查看当前用户的排名.积分 2.参考文章:https://www.cnblogs.com/clubs/p/11691580.html (博主强推) https://www.cnblogs.com/anny-1980/p/4583806.html  (Redis的ZSET有序集合常用语法) 3.实现原理:不使用MySQL进行存储,改用redis的zset实现,单机支持百万级并发,数据热更新 4.附录我自己封装好的一个laravel5的Redis排行榜类: <?p

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的缓存来进行实现,并且结合mysql数据库一起,先来看一个流程图. 这个就是一个典型的对http请求进行全局限流的流程图. 入口通过请求拦截器进行拦截(filter). 来看代码片段,这个代码片段就是一个标准的filter(我们这里基于springboot来定义filter) 我们需要做全局限流时,就需要用到redis了.在redis中,可以将限流配置定义为 re

Watchdogs利用Redis实施大规模挖矿,常见数据库蠕虫如何破?

背景2月20日17时许,阿里云安全监测到一起大规模挖矿事件,判断为Watchdogs蠕虫导致,并在第一时间进行了应急处置. 该蠕虫短时间内即造成大量Linux主机沦陷,一方面是利用Redis未授权访问和弱密码这两种常见的配置问题进行传播,另一方面从known_hosts文件读取ip列表,用于登录信任该主机的其他主机.这两种传播手段都不是第一次用于蠕虫,但结合在一起爆发出巨大的威力. 然而Watchdogs并不是第一个造成这般影响的Redis蠕虫.截至目前,Redis配置问题已惨遭40余种蠕虫**

redis实现分页

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

[DB][MyBatis]利用mybatis-paginator实现分页(目前看到MyBatis下最好的分页实现)

利用mybatis-paginator实现分页 1.mybatis-paginator简介 mybatis-paginator是gethub上的一个开源项目.用于java后台获取分页数据.该开源项目还提供一个列表组件(mmgrid)用于前端展示. 该开源项目地址:https://github.com/miemiedev 2.该开源项目的使用说明: Maven中加入依赖: <dependencies> ... <dependency> <groupId>com.githu

利用Redis撤销JSON Web Token产生的令牌

利用Redis撤销JSON Web Token产生的令牌 作者:chszs.版权全部.未经允许,不得转载.博主主页:http://blog.csdn.net/chszs 早先的博文讨论了在Angular.js和Node.js中使用jsonwebtoken实现认证授权的案例.这里要说明一下,当用户点击了"注销"button,用户的令牌在Angular端会从授权认证服务AuthenticationService中移除,可是此令牌仍旧是有效的,还能够被攻击者窃取到.用于API调用,直至jso