当前位置:   article > 正文

【PHP进阶】Redis批处理缓存

【PHP进阶】Redis批处理缓存

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

概要

在某些场景下,我们需要频繁的使用到缓存,比如需要获取多个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;
          });
         }
         通过上面的方法,我们就能满足要求。当然,我们这里用到了管道的技术,这个技术我会单独写一篇文章。
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
    • 除了上面管道的方法,也有redis官方的命令能够直接批量获取缓存
      + mget
      + hmget

  • 批量删除缓存
    • 批量删除缓存同上面批量获取缓存一样,也可以使用管道来直接删除我们想要删除的健
         public function delMul(array $keys)
         {
           RedisConnect->pipeline(function ($pipe) use ($keys) {
            foreach ($keys as $cacheKey) {
                $pipe->del($cacheKey);
            }
            });
          }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 批量设置缓存
         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']);
              }
          });
      }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

总结

Redis批处理算是redis我们实战中的一种进阶玩法,有的低流量项目,你不用Redis都可以,如果用上了Redis,用单一操作也是足够了,但是如果我们想要低延时,高性能的服务。那么你肯定绕不开Redis批处理操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/146591
推荐阅读
相关标签
  

闽ICP备14008679号