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

推荐订阅源

Google DeepMind News
Google DeepMind News
博客园 - 聂微东
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
大猫的无限游戏
大猫的无限游戏
GbyAI
GbyAI
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
The GitHub Blog
The GitHub Blog
博客园_首页
博客园 - 叶小钗
腾讯CDC
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
宝玉的分享
宝玉的分享
D
Docker

博客园 - 整鬼专家

反向代理服务 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; //正常访问