博客
关于我
在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/

    你可能感兴趣的文章
    R&Python Data Science 系列:数据处理(2)
    查看>>
    php递归算法总结
    查看>>
    PHP递归遍历文件夹
    查看>>
    R&Python Data Science 系列:数据处理(1)
    查看>>
    php错误日志文件
    查看>>
    PHP错误解决:Array and string offset access syntax with curly braces is deprecated
    查看>>
    php隐藏手机号中间4位方法总结
    查看>>
    php面向对象三大特征封装、多态、继承
    查看>>
    php面向对象全攻略
    查看>>
    php面向对象的基础题
    查看>>
    php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结)...
    查看>>
    php页面增加自选项,php-在Woocommerce中添加新的自定义默认订购目录选项
    查看>>
    php页面静态化技术;学习笔记
    查看>>
    php项目心得以及总结
    查看>>
    R&Python Data Science 系列:数据处理(4)长宽格式数据转换
    查看>>
    PHP项目集成支付宝PC端扫码支付API(国内支付)
    查看>>
    php预定义常量&变量
    查看>>
    R 集成算法③ 随机森林
    查看>>
    php验证码背景色设置无效
    查看>>
    php验证邮箱是否有效
    查看>>