配置

新建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缓存相关推荐

  1. Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP

    前言:由于公司前几天短信接口被一直攻击,并且攻击者不停变换IP,导致阿里云短信平台上的短信被恶意刷取了几千条,然后在Nginx上对短信接口做了一些限制 临时解决方案: 1.查看Nginx日志发现被攻击 ...

  2. java redis 批量删除_在Spring中使用Redis Lua脚本批量删除缓存

    背景 之前分享了一篇利用lua脚本批量删除redis的key的文章.现在项目中我打算使用spring的缓存,而Spring缓存以前我是用ehcache来做实现的.没发现什么问题..这次我换成redis ...

  3. 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现...

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x0n 前言简述 知识引入 Lua模块指令阶段 0x01 部署环境 安装说明 安 ...

  4. 【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分布式锁的 ...

  5. 黑猴子的家:LUA脚本(Redis 秒杀案例)

    Code -> GigHub https://github.com/liufengji/redis_seckill.git 1.概念 http://www.lua.org/download.ht ...

  6. 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单线程模型的特点,可以保证多个命令的原子性 ...

  7. Lua 脚本在redis中的入门使用——eval

    文章目录 1.eval 的基本使用 2.lua 文件编写和执行 3.evalsha 的基本使用 redis 和 java 整合 1.eval 的基本使用 EVAL script numkeys key ...

  8. Nginx+Lua+Redis实现广告缓存

    1.需求分析 需要在页面上显示广告的信息. 2.OpenResty 2.1.OpenResty介绍 OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web ...

  9. 一网打尽Redis Lua脚本并发原子组合操作

    1. 前言 Redis 是高性能的 KV 内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO 地理位置信息计算.Redis 提供了丰富的命令来供我们使用以实现一 ...

最新文章

  1. 解决scrapy安装失败
  2. php正则匹配td,正则表达式-查找td标签之间的所有内容 - php
  3. ACDSee Photo Studio Ultimate 2020中文版
  4. Windows Server 2012 RS 配置IIS8.0+发布网站
  5. 图综合练习--拓扑排序_03 数据结构与算法 - 排序
  6. 各种oracle索引类型介绍,各种Oracle索引类型介绍
  7. Python中的字符串操作总结(Python3.6.1版本)
  8. apache AH01630: client denied by server configuration错误解决方法
  9. xfce右键open in terminal失效问题解决
  10. angularjs 工具方法
  11. java+包装类,装箱和拆箱_Java包装类,装箱和拆箱详解
  12. C++_004异常处理
  13. Sublime Text Build 3176 安装图文详细教程
  14. node 升级_那些修改node_modules的骚操作
  15. Mybatis配置映射文件中parameterType的用法小结
  16. 视频教程-企业级多语言舆情爬虫系统-Go语言
  17. Java 多线程思维导图
  18. 期刊会议的论文,sci,ieee,ccf ,acm等等他们之间的关系,以及如何能看到这些高质量文章
  19. 关于阿里直播 安卓手机支付宝不支持的处理
  20. OpenShift — 部署 OKD 4.5

热门文章

  1. Javascript常用正则表达式汇总
  2. 在osx 10.10.3 下安装git总结
  3. 【专题三】如何考量虚拟化的投资回报率?——服务器虚拟化的阴暗面
  4. oracle 删除已备份归档,通过RMAN联机全库备份,包括控制文件,归档日志文件,备份成功后,删除已备份的归档日志。...
  5. java base64 转图片不现实_Base64.decodeBase64将base64转图片的问题
  6. NBA Top Shot巨鲸17.5万美元购买的球星卡目前已值2000万美元
  7. SAP GRC 权限合规审计系统
  8. 基于Memcached的Nginx服务器集群session共享
  9. 前后端数据交互之前端传值到后台
  10. android shape使用总结