我是靠谱客的博主 听话口红,最近开发中收集的这篇文章主要介绍php hscan,hgetall 替代 hscan的用法详解。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

众所周知hgetall 如果遇到redis 中的bigkey会造成慢查,严重的甚至直接卡死redis 服务进程。redis 提供了hscan 的替代方案。本例使用yield 协程。来实现对hscan key的遍历。

下面是错误的示例,原因cursor 无法进行递进,这是个大坑。所以改造下

function hscanKey($key, $count = 5, $pattern = '*')

{

$cursor = null;

$redisInstance = //cache::connect('order')->getInstance();//这里实现对redis 的链接

do {

if ($result = $redisInstance->hscan($key, $cursor, $pattern, $count)) {

yield $result;

}

$cursor++;

} while (!empty($result));

}

try {

$nowTimeStamp = time();

foreach (hscanKey('unReadOrders', 1000) as  $allUnReadOrders) {

foreach ($allUnReadOrders as $allUnReadOrderKey => $allUnReadOrder) {

}

}

echo 'done';

}catch (Exception $ex){

logDebug($ex->getMessage(),'unReadOrders_cron');

}

//使用原生的rawCommand 替代redis 扩展封装的hscan

public functionhscanKey($key,$count=5,$pattern='*'){$cursor=0;$gs=newVendorRedisCommonGathinRedis();$redisInstance=$gs::getInstance();$redisInstance->setOption(4,1);do{if($result=$redisInstance->rawCommand('hscan',$key,$cursor,'match',$pattern,'count',$count)) {if(count($result) >1) {$cursor=$result[0];yield$result[1];}else{break;}}}while(!empty($cursor));}

//统计场次的关注人数public functionfollow($site_id,$userInfo,$action){$gs=newVendorRedisCommonGathinRedis();//实例化redis$Cache=$gs::getInstance();if($action==1) {//设置if(!empty($userInfo)) {$UM=newUserModel();$msg=$UM->getNewUserMsg($userInfo['uid']);$ret=$Cache->hset($site_id,$userInfo['uid'],json_encode(['uid'=>$userInfo['uid'],'icon'=>$msg['avatar']]));}}else{//读取$data['count'] =0;$data['list'] = [];if(!empty($site_id)) {$data['count'] =$Cache->hlen($site_id);$i=0;foreach($this->hscanKey($site_id,3)as$rows) {foreach($rowsas$key=>$val) {if($key%2==0) { //偶数为key$uid=$val;}else{//奇数为data$row= json_decode($val, true);$data['list'][] =$row;}}}}return$data;}}

最后

以上就是听话口红为你收集整理的php hscan,hgetall 替代 hscan的用法详解。的全部内容,希望文章能够帮你解决php hscan,hgetall 替代 hscan的用法详解。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部