博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用nginx+lua脚本读写redis缓存
阅读量:7254 次
发布时间:2019-06-29

本文共 3040 字,大约阅读时间需要 10 分钟。

配置

新建spring boot项目增加redis配置

org.springframework.boot
spring-boot-starter-data-redis

在需要缓存的地方增加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
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/aliyunpang/p/8971185.html

你可能感兴趣的文章
Exchange日常管理之二十二:配置保留策略
查看>>
Android -- Webview自适应屏幕
查看>>
从Delphi 7升级到Delphi XE
查看>>
android圆形图像
查看>>
Oracle数据库备份还原工具之Expdp/IMPdp
查看>>
【转】android JNI编程 一些技巧(整理)
查看>>
MySQL之终端(Terminal)管理数据库、数据表、数据的基本操作
查看>>
各种排序算法汇总
查看>>
C#巧用Excel模版变成把Table打印出来
查看>>
SOAP 及其安全控制--转载
查看>>
JarSearch
查看>>
[Unity3D][Vuforia][IOS]vuforia在unity3d中添加自己的动态模型,识别自己的图片,添加GUI,播放视频...
查看>>
Freemodbus介绍及测试
查看>>
[转]Phantomjs实现获取网页快照并生成缩略图
查看>>
leveldb源码学习系列
查看>>
Linux 运行 apt-get install 就出现jdk installer 错误的解决方法
查看>>
Android OpenGL ES(九)绘制线段Line Segment .
查看>>
Ubuntu下安装配置JDK1.7
查看>>
转载:STM32之中断与事件---中断与事件的区别
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.5.10
查看>>