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

怎么做网站点击率监控工具网站推广托管

怎么做网站点击率监控工具,网站推广托管,天津百度推广排名,天津市建设银行网站文章目录 背景一、Eval二、EvalSHA三、Redis 对 Lua 脚本的管理3.1 script flush3.2 script exists3.3 script load3.4 script kill 四、Lua在Redis中原子性执行的原理 背景 Lua 本身是一种轻量小巧的脚本语言#xff0c;在Redis2.6版本开始引入了对Lua脚本的支持。通过在服务… 文章目录 背景一、Eval二、EvalSHA三、Redis 对 Lua 脚本的管理3.1 script flush3.2 script exists3.3 script load3.4 script kill 四、Lua在Redis中原子性执行的原理 背景 Lua 本身是一种轻量小巧的脚本语言在Redis2.6版本开始引入了对Lua脚本的支持。通过在服务器中嵌入Lua环境Redis客户端就可以使用Lua脚本直接在服务器端原子地执行多个Redis命令。在Redis中Lua有两种执行方式Eval和EvalSHA。 一、Eval 通过Redis内置的 Lua 解释器可以使用 EVAL 命令也可以使用redis-cli 的–eval 参数对 Lua 脚本进行解析。需要注意的点是执行Lua也会使Redis阻塞。 Eval命令的执行过程主要可以分为三个步骤 根据客户端给定的Lua脚本在Lua环境中定义一个Lua函数Lua函数的名称实际上是f_为前缀加上脚本本身计算出来的SHA1值组成如f_ddfsdfjgjbg33rndgj00SHA1的长度是40字符而函数体则是脚本本身。将客户端给定的脚本保存到lua_scripts字典简单来说就是添加一个key-valuekey就是Lua脚本的SHA1校验和而值是Lua脚本本身这主要是用于以后使用。执行第一步在Lua环境中定义的函数以此来执行客户端中给定的Lua脚本。 在Redis中使用了Key列表和参数列表来为Lua脚本提供更多的灵活性执行Eval命令的格式为 eval 脚本内容 key个数 key列表 参数列表栗子1 eval return hello lua 0栗子2 127.0.0.1:6379 eval return hello .. KEYS[1] .. ARGV[1] 1 redis world执行返回hello world二、EvalSHA EvalSHA 中方式的是拆分成两个步骤首先要将Lua脚本加载到Redis服务端得到该脚本的SHA1校验码。然后使用EvalSHA命令使用SHA1作为参数可以直接执行对应Lua脚本。这样做的好处是可以避免每次发送Lua脚本的开销而脚本也会常驻在服务端脚本功能得到了复用。缺点是要怎么管理这些脚本和命令过多的话会占用Redis的内存。 在介绍Eval命令执行过程中第一步会在Lua环境中生成一个Lua脚本对应的函数形如f_dfdugndgub320433只要脚本对应的函数在Lua中定义过那么即使不知道脚本的内容本身客户端也是可以根据脚本的SHA1来调用脚本对应的函数从而达到执行脚本的目的这也就是EvalSHA命令的实现原理。 EvalSHA命令的一般格式 evalsha sha1值 key个数 key列表 参数列表如 eval return hello lua 0 // 执行完eval后Lua环境就定义了一个函数名为f_dfaujjgdgu388vdf83803(),那么就可以根据对应的sha1值来调用函数了。 evlsha dfaujjgdgu388vdf83803 0三、Redis 对 Lua 脚本的管理 除了Eval和EvalSHA命令之外Redis中与Lua脚本相关的命令还有script flush、script exists、script load以及script kill。 3.1 script flush script flush命令用于清除服务器中的所有和Lua脚本相关的信息这个命令会释放并重建lua_scripts字典关闭现有的Lua环境并重建一个新的Lua环境。 命令格式 script flush栗子 127.0.0.1:6379 script flush OK3.2 script exists script exists命令会根据输入的SHA1校验和检查校验和对应的脚本是否存在于服务器中。该命令主要是通过检查给定的SHA1是否存在于lua_scripts字典来实现的。 命令格式 script exists sha1[sha1…]返回结果代表 sha1[sha1…]被加载到 Redis 内存的个数。 栗子 127.0.0.1:6379 script exists 5ea77eda7a16440abe244e6a88fd9df204ecd5aa 1) (integer) 13.3 script load script load命令和Eval命令执行Lua脚本的前两步完全一样该命令首先在Lua环境中创建相对应的函数然后再将脚本保存到lua_scripts字典中。 命令格式 script load lua脚本栗子 127.0.0.1:6379 script load return hello lua 5ea77eda7a16440abe244e6a88fd9df204ecd5aa3.4 script kill 如果Lua脚本比较耗时甚至Lua脚本存在问题那么此时Lua脚本的执行会阻塞Redis直到脚本执行完毕或 者外部进行干预将其结束就可以使用script kill来杀掉正在执行的 Lua 脚本。 举个栗子 ## 写一个死循环的lua脚本并在redis客户端执行 127.0.0.1:6379 eval while 11 do end 0 ## 重新起一个客户端去执行命令返回了报错信息此时Redis已经阻塞无法处理正常的调用这时可以选择继续等待。 ## 但更多时候需要快速将脚本杀掉。使用shutdown save显然不太合适所以选择script kill当script kill执行之后客户端调用会恢复 127.0.0.1:6379 get test (error) BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE. ## 另起一个客户端停止脚本执行 127.0.0.1:6379 script kill OK 127.0.0.1:6379 get k1 11此外Redis提供了一个lua-time-limit参数用于配置Lua脚本执行的超时时间当 Lua 脚本时间超过lua-time-limit后向其他命令调用发送BUSY的信号并不会停止掉服务端和客户端的脚本执行所以当某个Lua脚本执行达到lua-time-limit值之后其他客户端在执行正常的命令时将会收到“Busy Redis is busy running a script”错误并且提示使用script kill或者shutdown nosave命令来杀掉这个 busy 的脚本。 实际上如果Redis服务端设置了lua-time-limit参数那么在每次执行Lua脚本之前服务器都会在Lua环境里面设置一个超时的处理钩子(hook)。超时处理钩子再脚本运行期间会定期检查脚本已经运行了多长时间一旦钩子发现脚本的运行时间已经超过了lua-time-limit设定的时长那么钩子将定期在脚本运行的间隙中查看是否有script kill或者shutdown nosave到达服务器。如果超时运行的脚本未执行过任何的写入操作那么客户端可以通过script kill命令停止脚本的运行并向执行该脚本的客户端发送一个错误回复。处理完script kill命令后服务器可以继续运行。 此外如果超时脚本已经执行过写入操作那么客户端只能用shutdown nosave命令来停止服务器从而防止不合法的数据被写入。 四、Lua在Redis中原子性执行的原理 在Redis中Lua脚本能够保证原子性的主要原因还是Redis采用了单线程执行模型。也就是说当Redis执行Lua脚本时Redis会把Lua脚本作为一个整体并把它当作一个任务加入到一个队列中然后单线程按照队列的顺序依次执行这些任务在执行过程中Lua脚本是不会被其他命令或请求打断因此可以保证每个任务的执行都是原子性的。 这块儿想要继续了解的可以参考为什么Redis单线程却能支撑高并发Redis6.0之后为什么又引入多线程 在实际开发中为了提高效率通常我们能让lua脚本接收多个参数一次发送到Redis服务端还能将key进行整理将相同slot的key放到同一批进行处理这在性能优化中能减少网络传输的开销同时也能并发的发送给Redis服务端。
http://www.dnsts.com.cn/news/48664.html

