redis 2.8之前的版本,为了实现支持巨量数据缓存或者持久化,一般需要通过redis sharding模式来实现redis集群,普遍大家使用的是twitter开源的Twemproxy。

twemproxy不会增加redis的性能指标数据,据业界测算,使用twemproxy相比直接使用redis会带来~10%的性能下降。   但是单个redis进程的内存管理能力有限。据测算,单个redis进程内存超过20G之后,效率会急剧下降。目前,我们给出的建议值是单个redis最好配置在8G以内。8G以上的redis缓存需求,通过twemproxy来提供支持。

twemproxy

不会增加

redis

的性能指标数据,

据业界测算,

使用

twemproxy

相比直接使用

redis

会带来

~10%

的性能下降。

但是单个

redis

进程的内存管理能力有限。

据测算,

单个

redis

进程内存超过

20G

之后,

效率

会急剧下降。目前,我们给出的建议值是单个

redis

最好配置在

8G

以内。

8G

以上的

redis

缓存需求,通过

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"

你编译或者下载个老版本的ServiceStack.Redis组件(新版本收费了,有貌似1小时6000次的上限,https://servicestack.net/)。然后呢,你可以安心的读写redis了,看起来一切都很美好,某一天发现为了更新一个值,需要频繁的读写redis,这不科学,于是你继续发掘,发现redis支持lua脚本,很多事务性的操作可以直接交给lua脚本一次完成,分分钟改改代码,发个新版本,一些看起来又安逸了。

突然,客服投诉来啦,说某个数据值不对,查数据库,数据正确的。查redis,哎~果然不对,redis没更新(假设redis是用来做缓存的,mysql做持久化),难道删除redis key更新缓存的方法有问题?你划拉代码看看没啥问题,传递一批key让lua脚本循环删掉这些key,从而达到过期缓存的目的,代码简单,流程清晰。RedisDesktopManager直连redis删除key,ok的,调试代码,的确大概有一半的redis key删除不掉,此时你就掉到redis sharding模型下执行lua脚本的坑里了。

坑:redis sharding模型下执行lua脚本时,假设key1在shard1,lua+key1可不一定在shard1。

  即,在proxy上对key1 get/set时,Twemproxy对key1哈希计算后会保证分配到固定的shard上,但通过代理调用lua脚本批量处理redis key时,哈希散列可能落在不同的shard上。

在redis一致性hash(shard)中使用lua脚本的坑的更多相关文章

  1. Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性

    Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...

  2. CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

    1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Re ...

  3. 在redis中使用lua脚本

    在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能. 不过lua也会有很多限制,在使用的时候要注意. 在Redis中执行Lu ...

  4. redis中使用lua脚本

    lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...

  5. 新姿势!Redis中调用Lua脚本以实现原子性操作

    背景:有一服务提供者Leader,有多个消息订阅者Workers.Leader是一个排队程序,维护了一个用户队列,当某个资源空闲下来并被分配至队列中的用户时,Leader会向订阅者推送消息(消息带有唯 ...

  6. 服务降级 托底预案 Nginx中使用Lua脚本检测CPU使用率,当达到阀值时开启限流,让用户排队

    https://mp.weixin.qq.com/s/FZAcQQAKomGEe95kln1HCQ 在京东我们是如何做服务降级的 https://mp.weixin.qq.com/s/FZAcQQAK ...

  7. C++中嵌入Lua脚本环境搭建

    第一步(环境准备工作): 工具: ●LuaForWindows_v5.1.4-46.exe傻瓜式安装. 作用:此工具可以在windows环境下编译运行Lua脚本程序.安装完成后会有两个图标:Lua和S ...

  8. 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

    [COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...

  9. 怎样在Cocos2d-x中使用Lua脚本

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013321328/article/details/25699545 笔者使用的是Cocos2d-x ...

随机推荐

  1. noip2015-day1-t2

    题意:有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学.游戏开始时,每人都只知道自己的生日.之后每一轮中, ...

  2. SkyDrive 中Office 的版本控制功能

    之前看到了这么个图片,然后想着自己过一年后也要写毕业论文… 总不能也这个样子吧,这种版本到底知道哪个是最终版啊,不用版本号也就算了……还……(据说这是张内涵图) 当年的Word 没有版本控制也就算了, ...

  3. 【5_283】Move Zeroes

    终于碰到一道水题,睡觉去~ Move Zeroes Total Accepted: 37369 Total Submissions: 88383 Difficulty: Easy Given an a ...

  4. 6.4 APK包限制

    Google 2015年 9月28日公告:为了Android开发商可以制作出更加复杂的app和游戏,Google Play游戏包体(APK)大小由原来的50MB提高到100MB.但是针对Android ...

  5. 如何卸除SDL TRADOS中的自开发插件

    去年学着用SDL的例子编译了一个名为SimpleText的插件,每次打开TRADOS 2014时都要提示三次加载插件,很是烦人.但我想卸掉时,却无从下手,不知道怎么办.这个问题纠缠了我很久,今晨心性比 ...

  6. PHP会话处理相关函数介绍

    PHP会话处理相关函数介绍 提交 我的评论 加载中 已评论 PHP会话处理相关函数介绍 2015-03-23 PHP100中文网 PHP100中文网 PHP100中文网 微信号 功能介绍 互联网开发者 ...

  7. rsync 配置

    1.安装rsync和配置文件 root@localhost ~]# yum -y install rsync #安装rsync服务 #CentOS 默认以 xinetd 方式运行 rsync 服务.r ...

  8. 数据库知识整理<五>

    简单的数据查询: 5.1查询的基本结构: Sql语句:select [distinct] (* | column [alias],...) from table [where condition] [ ...

  9. javascript 中的console.log和弹出窗口alert

    主要是方便你调式javascript用的.你可以看到你在页面中输出的内容. 相比alert他的优点是: 他能看到结构话的东西,如果是alert,淡出一个对象就是[object object],但是co ...

  10. vscode调试HTML

    使用 live-server npm i -g live-server 注:最好还是把live-server安装成全局,这样在使用时整个项目就是一个站点. Ctrl+` 进入命令行终端 打开帮助提示: ...