0
点赞
收藏
分享

微信扫一扫

【数据集】GSOD全球逐日气象站点日度数据

乌龙茶3297 2024-02-23 阅读 10

大家好,我是程序员若风,又到了技术分享时刻。

概要

在某些场景下,我们需要频繁的使用到缓存,比如需要获取多个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批处理操作。

举报

相关推荐

0 条评论