• CJSON工具类


    4.4.3.CJSON工具类

    OpenResty提供了一个cjson的模块用来处理JSON的序列化和反序列化。

    官方地址: https://github.com/openresty/lua-cjson/

    1)引入cjson模块:

    local cjson = require "cjson"
    
    • 1

    2)序列化:

    local obj = {
        name = 'jack',
        age = 21
    }
    -- 把 table 序列化为 json
    local json = cjson.encode(obj)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3)反序列化:

    local json = '{"name": "jack", "age": 21}'
    -- 反序列化 json为 table
    local obj = cjson.decode(json);
    print(obj.name)
    
    • 1
    • 2
    • 3
    • 4

    4.4.4.实现Tomcat查询

    下面,我们修改之前的item.lua中的业务,添加json处理功能:

    -- 导入common函数库
    local common = require('common')
    local read_http = common.read_http
    -- 导入cjson库
    local cjson = require('cjson')
    
    -- 获取路径参数
    local id = ngx.var[1]
    -- 根据id查询商品
    local itemJSON = read_http("/item/".. id, nil)
    -- 根据id查询商品库存
    local itemStockJSON = read_http("/item/stock/".. id, nil)
    
    -- JSON转化为lua的table
    local item = cjson.decode(itemJSON)
    local stock = cjson.decode(stockJSON)
    
    -- 组合数据
    item.stock = stock.stock
    item.sold = stock.sold
    
    -- 把item序列化为json 返回结果
    ngx.say(cjson.encode(item))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4.4.5.基于ID负载均衡

    刚才的代码中,我们的tomcat是单机部署。而实际开发中,tomcat一定是集群模式:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    因此,OpenResty需要对tomcat集群做负载均衡。

    而默认的负载均衡规则是轮询模式,当我们查询/item/10001时:

    • 第一次会访问8081端口的tomcat服务,在该服务内部就形成了JVM进程缓存
    • 第二次会访问8082端口的tomcat服务,该服务内部没有JVM缓存(因为JVM缓存无法共享),会查询数据库

    你看,因为轮询的原因,第一次查询8081形成的JVM缓存并未生效,直到下一次再次访问到8081时才可以生效,缓存命中率太低了。

  • 相关阅读:
    结构型-代理模式
    可以免费文字识别app有哪些?有这3款app就能够实现提取文字自由
    IEEE802.2之LLC(逻辑链路控制)
    vue对于低版本浏览器兼容问题
    专利变更需要哪些材料
    基本类型转换和引用类型转换
    如何使用 DataX 从 PostgreSQL 同步数据到 OceanBase
    XML DTD 初学
    鹅厂练习 13 年 Coding 后,我悟了
    java从入门到精通二十九(Spring测试环境的简单部署)
  • 原文地址:https://blog.csdn.net/qq_28770419/article/details/138167615