`

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信息,底层还是单机方式连接。

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


引用

分享到:
评论

相关推荐

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

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

    openresty redis 集群客户端.zip

    openresty redis 集群客户端姓名lua-resty-redis-cluster 内容待添加。

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

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

    用于 redis 集群的 Openresty lua 客户端 .zip

    Resty-redis-cluster 是一个新建的 openresty 模块,目前可以支持大部分 redis-cluster 功能。在构建客户端时,感谢https://github.com/cuiweixie/lua-resty-redis-cluster为我们提供了很好的参考。功能列表resty-...

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

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

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

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

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

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

    lua-nginx-redis-master.zip

    利用Redis Cluster进行分布式部署,提升系统容量。 2. Lua脚本优化:避免使用循环和递归,尽量使用LuaJIT提供的原生函数,减少内存分配和垃圾回收;使用Lua的协程(coroutine)实现轻量级线程,提高并发性能。 3. ...

    微服务动态路由技术方案.pptx

    * 动态路由控制:OpenResty可以根据请求的host从Redis中查找相应的clusterip:port,实现动态路由控制。 * 高并发入口:OpenResty可以处理高并发请求,实现高性能的入口层。 * 动态服务降级:OpenResty可以根据服务的...

    Java思维导图xmind文件+导出图片

    redis Cluster数据分布算法之Hash slot redis使用常见问题及性能优化思路 redis高可用及高并发实战 缓存击穿、缓存雪崩预防策略 Redis批量查询优化 Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB ...

    Java架构师简历模板(P6、P7).docx

    * 精通Redis,具有集群搭建(Twemproxy、Codis、Redis Cluster),冷热备份,性能调优、数据迁移等实战经验 * 消息中间件:掌握RocketMQ原理及集群布署 * 负载均衡:熟练使用Nginx(Tengine、Openresty)、Zookeeper...

Global site tag (gtag.js) - Google Analytics