使用nginx+lua脚本读写redis缓存
配置
新建spring boot项目增加redis配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
在需要缓存的地方增加redis缓存
package com.example.sharding.service;import com.alibaba.fastjson.JSON;
import com.example.sharding.entity.Order;
import com.example.sharding.mapper.OrderMapper;
import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.List; @Service @Transactional public class OrderService { @Autowired private OrderMapper orderMapper; @Autowired private RedisTemplate redisTemplate; public Object findAll() throws IOException { List<Order> orders = orderMapper.selectAll(); ObjectMapper mapper = new ObjectMapper(); redisTemplate.opsForValue().set("orders",mapper.writeValueAsString(orders)); return orders; } public void save(Order order) { orderMapper.insert(order); redisTemplate.opsForHash().put("order",order.getOrderId().toString(), JSON.parseObject(JSON.toJSONString(order)).toJSONString()); } public void deleteAll() { orderMapper.deleteAll(); redisTemplate.delete("order"); redisTemplate.delete("orders"); } }
修改example.conf
server {listen 80; server_name _; location = /order { default_type 'text/html'; lua_code_cache off; content_by_lua_file C:\work\openresty-1.13.6.1-win32\example\lua/test_redis_basic.lua; } location /lua { default_type 'text/html'; lua_code_cache off; content_by_lua_file C:\work\openresty-1.13.6.1-win32\example\lua/test.lua; } # 其他请求回源到tomcat location / { proxy_pass http://tomcat/; } } # 后端服务地址 upstream tomcat { server 127.0.0.1:8080 max_fails=5 fail_timeout=10s weight=1; keepalive 100; }
修改test_redis_basic.lua文件
local function close_redis(red) if not red then return end local ok, err = red:close() if not ok then ngx.say("close redis error : ", err) end end local function read_order() local resp = ngx.location.capture("/order/query", { method = ngx.HTTP_GET }) if not resp then return end if resp.status ~= 200 then return end return resp.body end local redis = require("resty.redis") local cjson = require("cjson") -- 引入json模块 --创建实例 local red = redis:new() --设置超时(毫秒) red:set_timeout(1000) --建立连接 local ip = "127.0.0.1" local port = 6379 local ok, err = red:connect(ip, port) if not ok then ngx.say("connect to redis error : ", err) return close_redis(red) end local res, err = red:auth("shiyuesoft") if not res then ngx.say("failed to authenticate: ", err) return end --调用API获取数据 local resp, err = red:get("orders") if not resp then ngx.say("get msg error : ", err) return close_redis(red) end --得到的数据为空处理 if resp == ngx.null then resp = read_order() --回源到tomcat去查询 end ngx.say(cjson.decode(resp)) --对返回的数据转换成json对象 close_redis(red)
先请求deleteAll删除所有缓存
新增order数据
访问/order地址
第一次由于没有缓存,会进入接口查询
后面继续刷新页面,不会再进入后端接口了
转载于:https://www.cnblogs.com/weiguoaa/p/8971194.html
使用nginx+lua脚本读写redis缓存相关推荐
- Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP
前言:由于公司前几天短信接口被一直攻击,并且攻击者不停变换IP,导致阿里云短信平台上的短信被恶意刷取了几千条,然后在Nginx上对短信接口做了一些限制 临时解决方案: 1.查看Nginx日志发现被攻击 ...
- java redis 批量删除_在Spring中使用Redis Lua脚本批量删除缓存
背景 之前分享了一篇利用lua脚本批量删除redis的key的文章.现在项目中我打算使用spring的缓存,而Spring缓存以前我是用ehcache来做实现的.没发现什么问题..这次我换成redis ...
- 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现...
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x0n 前言简述 知识引入 Lua模块指令阶段 0x01 部署环境 安装说明 安 ...
- 【2020尚硅谷Java大厂面试题第三季 04】Redis 9种数据类型使用场景,分布式锁演变步骤,lua脚本,redis事务,Redisson,Redis内存占用,删除策略,内存淘汰策略,手写LRU
1.安装redis6.0.8 2023 02 02 为:redis-7.0.8.tar.gz 2.redis传统五大数据类型的落地应用 3.知道分布式锁吗?有哪些实现方案?你谈谈对redis分布式锁的 ...
- 黑猴子的家:LUA脚本(Redis 秒杀案例)
Code -> GigHub https://github.com/liufengji/redis_seckill.git 1.概念 http://www.lua.org/download.ht ...
- lua脚本在redis集群中执行报错--Lua script attempted to access a non local key in a cluster node...
EVAL.EVALSHA命令 Redis从2.6.0版本开始提供了eval命令,通过内置的Lua解释器,可以让用户执行一段Lua脚本并返回数据.因为Redis单线程模型的特点,可以保证多个命令的原子性 ...
- Lua 脚本在redis中的入门使用——eval
文章目录 1.eval 的基本使用 2.lua 文件编写和执行 3.evalsha 的基本使用 redis 和 java 整合 1.eval 的基本使用 EVAL script numkeys key ...
- Nginx+Lua+Redis实现广告缓存
1.需求分析 需要在页面上显示广告的信息. 2.OpenResty 2.1.OpenResty介绍 OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web ...
- 一网打尽Redis Lua脚本并发原子组合操作
1. 前言 Redis 是高性能的 KV 内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO 地理位置信息计算.Redis 提供了丰富的命令来供我们使用以实现一 ...
最新文章
- 替换openjdk的版本时遇到报错Transaction check error
- vue中 this.$set的用法
- iOS 9之3D Touch
- 同等学力申硕计算机科学与技术参考书,2017同等学力申硕计算机科学与技术综合备考规划...
- 仓库移动_移动式RFID仓库管理解决方案,智能仓库未来应用的会更广泛
- 一分钟系列:什么是虚拟内存?
- 微软内部文件:Longhorn相关工作外包印度
- Windows下编译sqlite3
- ETF的战争从未停止【文献推荐·天风金工吴先兴团队】
- 园区网解决方案有哪些 园区网解决方案案例
- Flink DataStream Keyed和Non-Keyed窗口、WindowAssigner、窗口生命周期、窗口函数、迟到数据和窗口结果的处理
- 小程序跳转到其他小程序
- matlab求cos角,科学网—MATLAB求太阳高度角的小程序 - 张乐乐的博文
- STM32cubemx教程 DAC+TIM+DMA
- Spark 生态系统组件
- NFC中国-中国第一NFC论坛,NFC中文论坛+NFC技术社区+NFC_电子发烧友网【申明:来源于网络】
- [Dxperience.8.*]报表预览控件PrintControl设置
- eclipse中referenced libraries的引入方法
- 来看看你是不是真的了解 RSA 加密算法,查漏补缺!
- mac m1安装coquiTTS,文字转语音
热门文章
- codis codis-ha主从切换后服务器标记为offline
- Hibernate,JPA注解@Embeddable
- 刚刚做完的一个屏幕截图程序,分享一下
- excel 统计字数公式
- Web前端笔记(4)
- 深度学习 循环神经网络RNN
- 苹果se2_搜狗输入法适配苹果se2,给用户带来新玩法。
- object类型replace掉$、转换成float、运算
- idea swagger生成接口文档_Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据...
- np.stack() | 数组堆叠