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

手机网站插件代码《网站开发与应用

手机网站插件代码,《网站开发与应用,wordpress制作自定义页面的方法,网站优化设计基于Redis实现令牌桶算法 令牌桶算法算法流程图优点缺点 实现其它限流算法 令牌桶算法 令牌桶是一种用于分组交换和电信网络的算法。它可用于检查数据包形式的数据传输是否符合定义的带宽和突发性限制(流量不均匀或变化的衡量标准)。它还可以用作调度算…

基于Redis实现令牌桶算法

  • 令牌桶算法
      • 算法流程图
      • 优点
      • 缺点
    • 实现
    • 其它限流算法

令牌桶算法

令牌桶是一种用于分组交换和电信网络的算法。它可用于检查数据包形式的数据传输是否符合定义的带宽和突发性限制(流量不均匀或变化的衡量标准)。它还可以用作调度算法来确定符合带宽和突发性限制设置的传输时序。

算法流程图

如图所示,令牌桶算法可以描述为:

  • 令牌桶初始大小和容量为X
  • 以一定速率Y向令牌桶中添加令牌,如果令牌桶满了,忽略多余令牌
  • 每次请求令牌桶拿Z个令牌,如果当前令牌桶不足,则拒绝当前请求

令牌桶图示

优点

  • 平滑流量:
    令牌桶可以通过控制令牌放入速率(Y)平滑流量,防止过高负载导致系统崩溃
  • 可以处理突发流量
    令牌桶可以积累一定量的令牌以应对突发流量
  • 灵活
    通过调整令牌桶的容量和令牌放入速率,可以灵活地控制突发容量和请求的平均处理速率。这种灵活性使得令牌桶算法能够适应不同应用场景。

缺点

  • 资源占用
    令牌桶算法需要维护当前令牌数和上次放入时间, 这会耗费较高的计算资源。
  • 参数调整复杂
    令牌桶算法需要调整容量(X)、速率(Y)和每次请求令牌数量(Z),不合适的参数有可能导致请求分配不公平乃至饥饿请求(长时间无法获取到令牌的请求)。
  • 依赖系统时间
    令牌桶算法在计算令牌数量时依赖于系统时间。如果系统时间发生异常(如时间回拨),则可能会导致算法失效或产生不可预测的结果。

实现

本文是使用Redis的Lua脚本来实现的

--- 实现令牌桶算法
-- 以一定的频率向令牌桶中放入令牌, 其它人使用时获取令牌, 如果能够获取成功
local expire_time = 3600 -- 1个小时失效
local bucket_size = 20 -- 一个桶最多有20张令牌
local bucket_speed = 3.5 -- 每秒增加令牌的个数
local requests_token = 1 -- 请求一次耗费的令牌数local time = redis.call('TIME')
local current_time = time[1] * 1000 + time[2] / 1000 -- TIME返回的是 秒,纳秒.  这里转换成微秒
local token = KEYS[1]-- 获取当前剩余令牌数
local bucket = redis.call('HGETALL', token)
local ret = 0
if table.maxn(bucket) == 0 then-- 令牌桶已失效或者还没有设置redis.call('HSET', token, 'lastRefillTime', current_time)redis.call('HSET', token, 'tokensRemain', bucket_size - requests_token)redis.call('PEXPIRE', token, expire_time * 1500)ret = 1
else-- 上次填充时间local lastRefillTime = tonumber(bucket[2])-- 剩余令牌数local tokensRemain = tonumber(bucket[4])-- 距离上次调用时间local cost_time = current_time - lastRefillTimeif cost_time < 0 then-- 发生了时间回拨, 令牌不再增加current_time = lastRefillTimeif tokensRemain >= requests_token thentokensRemain = tokensRemain - requests_tokenret = 1endelseif tokensRemain >= 1 or cost_time * bucket_speed / 1000 >= requests_token thentokensRemain = math.min(tokensRemain + (cost_time * bucket_speed / 1000) - requests_token, bucket_size - requests_token)ret = 1elsetokensRemain = tokensRemain + (cost_time * bucket_speed / 1000)ret = 0endredis.call('HSET', token, 'lastRefillTime', current_time)redis.call('HSET', token, 'tokensRemain', tokensRemain)redis.call('PEXPIRE', token, expire_time * 1500)
end
return ret

其它限流算法

  • 计数器算法
  • 滑动窗口算法
  • 漏桶算法
http://www.yayakq.cn/news/896662/

相关文章:

  • 可以玩h5的网站成都网站建设四川推来客网络
  • 3d网站带后台下载大连建设主管部门网站
  • 公司网站修改怎么做淘宝直通车
  • 网站关键词百度搜不到上海设计公司官网
  • 做短租公寓民宿网站上海做外贸建站的专业公司
  • 网站设计 线框图华强北做网站
  • 怎样做公司官方网站蒙古文政务网站群建设工作方案
  • 自己的网站怎么做app天水网站建设惠普
  • 力软敏捷开发框架可以做网站后台可以提升自己的网站
  • 小型企业网站建设项目wordpress不收录
  • 百度上网站怎么做网页设计基础实训期末试卷和答案
  • 建筑模板有几种优化网站推广教程排名
  • 网站维护主要做哪些菠菜网站怎么做推广比较好
  • 江苏省建设部网站wordpress制作索引页
  • tomcat 建网站制作图片用什么软件好
  • 网站建设公司有哪些内容wordpress 自动发文章
  • 怎么用自己主机做网站想做一个自己的网站怎么做
  • wild合成版是哪个网站做的第三方微信网站建设
  • 爱站长尾关键词挖掘工具网站公司说我们做的网站服务器不够用
  • 建设通查询设通网站中建八局一公司待遇怎么样
  • 成立网站wordpress 源码
  • 怎么把网站挂在服务器如何判断网站是用什么程序做的
  • 惠州企业网站建设公司wordpress启用旧的编辑器
  • 百度做一个网站怎么做呢网页界面设计常用分辨率是多少dpi
  • 网站建设企业做哪个网站最简单
  • 企业网站建设的趋势群辉做网站
  • 哪里有做杂志的免费模板下载网站wordpress query post
  • 新网站如何做sem长春做网站好的公司
  • 大庆网站优化阿里备案网站
  • 临沂seo整站优化厂家苏州企业管理咨询服务