惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
云风的 BLOG
云风的 BLOG
I
InfoQ
小众软件
小众软件
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
雷峰网
雷峰网
P
Proofpoint News Feed
腾讯CDC
H
Help Net Security
V
Visual Studio Blog
美团技术团队
F
Fortinet All Blogs
MongoDB | Blog
MongoDB | Blog
阮一峰的网络日志
阮一峰的网络日志

博客园 - 整鬼专家

反向代理服务 Http认证(鉴权) 跨域问题 SSE客户端C++实现(使用libcurl) 使用libcurl/curlpp进行http通信 零拷贝IO libuv进程 libuv线程 libuv网络操作 libuv文件系统 libuv概述 MySQL Cluster与Replication Redis集群 Redis持久化 Redis进阶——事务、TTL、排序、消息通知、管道 Redis数据类型 Redis安装 行为设计模式 结构型设计模式
Redis脚本
整鬼专家 · 2021-12-29 · via 博客园 - 整鬼专家

  Redis支持使用Lua编写脚本传到Redis服务中执行,在脚本中可以通过redis.call()函数来调用Redis命令。使用脚本的好处有:

    

  有时候一系列的Redis操作可能比较麻烦,可以将这些操作写入到Lua脚本中来让Redis执行,也就是通过编写Lua脚本可使得操作Redis更加简单。

  以下是脚本文件 scriptName.lua中的Lua代码,实现了不使用事务来完成一个IP地址在10秒内最多访问3次的功能。可以使用Redis客户端来执行这个脚本,如输入命令redis-cli --eval scriptName.lua rate.limiting:127.0.0.1 , 10 3 来执行scriptName.lua脚本(需要注意逗号前后的空格不能省略),代码中的KEYS[1]即是rate.limiting:127.0.0.1,ARGV[1]是10,ARGV[2]是3。

    auto times = redis.call('incr', KEYS[1]) //调用INCR命令获得访问次数
    if times == 1 then //第一次访问
        redis.call('expire', KEYS[1], ARGV[1]) //调用EXPIRE命令设置生存时间
    end
    if times > tonumber(ARGV[2])then
        return 0; //访问次数超限
    end
        return 1; //正常访问