赞
踩
大家好,我是程序员若风,又到了技术分享时刻。
在某些场景下,我们需要频繁的使用到缓存,比如需要获取多个key值,如果采用单个拿缓存的办法,会造成网络IO极大的浪费,所以我们需要用户Redis的批处理。
我们以获取社区UGC内容为例子, 如果需要同时获取10条UGC内容的点赞量,当然,点赞量我们是以集合的方式来存储的,每一条UGC都对应的点赞集合,所以,如果我们要获取这10条点赞的数量,就只能用循环的方式去读取。这样就会造成网络IO的浪费,我们需要采用批量获取的方式来拿数据
public function mgetSetCount($arr)
{
return RedisConnect->pipeline(function ($pipe) use ($arr) {
$c = [];
foreach ($arr as $key=>$value) {
$c[] = $pipe->scard($value);
}
return $c;
});
}
通过上面的方法,我们就能满足要求。当然,我们这里用到了管道的技术,这个技术我会单独写一篇文章。
除了上面管道的方法,也有redis官方的命令能够直接批量获取缓存
+ mget
+ hmget
public function delMul(array $keys)
{
RedisConnect->pipeline(function ($pipe) use ($keys) {
foreach ($keys as $cacheKey) {
$pipe->del($cacheKey);
}
});
}
public function MulSet(array $arr)
{
return RedisConnect->pipeline(function ($pipe) use ($arr) {
foreach ($arr as $item) {
if (!$item['key'] || !$item['value'] || !$item['ttl']) {
continue;
}
$pipe->set($item['key'], $value, 'EX', $item['ttl']);
}
});
}
Redis批处理算是redis我们实战中的一种进阶玩法,有的低流量项目,你不用Redis都可以,如果用上了Redis,用单一操作也是足够了,但是如果我们想要低延时,高性能的服务。那么你肯定绕不开Redis批处理操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。