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

推荐订阅源

Vercel News
Vercel News
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
小众软件
小众软件
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
WordPress大学
WordPress大学
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
罗磊的独立博客
The Cloudflare Blog
V
V2EX
月光博客
月光博客
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
博客园 - 【当耐特】
T
Tailwind CSS 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; //正常访问