文档章节

Redis cluster eval的使用

梦想游戏人
 梦想游戏人
发布于 2018/08/07 13:26
字数 440
阅读 229
收藏 0

对于eval 有一个很大的约束在集群模式下,即lua所用到的key必须在该节点上

因此可以借助solt来发送到指定的key存在的节点上  因此需要redis-client 正确处理 key

方法1:

    通过client显示指定key 发送到对应的节点上,lua代码不参与redis缓存 每次发送到redis的lua代码都是新的 因为把用到的东西 都封装到代码里面强了,会导致缓存泄漏问题 虽然redis文档说 不是大问题,

方法2:改进方法1 合理的运用redis的lua缓存机制,因为方法1对于redis的lua语义是相悖的,应该是 对于可变化的值 通过 ARGV参数来传递 使得发送给redis的每个脚本代码 产生的sha1都是一样的,因此

	//带有 1 个argv 版本
	void CommandEval0_1(const string& sKey, const string & script, const string & argv1, const LuaRef& luaReplyCb)
	{
		LuaRef luaReplyCb2 = luaReplyCb;
		auto replyCb = ToFunction<CRedis::ReplyCb>(luaReplyCb2);
		GetRedis().CommandF(sKey, replyCb, "eval %s 0 %s", script.c_str(), argv1.c_str());
	}

-- 玩家修改名字
t.player_modify_name = [[
    local key = 'player_name_' .. ARGV[1];
    if redis.call('exists',key) == 0 then
        local ret =  redis.call('set',key,ARGV[2]);
        if ret and ret.ok and ret.ok == "OK" then
            return "ok";
        else
            return "error";
        end
    else
        return "exists";
    end]];

方法2,其实也没严格按照redis scripting规范 来 带入 key ,但是由于redis-client 保证了 把脚本发送给key的redis节点,因此这也无伤大雅

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 36
博文 437
码字总数 124258
作品 0
成都
私信 提问
redisgeo 怎么支持集群

redis3版本出了redis cluster集群方案 因key散列到各个节点里面,是不支持 key *,也不支持select其他dbindex, 也不支持多个key的操作 而redis geo geoadd是需要4个key的。。在集群模式下就...

0fsfsfe
2016/10/11
254
1
Redis 2.6.0 RC1 发布,支持 Lua 脚本

Redis 2.6.0 RC1 发布了,该版本也是 2.5.7. 目前还是测试版本,请勿在生产环境中使用。 主要改进内容有: Server side Lua scripting, see http://redis.io/commands/eval Virtual Memory ...

红薯
2012/04/27
1K
1
Twemproxy,Twitter 发布的 Redis 代理服务

虽然大量用户使用了大型Redis节点集群,从项目本身到角度来看,Redis仍然是一个单实例业务。 关于项目的分布式化我有一个想法,可以不需要再评估Redis的任何多线程版本:我认为从Redis的角度...

jjj09090
2013/03/03
18.5K
11
Redis进阶实践之十九 Redis如何使用lua脚本

Redis进阶实践之十九 Redis如何使用lua脚本 一、引言 redis学了一段时间了,基本的东西都没问题了。从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何...

morpheusWB
2018/09/13
0
0
【宇润日常疯测-002】Redis->eval() 到底好在哪

平时你用 Redis 是不是经常 、一把梭?其实 Redis 中还有很多有用的数据结构,以及各种方法。今天宇润就来测试一下方法。 Redis Eval 官方说明(节选) 从 Redis 2.6.0 版本开始,通过内置的...

宇润
2018/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 定义新的异常

#include <iostream> #include <exception> using namespace std; struct MyException : public exception { const char * what () const throw () { return "C++ Exception"; } }; int main......

天王盖地虎626
55分钟前
3
0
PDMan-2.1.1 发布:用心开源,免费的国产数据库建模工具(春节前最后一个版本)

一、软件介绍 PDMan 是一款开源免费的数据库模型建模工具,是PowerDesigner之外另一种更好的选择。支持Windows,Mac,Linux等操作系统,具有上手容易,使用简单的特点。 2018年获得码云GVP (Gi...

O龙猫O
今天
15
0
OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
今天
255
7
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
9
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部