博客
关于我
在redis一致性hash(shard)中使用lua脚本的坑
阅读量:424 次
发布时间:2019-03-06

本文共 1041 字,大约阅读时间需要 3 分钟。

Redis 2.8之前的版本为了支持巨量数据缓存或持久化,通常采用sharding模式实现集群,常用Twitter开源的Twemproxy作为代理。

Twemproxy的性能影响

Twemproxy不会直接增加Redis的性能指标数据。业界测算显示,与直接使用Redis相比,Twemproxy带来约10%的性能下降。然而,单个Redis进程的内存管理能力有限,超过20G后效率会显著下降。建议将单个Redis配置在8G以内,超出部分则采用Twemproxy提供支持。

Redis内存管理的挑战

单个Redis进程的内存管理能力有限。超过20G后,效率会急剧下降。因此,建议单个Redis最好配置在8G以内,超过这一限制的缓存需求应通过Twemproxy实现。

Twemproxy配置示例

Twemproxy的配置信息通常存储在nutcracker.yml文件中,默认查找位置在conf目录下,也可以通过-c参数指定。以下是一个示例配置:

twem1:  listen: "127.0.0.1:22121"  hash: fnv1a_64  distribution: ketama  auto_eject_hosts: false  server_failure_limit: 1  server_retry_timeout: 60000  redis: true  servers:    - "IP1:6379:1 shard1-master"

Redis性能优化的误区

在使用Redis sharding模型时,Lua脚本处理键值对时可能出现问题。具体来说,代理端(如Twemproxy)在处理Lua脚本时,可能会将某些键值对分布在不同的shard上,从而导致操作不一致。

实际应用中的经验教训

在实际应用中,频繁的读写操作可能导致性能问题。通过 Lua脚本可以一次性完成事务性操作,显著提升效率。然而,在某些场景下,直接使用Lua脚本删除缓存键值时可能会遇到问题,特别是在Redis sharding模型中,可能导致部分键值未能正确过期或删除。

解决方案

针对上述问题,可以采取以下措施:

  • 在Redis sharding模型中谨慎使用Lua脚本,确保键值对的分布与操作一致。
  • 对于缓存过期或删除操作,可以结合代理端(如Twemproxy)进行批量处理,避免直接在Lua脚本中频繁操作。
  • 通过合理配置和优化,可以有效提升Redis的性能表现,同时确保系统的可靠性和可维护性。

    转载地址:http://nafuz.baihongyu.com/

    你可能感兴趣的文章
    php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
    查看>>
    php根据年月日计算年龄
    查看>>
    RabbitMQ - 单机部署(超详细)
    查看>>
    php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
    查看>>
    php模拟发送GET和POST请求
    查看>>
    RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo
    查看>>
    php模板引擎smarty
    查看>>
    php正则表达式模式
    查看>>
    php正则表达式的特殊字符含义
    查看>>
    PHP正则表达式获取武汉市的实时pm2.5数据并邮件发送phpmailer
    查看>>
    RabbitMQ + JMeter组合,优化你的中间件处理方式!
    查看>>
    PHP水仙花问题解法之一
    查看>>
    php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
    查看>>
    php注册页面实现注册后跳转页面
    查看>>
    PHP消息队列的实现方式与详解,值得一看
    查看>>
    PHP混合Go协程并发
    查看>>
    php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
    查看>>
    PHP源码安装后如何新增模块
    查看>>
    php漏洞tips
    查看>>
    php版Zencoding之 phpstorm
    查看>>