- 浏览: 769493 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
shared dict:这个cache是nginx所有worker之间共享的,内部使用的LRU算法(最近最少使用)来判断缓存是否在内存占满时被清除。
lru catch:这个cache是worker级别的,不会在nginx wokers之间共享。并且,它是预先分配好key的数量,而shared dcit需要自己用key和value的大小和数量,来估算需要把内存设置为多少。
shared.dict 使用的是共享内存,每次操作都是全局锁,如果高并发环境,不同worker之间容易引起竞争。所以单个shared.dict的体积不能过大。lrucache是worker内使用的,由于nginx是单进程方式存在,所以永远不会触发锁,效率上有优势,并且没有shared.dict的体积限制,内存上也更弹性,但不同worker之间数据不同享,同一缓存数据可能被冗余存储。+
你需要考虑的,一个是Lua lru cache提供的API比较少,现在只有get、set和delete,而ngx shared dict还可以add、replace、incr、get_stale(在key过期时也可以返回之前的值)、get_keys(获取所有key,虽然不推荐,但说不定你的业务需要呢);第二个是内存的占用,由于ngx shared dict是workers之间共享的,所以在多worker的情况下,内存占用比较少。
function get_from_cache(key) local cache_ngx = ngx.shared.my_cache local value = cache_ngx:get(key) return value end function set_to_cache(key, value, exptime) if not exptime then exptime = 0 end local cache_ngx = ngx.shared.my_cache local succ, err, forcible = cache_ngx:set(key, value, exptime) return succ end set_to_cache('a',1,1000) ngx.say(get_from_cache('a'))
lru catch:这个cache是worker级别的,不会在nginx wokers之间共享。并且,它是预先分配好key的数量,而shared dcit需要自己用key和value的大小和数量,来估算需要把内存设置为多少。
local _M = {} -- alternatively: local lrucache = require "resty.lrucache.pureffi" local lrucache = require "resty.lrucache" -- we need to initialize the cache on the Lua module level so that -- it can be shared by all the requests served by each nginx worker process: local c = lrucache.new(200) -- allow up to 200 items in the cache if not c then return error("failed to create the cache: " .. (err or "unknown")) end c:set("dog", 32) c:set("cat", 56) ngx.say("dog: ", c:get("dog")) ngx.say("cat: ", c:get("cat")) c:set("dog", { age = 10 }, 0.1) -- expire in 0.1 sec c:delete("dog")
shared.dict 使用的是共享内存,每次操作都是全局锁,如果高并发环境,不同worker之间容易引起竞争。所以单个shared.dict的体积不能过大。lrucache是worker内使用的,由于nginx是单进程方式存在,所以永远不会触发锁,效率上有优势,并且没有shared.dict的体积限制,内存上也更弹性,但不同worker之间数据不同享,同一缓存数据可能被冗余存储。+
你需要考虑的,一个是Lua lru cache提供的API比较少,现在只有get、set和delete,而ngx shared dict还可以add、replace、incr、get_stale(在key过期时也可以返回之前的值)、get_keys(获取所有key,虽然不推荐,但说不定你的业务需要呢);第二个是内存的占用,由于ngx shared dict是workers之间共享的,所以在多worker的情况下,内存占用比较少。
发表评论
-
mac nginx启动
2021-01-15 10:10 405brew services start nginx 1.1 ... -
nginx与lvs的异同
2017-11-30 11:51 918http://blog.csdn.net/BuquTianya ... -
lua weak表与gc
2017-11-29 09:56 562local a = {} local b = {} s ... -
lua single-method
2017-11-29 09:49 520local function newObject (val ... -
lua ffi
2017-11-16 11:33 608testlib.c #include <stdio. ... -
lua unpack
2017-11-09 11:07 392unpack接受一个数组作为输入参数,返回数组的所有元素。被用 ... -
resty thread
2017-07-07 14:35 370local t = {} local functio ... -
resty 正则
2017-07-04 17:32 457local m, err = ngx.re.match(& ... -
Nginx Lua脚本执行顺序
2017-06-15 09:11 856[img] [/img] -
ngx timer
2017-05-20 08:11 465local delay=3 local handle ... -
openresty文件自适应
2017-05-18 14:14 492location ~ ^/([-_a-zA-Z0-9/]+ ... -
lua_shared_dict
2017-05-18 12:01 22901.定义一块名为my_cache的共享内存空间,内存大小为si ... -
lua 协程(coroutine)
2016-11-30 10:34 523local function f(a) local ... -
lua loadstring
2016-11-29 10:08 830loadstring 不会有边界效应产生,他仅仅编译 chun ... -
lua book
2016-05-05 10:26 455http://lua.ren/topic/157/lua书 -
lrucache
2016-04-19 16:21 611local _M = {} --local lruc ... -
openresty资料
2016-03-15 09:57 864视频 http://study.163.com/course/ ... -
cjson
2016-03-07 10:42 564local json = require("cj ... -
nginx使用lua文件
2016-03-02 10:13 684location /test_var { con ... -
获取 uri 参数
2016-02-23 11:38 407location /test { c ...
相关推荐
- 启动缓存加载策略:设计Guardian前端启动时直接从Redis加载付费信息缓存,避免因OpenResty缓存为空造成的热点问题。 - 保证数据一致性:通过定时任务将SharedDICT数据推送到Redis,确保缓存数据的准确性。 - ...
1. **缓存类型**:OpenResty 支持两种主要的缓存类型:内存缓存(Memory Cache)和磁盘缓存(Disk Cache)。内存缓存速度快但容量有限,适合存放热数据;磁盘缓存则可以存储大量数据,但读写速度相对较慢。 2. **...
壁架符合 RFC 规范并支持ESI 的Nginx / OpenResty HTTP 缓存,由Redis提供支持。Ledge 可以作为 Squid / Varnish 等的快速、强大且可扩展的替代品,可以独立安装,也可以集成到现有的 Nginx 服务器或负载均衡器中。...
LuaJIT与Nginx结合,使得开发者可以通过Lua编写高性能的网络应用,包括API网关、负载均衡器、缓存系统等。在OpenResty 1.25.3.1中,可能已经包含了一些LuaJIT的最新优化,以提高脚本性能。 此外,OpenResty还提供了...
OpenResty通过`lua_shared_dict`指令支持在Nginx内部共享内存数据结构,这在处理高并发场景下非常有用,比如实现会话持久化或者缓存。 OpenResty的源码中还包含了一系列的第三方库,如`lualib/`目录下的各种Lua库,...
读者会学习到如何利用OpenResty进行反向代理、负载均衡、缓存管理等常见的Web服务任务。此外,书中还会深入讲解OpenResty的API接口,包括Nginx的HTTP模块、Stream模块,以及Lua API,帮助读者熟悉OpenResty的核心...
OpenResty教程,OpenResty使用教程 OpenResty是大并发服务器的不错选择,可实现数据校验前置、缓存前置、数据过滤、API请求聚合、认证管理、负载均衡、流量控制、灰度发布、降级、监控等功能
通过OpenResty,我们可以将Nginx的功能扩展到动态内容生成、API处理、缓存控制等多个领域,同时保持Nginx的高性能特性。 二、LuaJIT的集成 LuaJIT是一个高效的Lua虚拟机实现,支持即时编译,使得Lua代码能够接近...
3. **缓存服务**: 利用OpenResty的缓存模块,可以快速响应重复请求,减轻后端数据库的压力。 4. **日志处理**: Lua脚本可以直接处理Nginx的日志,实现日志分析、监控等功能。 四、进阶实践 1. **Lua与Nginx的协同...
- **动态扩展性**:通过Lua脚本,开发者可以在不重启Nginx的情况下实现动态功能扩展,如路由规则、认证、限流、缓存等。 - **丰富的库支持**:OpenResty预装了许多Lua库,如Lrexlib(正则表达式库)、LuaCosocket...
通过集成LuaJIT,OpenResty允许开发者使用Lua语言编写高性能的Web应用逻辑,包括动态路由、会话管理、缓存控制等,同时保持Nginx的高性能和稳定性。 在获取到这些源码包后,你需要按照以下步骤来编译和安装...
OpenResty的主要应用场景包括:处理和整合来自不同上游服务(如Proxy、Postgres、Redis、Memcached等)的数据,执行复杂的访问控制和安全检测,动态修改响应头信息,从外部存储服务获取数据以选择合适的后端,编写...
通过将LuaJIT嵌入到Nginx中,OpenResty允许用户利用Lua语言的强大功能来编写复杂的HTTP应用,实现路由分发、会话管理、缓存控制、API接口处理等功能,而无需依赖外部的后端服务。 在"压缩包子文件的文件名称列表"中...
此外,书中还涉及到了Nginx的热更新、代码调试、日志记录的最佳实践,以及如何通过lua-resty-lock处理并发问题和缓存失效。 最后,书中提到了一些高级主题,如调用C函数、使用stream_lua_module实现TCP代理负载、...
OpenResty 结合 Nginx 和 Lua,让开发者可以直接在 Nginx 的配置文件中编写 Lua 代码,实现动态逻辑处理,如路由分发、数据缓存、API 调用等。这使得 OpenResty 成为了构建 RESTful API、微服务、动态网站等复杂 Web...
在本文中,我们将使用 OpenResty、Lua 和 Redis 实现高性能的后端接口,用于广告数据的缓存和查询。 一、 需求分析 在类似网易云课堂首页的广告数据显示中,我们需要实现高性能的后端接口,来支持大量的用户请求和...
1. **Nginx核心**:这是OpenResty的基础,提供了HTTP和TCP/UDP代理、负载均衡、缓存等功能,以及强大的静态文件处理能力。 2. **LuaJIT**:集成的LuaJIT库允许开发者使用Lua编写Nginx的配置文件和插件,实现复杂的...
在 OpenResty 中,代码的执行阶段概念、日志记录、热代码装载、缓存处理、定时任务执行等都是构建高性能 Web 应用的关键。此外,OpenResty 提供了动态限速、请求中断后的处理、Lua 代码调优等高级特性,需要开发者在...
在本文中,我们将详细介绍ubuntu下搭建ngx_openresty环境的步骤,包括安装mysql数据库、memcached缓存系统和ngx_openresty框架。 安装libxml2 在ubuntu下安装libxml2库是ngx_openresty环境的前提条件。libxml2库...
Nginx 配置文件中还包括 http 服务设置,定义文件扩展名与类型映射表、默认文件类型、字符编码、服务器名字的 hash 表大小、客户端头缓存大小、上传文件大小限制等。 在 Nginx 配置文件中,还可以 include proxy....