核心内容摘要
IEEE 802.1 Qbv协议实战:如何用EST增强工业网络流量调度(附配置示例)
Lua语言是在1993年由巴西一个大学研究小组发明其设计目标是作为嵌入式程序移植到其他应用程序它是由C语言实现的虽然简单小巧但是功能强大所以许多应用都选用它作为脚本语言尤其是在游戏领域暴雪公司的“魔兽世界”“愤怒的小鸟”Nginx将Lua语言作为扩展。
Redis将Lua作为脚本语言可帮助开发者定制自己的Redis命令。
Redis
6 版本通过内嵌支持 Lua 环境。
也就是说一般的运用是不需要单独安装Lua的。
为什么使用Lua
减少网络开销在Lua脚本中可以把多个命令放在同一个脚本中运行
原子操作Redis会将整个脚本作为一个整体执行中间不会被其他命令插入。
换句话说编写脚本的过程中无需担心会出现竞态条件
复用性客户端发送的脚本会存储在Redis中这意味着其他客户端可以复用这一脚本来完成同样的逻辑
怎么使用eval script numkeys key[key...]arg[arg...]
script 参数是一段 Lua 脚本程序它会被运行在Redis 服务器上下文中这段脚本不必也不应该定义为一个 Lua 函数。
numkeys 参数用于指定键名参数的个数。
key [key…] 参数从 eval 的第三个参数开始算起使用了 numkeys 个键key表示在脚本中所用到的那些 Redis 键key这些键名参数可以在 Lua 中通过全局变量 KEYS 数组用1为基址的形式访问KEYS[1],KEYS[2]···。
arg [arg…]参数可以在 Lua 中通过全局变量 ARGV 数组访问访问的形式和 KEYS 变量类似ARGV[1],ARGV[2]···。
evalreturn redis.call(mset,KEYS[1],ARGV[1],KEYS[2],ARGV[2])2goudan wangcai111222
Redis与限流
使用RedisLua语言实现限流
限流算法
固定窗口算法简单粗暴但是有临界问题
-
滑动窗口算法算法演示不会出现边界问题但是主要缺陷是内存占用较高因为需要存储每个请求的时间戳当限流阈值大或请求频繁时zset会积累大量元素。
另外ZREMRANGEBYSCORE和ZCARD操作的时间复杂度是O(logN)高并发下可能对Redis性能有一定影响。
-
漏洞算法漏桶核心是请求来了以后直接进桶然后桶根据自己的漏洞大小慢慢往外面漏。
但是处理突发情况下处理差