配置

新建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地址

第一次由于没有缓存,会进入接口查询

后面继续刷新页面,不会再进入后端接口了

最新文章

  1. ZK 代码自动提示
  2. WCF大文件传输
  3. 用nginx-gridFS读取MongoDB的图片及文件(为什么你老是配不成功?)
  4. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-3]
  5. python 学习(一)
  6. 01 MySQL锁概述
  7. Linux shell 脚本攻略之统计文件的行数、单词数和字符数
  8. Bzoj 1565: [NOI2009]植物大战僵尸 最大权闭合图,拓扑排序
  9. c#面向对象小结
  10. Target runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem
  11. 给一个Unix域套接字bind一个路径名
  12. 基于mpvue搭建微信小程序
  13. java第一章抽象和封装
  14. flask 连接MogoDB数据库
  15. ThreeJS笔记(一)
  16. Git安装及密钥的生成(转)
  17. .Net Core + NGINX跳转登录时端口丢失
  18. Android图片加载框架最全解析(八),带你全面了解Glide 4的用法
  19. 使用XTU降低CPU功耗,自动执行不失效
  20. 【BZOJ4724】[POI2017]Podzielno 数学+二分

热门文章

  1. stack 栈
  2. 用Thymeleaf在前台下拉列表取值
  3. Dirichlet&#39;s Theorem on Arithmetic Progressions
  4. pom.xml报错:Failure to find org.apache.maven.doxia:doxia-logging-api:jar:1.1 in http://repo.
  5. 关于sklearn中的导包交叉验证问题
  6. A - Supermarket
  7. 单个句子&lt;code&gt; 多行代码显示&lt;pre&gt; 键盘输入&lt;kbd&gt;
  8. ORA-03113 ---end-of-file on communication channel 解决方案记录
  9. SQL SERVER2012 安装
  10. 安卓代码迁移:Make.exe: *** [***.o]Error 1