Laravel中处理接口并发

2021-02-1315:22:50后端程序开发Comments1,773 views字数 628阅读模式

日常业务逻辑中经常会出现接口并发处理,最常见的是同一个接口被瞬间调了好几次,导致产生的数据错乱
为了避免这种问题发生,一般前端、移动端会限制按钮触发接口限制,后端接口调用限制。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/20941.html

说在前面

该方法仅适用于简单的接口频率限制。并不适用于商品秒杀,但原理类似。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/20941.html

原 理

这只是一个简单的实现过程,主要用了 redis 原生的 set 方法类给 key 设置值的时候设置过期时间,如果改 key 存在 ,则返回 false。如果不存在则设置值同时设置过期时间,返回 true。 避免了死锁的出现。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/20941.html

代码部分:

/**
 * 简单处理并发
 * @User yaokai
 * @param $key 要设置的key
 * @param int $ttl 限制过期时间
 * @param int $value 要设置的值
 * @return bool true成功  false失败
 */
function redisConcurren($key, $ttl = 240, $value = 1)
{
    // 实例化原生 redis
    $redis = new \Redis();
    
    // 指定需要使用的 redis 服务器
    $redis->connect(config(''));
    // 设置密码
    $redis->auth(config(''));
    // 设置默认的 redis 库
    $redis->select(config(''));
    // 利用原生的set方法设置一个key的过期时间
    $status = $redis->set($key, $value, array( 'nx', 'ex' => $ttl ));
    
    return $status;
}
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/20941.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/20941.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定