`

openresty 连接redis cluster

阅读更多
利用openresty 连接redis cluster的pipeline和script的尝试结果:
一、redis-cli 执行script load,此sha1只能在当前结点执行,并未同步到其他节点。
注:相同脚本代码,在不同节点执行sha1是一致的)

二、可以利用hashtag来人为分slot,如:{test}1,{test}2

三、lua-resty-redis-cluster的pipeline的实现原理:得到所有key,计算key对应的节点信息(ip、port等集群信息在连接时已缓存),相同节点的keys执行一次,返回结果缓存,再执行下一结点的keys。
注:不同节点的key是不能保证原子性的;管道本身就是不保证数据原子性的(未验证)

四、redis事务,语法异常则可以实现原子性(如命令不存在或参数错误),运行时异常则所有命令全部被执行(如get了hash类型key)

五、在redis集群环境下,jedis和lua-resty-redis-cluster执行原理:
1.首次请求时,先cluster slots获取集群上所有的slot信息和对应的master和slave的节点信息后,进行本地缓存16384个slot的信息。
2.接收到指令后,计算参数中的key值所对应的slot(利用crc16计算),根据计算出的slot值匹配缓存中已缓存的slots的节点信息。
3.利用已知的节点信息用单机客户端连接方式直连,发送指定。
4.如果返回“MOVED”则表示slot已不在本结点,需要客户端跳转到指定节点重新取值,从步骤1重新开始;如果返回“ASK”则表示当前slot正在迁移中,直连到指定节点上获取,当此时集群信息并没有改变,迁移结束后才会刷新;
5.取得key对应的值

以上不区分存取,但不存在key的信息,需要特殊处理。如scrpit load,需要在每个节点上都执行一次,evalsha才能执行。

集群客户端都是在原单机客户端的基础上进行封装的,也就是集群客户端只是计算了slot和缓存了集群slots信息,底层还是单机方式连接。

如管道,则是把所有指令先缓存起来,后按节点分次提交执行,缓存每次返回的结果,最终把整体结果返回。


引用

分享到:
评论

相关推荐

    读书笔记:基于 openresty + redis + mysql 实现高性能短链生成服务.zip

    读书笔记:基于 openresty + redis + mysql 实现高性能短链生成服务

    高并发的优化lua + openresty+redis (实现多级缓存)+限流(掌握)

    高并发的优化lua + openresty+redis (实现多级缓存)+限流(掌握)

    resty-redis-cluster:Redis集群的Openresty lua客户端

    《深入理解resty-redis-cluster:Openresty Lua中的Redis集群客户端》 在现代Web服务开发中,数据存储和缓存扮演着至关重要的角色。Redis作为一款高性能的键值存储系统,广泛应用于缓存、消息队列等领域。而...

    lua-nginx-openresty-redis 详细案例源码

    Nginx 教程 基础 Nginx编译安装 Nginx.conf详解 Location 详解 Nginx基础知识 Nginx高性能WEB服务器详解 ... Nginx的11个Phases agentzh 的 Nginx 教程 ... TCP和UDP负载平衡官方参考文档 ... nginx 并发数问题思考:...

    nginx+lua+redis 集群 连接插件和脚本

    本资源包“nginx+lua+redis集群 连接插件和脚本”正是为了解决这三者之间的协同工作,特别是针对原插件没有密码功能的问题进行了改进,使得安全性得到了提升。 首先,Nginx是一款轻量级的Web服务器/反向代理服务器...

    redis_cluster:一个开放式的nginx lua redis集群

    6. **Cluster集成**: 在"redis_cluster"项目中,开发者可能使用了OpenResty的lua模块和resty库来创建客户端,连接到Redis Cluster。这涉及到解析集群配置,发现节点,处理槽映射,以及在不同节点间进行命令路由。 7...

    2 OpenResty+Lua+Redis 高性能后端接口.docx

    OpenResty+Lua+Redis 高性能后端接口 OpenResty 是基于 Nginx 的高性能 web 服务器,它使用 Lua 语言作为脚本语言来实现动态内容生成和处理。 Lua 是一种轻量级的脚本语言,广泛应用于游戏、嵌入式系统和 web 开发...

    lua-resty-redis-session:openresty会话模块,使用redis保存会话数据

    lua-resty-redis-session-module 相依性 安装 ...git clone ...cp lua-resty-redis_session/lib/resty/redis_session.lua /usr/local/openresty/lualib/resty/ 例子 设置主机(您的浏览器可能不支持本地主

    lightpath-nginx:使用Openresty和Redis用Lua编写的CDN

    LightPath CDN Nginx模块版本:1.0.0-beta描述CDN,内容交付网络,使用Openresty(Nginx)用Lua编写。 网站配置(后端,缓存规则,边缘规则等)存储在Redis中。 如果有兴趣,我会在以后添加适当的文档。 该项目之...

    lua-resty-mongol_openresty连接mongoldb的lua库

    **标题详解:**"lua-resty-mongol_openresty连接mongoldb的lua库" “lua-resty-mongol”是专为OpenResty设计的一个lua库,用于在OpenResty环境中与MongoDB数据库进行交互。这个库的创建是为了在高性能的Web服务中...

    OpenResty+Lua+Redis 高性能后端接口.rar

    OpenResty、Lua和Redis是构建高性能后端接口的关键技术,它们在现代Web服务开发中扮演着重要角色。本文将深入探讨这三个组件及其在构建高效系统中的应用。 首先,OpenResty是一个基于Nginx的全功能Web服务平台,它...

    基于OpenResty的百万级长连接推送.pdf

    基于OpenResty的百万级长连接推送 OpenResty是一种基于Nginx的开源Web服务器软件,它提供了强大的Web开发和部署能力。基于OpenResty的百万级长连接推送系统设计,需要解决高并发、大规模连接和实时推送等挑战。下面...

    nginx利用redis实现session会话共享-tomcat8版本专用

    这里的`host`、`port`、`database`和`timeout`是Redis连接参数,根据实际情况进行调整。 4. **引入依赖**:由于Tomcat默认并不包含RedisStore,我们需要下载相关的JAR包。在提供的压缩文件`tomcat8_session共享所需...

    lua-nginx-redis:Redis,Lua,Nginx,OpenResty笔记和资料

    首先,`Nginx`是一款高效的反向代理服务器和负载均衡器,其事件驱动的架构使其能够处理大量的并发连接。在描述中提到的“Nginx教程”部分,你可以学习到如何配置Nginx,理解其基本指令的执行顺序,以及如何利用Nginx...

    rcluster.lua:支持redis集群的lua redis客户端驱动程序

    针对这种情况,开发者们创建了`rcluster.lua`,一个专门用于连接和操作Redis集群的Lua客户端驱动程序。本文将深入探讨`rcluster.lua`的核心功能和使用方法,帮助你更好地理解和应用这个工具。 首先,让我们了解`...

    nginx+lua+redis实现token验证

    `lua`连接`redis`的库,如`lua-resty-redis`,可以帮助我们与`redis`进行通信,查询或设置键值。 以下是`lua`连接`redis`的一个简单示例: ```lua local redis = require "resty.redis" local red = redis:new() ...

    lua-resty-redis-connector:lua-resty-redis的连接实用程序

    `lua-resty-redis-connector` 是一个针对 `lua-resty-redis` 库的扩展模块,主要用于在 OpenResty(一个基于 Nginx 的高性能 Web 平台,集成了 LuaJIT)环境中提供更高效的 Redis 连接管理。这个库帮助开发者在处理...

    微服务动态路由实现:openresty+kubernetes

    3. **服务信息同步**:通过 Redis 存储服务的信息(如 ClusterIP 和端口),当服务创建、销毁或状态变更时,自动更新 Redis 中的数据。 4. **动态路由配置**:OpenResty 通过查询 Redis 来获取服务的信息,并据此...

    Ansible-hot-word-recommend.zip

    2. 安装并配置OpenResty,包括加载Lua模块,设置API接口,以及连接Redis的配置。 3. 使用Ansible管理热词数据,例如定期从日志文件中提取热词并导入到Redis。 4. 设置监控和警报,确保热词服务的稳定性和性能。 在`...

    lua-resty-qless:用于OpenResty Redis的Lua绑定到Qless(队列管道管理)

    综上所述,lua-resty-qless 为 OpenResty 用户提供了一种强大而灵活的方式来管理和调度基于 Redis 的分布式任务,提升了系统处理能力和健壮性。通过结合 OpenResty 的高效性能和 Qless 的队列管理功能,你可以构建出...

Global site tag (gtag.js) - Google Analytics