相关文章:

  • 农药放行单在哪个网站做wordpress搭建电商教程
  • dede如何手机网站和电脑网站的数据同步更新做网站需要知道哪些事情
  • 在建立网站站点的过程中深圳代理记账多少钱一月
  • 查询公司信息去哪里查aso优化什么意思
  • 网站备案一天通过html新闻列表
  • 网站 前台 后台h5响应式网站
  • 同安建设局网站网站建设及网站推广
  • 网站中flash专业做包包的网站
  • 网站域名需要续费的吗身边的网络营销案例
  • 淘宝联盟合作网站api网站建设的实验原理
  • 手机怎样使用域名访问网站wordpress标题title优化代码
  • 专业排名优化网站wordpress后台加载速度慢
  • 自己做网站要会什么软件前端vue低代码开发平台
  • 个人网站介绍模板下载网站建设注意的问题
  • 莉莉卡是哪个网站做的泉州免费网站制作
  • 公司画册设计网站网建公司浅谈网站建设的目的和意义
  • 企业招聘网站模板宁夏建设工程交易中心网站
  • 分类信息系统网站模板线上销售的方法和技巧
  • 湖南火电建设有限公司网站下载应用市场软件
  • 菜单微网站网站建设费用大概多少钱
  • 如何将网站内容做chm软件应用商店下载免费
  • 做移动网站设计网络综合设计实验报告
  • 国外的调查网站上做问卷做ppt医学专业图片网站
  • 山东平台网站建设制作网站规划主要内容
  • 网站建设制作公司 首推万维科技山西营销型网站建设
  • 装修公司网站模板wordpress修改中文字体
  • 网站开发设计实训总结连锁店进销存软件
  • 学习网站建设与管理网站站长
  • 学院 网站 两学一做建设银行官方网站是什么
  • 做网站的软件项目进度计划网站用excel做数据库吗