利用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信息,底层还是单机方式连接。
如管道,则是把所有指令先缓存起来,后按节点分次提交执行,缓存每次返回的结果,最终把整体结果返回。
引用
分享到:
相关推荐
高并发的优化lua + openresty+redis (实现多级缓存)+限流(掌握)
Nginx 教程 基础 Nginx编译安装 Nginx.conf详解 Location 详解 Nginx基础知识 Nginx高性能WEB服务器详解 ... Nginx的11个Phases agentzh 的 Nginx 教程 ... TCP和UDP负载平衡官方参考文档 ... nginx 并发数问题思考:...
OpenResty lua redis 实现
resty-redis-cluster:Redis集群的Openresty lua客户端
nginx+lua+redis 集群 连接插件和脚本,原来插件是没有密码功能 故 修改了一下 k可以自己下载使用
lua-resty-redis-session-module 相依性 安装 ...git clone ...cp lua-resty-redis_session/lib/resty/redis_session.lua /usr/local/openresty/lualib/resty/ 例子 设置主机(您的浏览器可能不支持本地主
LightPath CDN Nginx模块版本:1.0.0-beta描述CDN,内容交付网络,使用Openresty(Nginx)用Lua编写。 网站配置(后端,缓存规则,边缘规则等)存储在Redis中。 如果有兴趣,我会在以后添加适当的文档。 该项目之...
redis_cluster:一个开放式的nginx lua redis集群
lua-resty-mongol_openresty连接mongoldb的lua库。 纯lua实现
OpenResty+Lua+Redis 高性能后端接口
lua-resty-qless:用于OpenResty Redis的Lua绑定到Qless(队列管道管理)
搭建教程请查看 https://blog.csdn.net/qq_27184497/article/details/82626126
基于OpenResty的百万级长连接推送.pdf
nginx+lua+redis实现token验证。实现基本的token验证、反向代理转发内部服务,lua连接redis封装、lua域名解析封装、lua域名脚本等
Nginx与Lua编写脚本的基本内置块是指令执行顺序的图 Nginx教程 基础 案例 模块 好文 流媒体 其他 Lua教程 Redis教程 Openresty教程 Linux教程 壳牌 微信公众号
rcluster.lua:支持redis集群的lua redis客户端驱动程序
OpenResty的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应...
这个openresty包是基于官方最新代码 编译好的。 openresty中升级nginx openresty如何升级nginx的版本? Nginx 有RCE 漏洞。 修复nginx 爆出栈溢出rce漏洞,openresty什么时候升级,或者如何单独升级nginx nginx内核...
Redis、Lua、Nginx、OpenResty笔记
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能...