使用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 提供了丰富的命令来供我们使用以实现一 ...
最新文章
- 解决scrapy安装失败
- php正则匹配td,正则表达式-查找td标签之间的所有内容 - php
- ACDSee Photo Studio Ultimate 2020中文版
- Windows Server 2012 RS 配置IIS8.0+发布网站
- 图综合练习--拓扑排序_03 数据结构与算法 - 排序
- 各种oracle索引类型介绍,各种Oracle索引类型介绍
- Python中的字符串操作总结(Python3.6.1版本)
- apache AH01630: client denied by server configuration错误解决方法
- xfce右键open in terminal失效问题解决
- angularjs 工具方法
- java+包装类,装箱和拆箱_Java包装类,装箱和拆箱详解
- C++_004异常处理
- Sublime Text Build 3176 安装图文详细教程
- node 升级_那些修改node_modules的骚操作
- Mybatis配置映射文件中parameterType的用法小结
- 视频教程-企业级多语言舆情爬虫系统-Go语言
- Java 多线程思维导图
- 期刊会议的论文,sci,ieee,ccf ,acm等等他们之间的关系,以及如何能看到这些高质量文章
- 关于阿里直播 安卓手机支付宝不支持的处理
- OpenShift — 部署 OKD 4.5
热门文章
- Javascript常用正则表达式汇总
- 在osx 10.10.3 下安装git总结
- 【专题三】如何考量虚拟化的投资回报率?——服务器虚拟化的阴暗面
- oracle 删除已备份归档,通过RMAN联机全库备份,包括控制文件,归档日志文件,备份成功后,删除已备份的归档日志。...
- java base64 转图片不现实_Base64.decodeBase64将base64转图片的问题
- NBA Top Shot巨鲸17.5万美元购买的球星卡目前已值2000万美元
- SAP GRC 权限合规审计系统
- 基于Memcached的Nginx服务器集群session共享
- 前后端数据交互之前端传值到后台
- android shape使用总结