• 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解决订单限流的实际问题

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了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解决订单限流的实际问题

相关文章

  • 微信小程序中如何实现子向父传参(页面通信)
  • 介绍Mysql位运算简化一对多关系
  • PHP如何根据ip查询详细地址
  • PHP如何判断是手机访问还是电脑访问
  • Thinkphp5中是如何自定义全局异常
  • 讲解Laravel8.5是如何添加验证码mews/captcha的
  • Photoshop制作梦幻炫彩光斑文字效果教程
  • uniapp如何取消原生导航栏
  • PhotoShop制作蓝色梦幻动漫签名溶图教程
  • 你值得了解的一种CSS获取图片主题色的小技巧(分享)

文章分类

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

最近更新的内容

    • 分享一个Golang Http 验证码示例
    • PHP怎么实现正则去掉空格
    • Photoshop制作华丽的金色礼品字
    • Javascript如何获取用户输入的值
    • PS+AI设计制作复古的霓虹灯字体效果教程
    • Laravel8.5添加用户权限管理的方法详解
    • vue.js如何实现移入移出效果
    • N种使用 CSS 实现三角形的技巧
    • 如何给WordPress主题评论框加上阿鲁表情
    • PHPCMSV9采集网址重复的解决办法 array_unique函数

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

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