大家好,我是程序员若风,又到了技术分享时刻。
概要
在某些场景下,我们需要频繁的使用到缓存,比如需要获取多个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批处理操作。