博客
关于我
在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 zookeeper实现分布式锁
    查看>>
    PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
    查看>>
    php 反射
    查看>>
    PHP 实现N阶矩阵相乘
    查看>>
    php 延迟静态绑定static关键字
    查看>>
    Redis入门
    查看>>
    PHP 截取字符串乱码的解决方案
    查看>>
    php 接口类与抽象类的实际作用
    查看>>
    PHP 插入排序 -- 折半查找
    查看>>
    PHP 支持8种基本的数据类型
    查看>>
    php 放大镜,放大镜放大图片效果
    查看>>
    PHP 数据库连接池实现
    查看>>
    php 数组 区别,PHP中数组的区别
    查看>>
    PHP 数组怎么添加一个元素
    查看>>
    PHP 文件操作
    查看>>
    php 文字弹幕效果代码,HTML5文字弹幕效果
    查看>>
    php 时间日期函数,获取今天开始时间,结束时间
    查看>>
    php 标准规范
    查看>>
    PHP 浮点型精度运算相关问题
    查看>>
    php 浮点型计算精度问题
    查看>>