当前位置: 首页 > news >正文

【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;});}通过上面的方法,我们就能满足要求。当然,我们这里用到了管道的技术,这个技术我会单独写一篇文章。
        
    • 除了上面管道的方法,也有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批处理操作。

相关文章:

  • AI绘画与修图:重塑数字艺术的新纪元
  • MedicalGPT 训练医疗大模型,实现了包括增量预训练、有监督微调、RLHF(奖励建模、强化学习训练)和DPO(直接偏好优化)
  • vue2与vue3的diff算法有什么区别
  • 带你快速学习Python数据类型转换
  • 《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(8)
  • Linux Driver | 设备树开发之初识设备树
  • Android14 InputManager-ANR原理
  • 华清远见作业第四十一天——Qt(第三天)
  • Redis高性能原理
  • 掌握Docker:让你的应用轻松部署和管理
  • 使用openai-whisper实现语音转文字
  • 外汇天眼:外汇交易不可不知的8大风险!
  • 欧放ER-2024年1月 AI论文速递
  • Draw.io绘制UML图教程
  • vue3新特性-defineOptions和defineModel
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • angular2 简述
  • co模块的前端实现
  • DataBase in Android
  • Date型的使用
  • django开发-定时任务的使用
  • Git 使用集
  • HTTP 简介
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java到底能干嘛?
  • JDK 6和JDK 7中的substring()方法
  • js操作时间(持续更新)
  • PHP变量
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 计算机在识别图像时“看到”了什么?
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 问题之ssh中Host key verification failed的解决
  • 携程小程序初体验
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 走向全栈之MongoDB的使用
  • ionic入门之数据绑定显示-1
  • 正则表达式-基础知识Review
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • (10)STL算法之搜索(二) 二分查找
  • (14)Hive调优——合并小文件
  • (33)STM32——485实验笔记
  • (day 12)JavaScript学习笔记(数组3)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (转)平衡树
  • (转载)Linux网络编程入门
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • **PHP分步表单提交思路(分页表单提交)
  • . ./ bash dash source 这五种执行shell脚本方式 区别