【Nginx内嵌lua脚本,结合Redis使用】教程文章相关的互联网学习教程文章

php使用lua+redis实现限流,计数器模式,令牌桶模式

lua 优点减少网络开销: 不使用 Lua 的代码需要向 Redis 发送多次请求, 而脚本只需一次即可, 减少网络传输;原子操作: Redis 将整个脚本作为一个原子执行, 无需担心并发, 也就无需事务;复用: 脚本会永久保存 Redis 中, 其他客户端可继续使用. 计数器模式:利用lua脚本一次性完成处理达到原子性,通过INCR自增计数,判断是否达到限定值,达到限定值则返回限流,添加key过期时间应该范围过度 $lua = local i = redis.call("INCR", KEYS[...

使用redis+lua实现SQL中的select intersect的效果【代码】

1.需求 业务中需要实现在两个集合中搜索数据,并返回交集。 用SQL的伪代码可以描述如下: select key from set1 where sorted_key between min and max INTERSECT select key from set2 where sorted_key between min and max2.现有存储格式 业务使用了redis的有序集合(sorted set)来存储数据: set1 ->field1 -> value1field2 -> value2 set2 ->field1 -> value1field2 -> value2常规的思路是: # 分页拉取KEY1,然后分页拉取KEY2...

nginxlua和redis解决saltstack传输文件慢的问题

前言: saltstack是个好东西,我现在很多的api接口都开始用saltstack做。有的时候会有在页面上传文件,然后推送到客户端的情况。或者是把安装配置的安装包推送到客户端。 唉, salstack下发文件慢,大家有没有头疼过,我是真的头疼过。 其实说起来大家也没必前言:saltstack是个好东西,我现在很多的api接口都开始用saltstack做。有的时候会有在页面上传文件,然后推送到客户端的情况。或者是把安装配置的安装包推送到客户端。 唉, ...

Nginx+LuaJIT+Redis编译配置教程

最近工作上需要本地开发机模拟服务器的环境, 最初的需求考虑是 需要搭建 Nginx + Luajit + Redis 组合的配置, 因为本博客所在主机 中使用的是一样的方式配置, 当时就直接参考自己的操作笔记, 重新 搭建一套在开发机上. 因为这些都是基础的系统配置信息,干脆最近工作上需要本地开发机模拟服务器的环境, 最初的需求考虑是 需要搭建 Nginx + Luajit + Redis 组合的配置, 因为本博客所在主机 中使用的是一样的方式配置, 当时就直接参考...

基于RedisLua脚本实现的分布式锁【图】

最近项目中需要用到一个分布式的锁,考虑到基于会话节点实现的zookeeper锁性能不够,于是想使用 redis 来实现一个分布式的锁。看了网上的几个实现方案后,发现都不够严谨。比如这篇:用Redis实现分布式锁里面设计的锁有个最大的问题是锁的超时值TTL会一直被最近项目中需要用到一个分布式的锁,考虑到基于会话节点实现的zookeeper锁性能不够,于是想使用redis来实现一个分布式的锁。看了网上的几个实现方案后,发现都不够严谨。比如...

通过Nginx/Lua给Redis的PIPELINING减肥

某手机应用市场项目,其中请求量最大的功能是查询升级接口,具体点来说:客户端会不定期的把手机中应用名称及其应用版本发送到服务端,服务端通过比较版本来判断客户端的应用是否需要升级,如果需要就返回若干项相关信息。通常,一台手机里会装几十个到上百某手机应用市场项目,其中请求量最大的功能是查询升级接口,具体点来说:客户端会不定期的把手机中应用名称及其应用版本发送到服务端,服务端通过比较版本来判断客户端的应用...

Redis中使用Lua脚本的开发思路

Redis提供了通过eval命令来执行Lua脚本。下面通过几个小例子来讲述如何在Redis服务端执行Lua脚本。 Redis提供了通过eval命令来执行Lua脚本。下面通过几个小例子来讲述如何在Redis服务端执行Lua脚本。 1. 执行Lua脚本的几个命令如下: 命令格式 说明 对应Jedis客户端Jedis对象的方法之一(有更多重载方法)EVAL script numkeys key [key ...] arg [arg ...] 执行Lua脚本 public Object eval(String script, int keyCount, String.....

redis限速器设计(不使用lua脚本及事物)【图】

公司有一个需求,需要集群中的机器每分钟发送固定个数请求到局域网以外的一台服务器,固定个数,是指集群中的所有机器发送的所有的请求加起来是一个固定的个数,这就需要一个分布式的限速器。 首先想到的就是使用redis中的incr方法,在redis的官方文档中寻找公司有一个需求,需要集群中的机器每分钟发送固定个数请求到局域网以外的一台服务器,固定个数,是指集群中的所有机器发送的所有的请求加起来是一个固定的个数,这就需要一个...

redis命令和lua实现分布式锁【代码】

Redis分布式锁关键 SETNX 语法: SETNX key value如果key不存在,则存储(key:value)值,返回1如果key已经不存在,则不执行操作,返回0因为这个命令的性质,多个线程竞争时只有一个线程能修改key的值。利用这一点可以实现锁的互斥功能。 Redis分布式锁实现 定义接口public interface Lock {/*** 获取锁* @param lock 锁名称*/void lock(String lock);/*** 释放锁* @param lock 锁名称*/void unlock(String lock); }分布式锁代码实现...

nginx安装lua直连redis【代码】

nginx安装lua直连redis linux安装LuaJITngx_devel_kit和lua-nginx-module实现lua连接redislinux安装LuaJIT ##安装必要的依赖 yum install readline-devel wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz tar -zxvf LuaJIT-2.0.4.tar.gz cd LuaJIT-2.0.2 make install PREFIX=/usr/local/LuaJIT ##然后配置环境变量 vim /etc/profile exportLUAJIT_LIB=/usr/local/LuaJIT/lib exportLUAJIT_INC=/usr/local/LuaJIT/include/lu...

Redis中Lua脚本的使用介绍【代码】

一网打尽Redis Lua脚本并发原子组合操作 1. 前言 Redis 是高性能的 KV 内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO 地理位置信息计算。Redis 提供了丰富的命令来供我们使用以实现一些计算。Redis 的单个命令都是原子性的,有时候我们希望能够组合多个 Redis 命令,并让这个组合也能够原子性的执行,甚至可以重复使用。Redis 开发者意识到这种场景还是很普遍的,就在 2.6 版本中引入了一个...

redis命令行执行lua脚本【代码】

大家都知道:在Redis中执行的每条命令都能保证其原子性,但是如何保证多条原生命令执行的原子性呢?这时候Redis为这样的用户场景提供了 lua 脚本支持,用户可以向服务器发送 lua 脚本来执行自定义动作,获取脚本的响应数据。Redis 服务器会单线程原子性执行 lua 脚本,保证 lua 脚本在处理的过程中不会被任意其它请求打断。常用命令 1.1 EVAL script numkeys key [key ...] arg [arg ...] numkeys 是key的个数,后边接着写...

基于Redis+Lua的分布式限流【图】

基于Redis+Lua的分布式限流前面我们了解了如何利用Nginx做网关层限流,这一小节我们学习一个稍微复杂一点的分布式限流手段,利用Redis+Lua实现服务端限流。 一、架构思考:Why Redis 同学们一定有个疑问,这么多中间件,为什么我们选择用Redis。这就好比孙悟空选兵器,十八般兵器都不得心应手,唯有那东海龙宫的定海神针是最佳选择。1、性能 前面的章节中大家已经系统学习了Redis,作为缓存组件,如果不采用持久化方案的话,Redis的...

redis与lua【代码】【图】

redis的lua脚本,php中使用redis的lua内容大纲redis里使用eval和evalsharedis管理Lua脚本 php里使用redis的lua脚本在redis里使用lua脚本的好处1.Lua脚本在Redis中是原子执行的,执行过程中间不会插入其他命令2.Lua脚本可以帮助开发和运维人员创造出自己定制的命令,并可以将这些命令常驻在Redis内存中,实现复用的效果。 3.Lua脚本可以将多条命令一次性打包,有效地减少网络开销在redis中eval的语法格式EVAL script numkeys key [k...

基于 Redis+Lua 实现延时队列实战【代码】

最近项目中有这样一个需求,在用户的考试快开始的时候要给用户发条消息,提醒用户考试快开始了。这种需求其实很常见,本质可以基于延时队列去实现,结合目前项目技术栈使用情况,想到了三种方案: 时间轮Redis Key 过期监听Redis ZSet 过期时间作为 score,每次取出 score 小于当前时间的数据 时间轮个人感觉单机版实现简单,但是分布式环境下实现复杂;Redis Key 过期监听根据以往经验不一定靠谱,且不易于控制消费进度;于是最终...