• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > PHP+Redis解决订单限流的实际问题

PHP+Redis解决订单限流的实际问题

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了PHP+Redis,订单限流等相关知识,希望对您有所帮助

PHP+Redis解决订单限流的实际问题,如何用Redis给订单限流,如每M秒允许N个访问。

解决方案:

<?php     /**     * 是否允许放行     * @param string $key       redis键前缀     * @param int $timeInterval 时间间隔(秒)     * @param int $max          时间间隔内最大放行数     * @return bool             是否放行     * @throws Exception     * @example     * <pre>     * //每秒放行一个     * isAllow('my_allow');     *     * //每秒放行3个     * isAllow('my_allow',1,3);     *     * //每3秒放行2个     * isAllow('my_allow',3,2);     */    function isAllow(string $key, int $timeInterval=1, int $max=1):bool{        if($timeInterval<1){            throw new Exception('时间间隔必须大于0');        }        if($max<1){            throw new Exception('最大放行数必须大于0');        }         $redis=new Redis();        $redis->connect('192.168.31.187');        if(!$redis->isConnected()){            throw new Exception('Redis服务连接失败');        }         //对时间戳取模,使得每$timeInterval秒取得同一个时间戳        $time=time();        $key.=':'.($time-($time%$timeInterval));         //自增并返回自增后的结果        $index=$redis->incr($key);         //如果是第一个访问,设置键的过期时间        if($index===1){            $redis->expire($key,$timeInterval+1);        }         return $index<$max+1;    }


代码解读:

对时间取模,使得键名每$timeInterval秒更新一次

incr()方法自增键的值,如果键不存在则先创建一个值为0的键再进行自增

根据自增原理,同键名下第N次自增返回的值就是N

键名每$timeInterval秒更新一次,所以在创建键的$timeInterval+1秒后键就不再有价值

以上,欢迎大家提问、纠错、补充、优化。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • PHP+Redis解决订单限流的实际问题

相关文章

  • 2022-04-29vue简单实现转盘抽奖
  • 2022-04-29node_modules中如何优雅的修改依赖库?方法介绍
  • 2022-04-29Photoshop制作梦幻光影效果的艺术字教程
  • 2022-04-29常用的前端JavaScript方法封装
  • 2022-04-29PHPSpreadsheet导出Excel列数超过26报错怎么办?
  • 2022-04-29百度更加重视和同行交换连接,事实证明
  • 2022-04-29PHP上传目录禁止执行php文件实例讲解
  • 2022-04-29corelDRAW 9 打造水晶表情
  • 2022-04-29微信小程序wx.request请求数据报错
  • 2022-04-29DEDECMS列表页缩略图添加alt信息的方法

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Vue多个路由绑定同一组件造成created不执行的解决办法
    • 如何禁用WordPress5.5自带Sitemap
    • Laravel怎么判断是否登录
    • CentOS7挂载新的数据盘
    • PS制作质感的立体字
    • PHP如何接入微信支付分(代码示例)
    • Photoshop巧用素材合成绚丽美女海报教程
    • 为kindsoft编辑器替换SyntaxHighlighter代码高亮,整合
    • Photoshop快速制作绚丽的彩色透明心形
    • ThinkPHP5把动态链接库赋给变量而导致的执行多条sql数据合并问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有