OpenResty shared dict

这篇具有很好参考价值的文章主要介绍了OpenResty shared dict。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

shared dict 支持数据的存放和读取,还支持原子计数和队列操作,可用于 worker 间的通信。

OpenResty 中常见的几种数据共享的方法

  • Nginx 中的变量

    可以在 Nginx C 模块之间共享数据,也可以在 C 模块和 lua-nginx-module 之间共享数据。 性能较差,只能存储字符串,不支持其他 Lua 类型。

    location /foo {
      content_by_lua_block {
          ngx.var.my_var = 123;
      }
    }
    
  • ngx.ctx 在同一个请求的不同阶段共享数据

    当请求结束,ngx.ctx 会被销毁

    location /foo {
      rewrite_by_lua_block {
          ngx.ctx.host = ngx.var.host;
      }
      access_by_lua_block {
          ngx.ctx.host = 'test.com';
      }
      content_by_lua_block {
          ngx.say(ngx.ctx.host);
      }
    }
    
  • 使用模块级别的变量,可以在 worker 内的所有请求之间共享数据

    --mydata.lua
    local _M = {}
    
    local data = {
      dog = 3,
      cat = 4,
      pig = 5,
    }
    
    function _M.get_age(name)
      return data[name]
    end
    
    return _M
    
    location /foo {
      content_by_lua_block {
          local mydata = require "mydata";
          ngx.say(mydata.get_age("dog"));
      }
    }
    

    一般只存只读数据,涉及到写操作可能会有竞争。

  • shared dict,数据可以在多个 worker 之间共享。

    有局限性,必须事先在 Nginx 的配置文件中声明共享内存的大小,并且不能在运行时修改

    lua_shared_dict dogs 10m
    

    只能缓存字符串,不支持复杂的 Lua 数据类型

前三种数据共享的范围都是在请求级别或者单个 worker 级别,只有 shared dict 可以完成 worker 之间的数据共享。

shared dict API

字典读写类

$ resty --shdict='dogs 1m' -e 'local dict = ngx.shared.dogs
                               dict:set("Tom", 56)
                               print(dict:get("Tom"))'
  • safe_set

  • add

  • safe_add

  • replace

  • get_stable文章来源地址https://www.toymoban.com/news/detail-527407.html

    value, flags, stale = ngx.shared.DICT:get_stale(key)
    

队列操作

  • lpush/rpush 在队列两端增加元素
  • lpop/rpop 在队列两端弹出元素
  • llen 返回队列的元素数量

到了这里,关于OpenResty shared dict的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浅尝OpenResty

    当一个域名中衍生出多个服务的时候,如果想要保持对外服务始终是一个域名,则需要通过nginx反向代理来实现。如果在转发的时候需要对具体的规则进行一些逻辑运算的话,则需要通过嵌入lua脚本来实现,而nginx本身是不支持lua功能的,目前可以通过: nginx + lua module来实现

    2024年02月11日
    浏览(28)
  • 短链访问服务之openresty

    1.下载镜像 docker pull openresty/openresty 2.运行容器 docker run -it -d -p 8080:80 -v D:/openresty/conf/:/etc/nginx/conf.d/ --name openresty openresty/openrest D:/openresty/conf/default.conf 文件如下 # nginx.vh.default.conf  --  docker-openresty # # This file is installed to: #   `/etc/nginx/conf.d/default.conf` # # It tracks the `server`

    2024年02月12日
    浏览(25)
  • 1.OpenResty系列之入门简介

    OpenResty(也称为ngx_openresty)是一个基于Nginx的全功能Web应用服务器,它将Nginx与一组附加模块和Lua脚本语言集成在一起,以提供高性能的Web应用程序开发和扩展性。 Nginx是一个轻量级的、高性能的HTTP服务器和反向代理服务器,广泛用于构建高流量网站和应用程序。OpenResty利用

    2024年02月05日
    浏览(31)
  • Nginx/OpenResty目录穿越漏洞复现

    2020年03月18日, 360CERT监测发现 openwall oss-security 邮件组披露了两枚漏洞。在特定配置下 nginx/openresty 存在 内存泄漏漏洞/目录穿越漏洞。 Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。 OpenResty是一个基于nginx的Web平台,它对nginx增加LuaJIT引擎使其

    2023年04月10日
    浏览(27)
  • OpenResty学习笔记03:再探WAF

      我们上一篇安装的WAF来自另一位技术大神 赵舜东 ,花名 赵班长 ,一直从事自动化运维方面的架构设计工作。阿里云MVP、华为云MVP、中国SaltStack用户组发起人 、新运维社区发起人。 虽然并非安全专业出身,但根据他的自述,边学边写,只用了几天的时间就将WAF写出来了,

    2024年02月03日
    浏览(26)
  • 如何通过openresty 限制国外Ip访问

    参考代码 首先 需要的依赖: libmaxminddb 需要 gcc 编译,可用 Dockerfile 里面编译生成so文件,然后复制到 openresty/openresty:centos-rpm 镜像中,然后把 Country.mmdb (Ip数据库) 也复制到镜像中 Dockerfile 如下: 然后配置lua脚本,OpenResty(也称为 ngx_openresty)是一个基于 Nginx 与 Lua 的高性

    2024年02月01日
    浏览(32)
  • OpenResty+OpenWAF的WEB防护实战

    OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。本文介绍通过OpenResty+OpenWAF来搭建软WAF的应用,用来防护DVWA的靶机,然后

    2023年04月09日
    浏览(20)
  • 多级缓存架构(三)OpenResty Lua缓存

    通过本文章,可以完成多级缓存架构中的Lua缓存。 在 docker/docker-compose.yml 中添加nginx服务块。 删除原来docker里的 multiCache 项目并停止 springboot 应用。 nginx 部分配置如下,监听端口为 8080 ,并且将请求反向代理至 172.30.3.11 ,下一小节,将 openresty 固定在 172.30.3.11 。 重新启动

    2024年01月16日
    浏览(38)
  • C# 和 OpenResty 中进行 CRC32

    一、C# 进行 CRC32 使用方法 结果:1234567890 = CRC32 Uint: 639479525, Hex: 261DAEE5   二、OpenResty 中进行 CRC32 结果:1234567890 = CRC32 long: 639479525 C# 和 OpenResty 中进行 CRC32 的结果是一致的。  

    2024年02月16日
    浏览(24)
  • 黑马Redis视频教程高级篇(安装OpenResty)

    目录 一、安装 1.1、安装开发库 1.2、安装OpenResty仓库 1.3、安装OpenResty 1.4、安装opm工具 1.5、目录结构 1.6、配置nginx的环境变量 二、启动和运行 三、备注 首先你的Linux虚拟机必须联网。 首先要安装OpenResty的依赖开发库,执行命令: 你可以在你的 CentOS 系统中添加 openresty 仓库

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包