文档章节

Redis cluster eval的使用

梦想游戏人
 梦想游戏人
发布于 08/07 13:26
字数 440
阅读 117
收藏 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
博文 432
码字总数 123495
作品 0
成都
私信 提问
redisgeo 怎么支持集群

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

0fsfsfe
2016/10/11
252
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
Redis进阶实践之十九 Redis如何使用lua脚本

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

morpheusWB
09/13
0
0
redis更新日志中文版2.4-2.6

2.4 -> 2.6 1.SORT命令不会对非数值类型(double)排序,适用于list,set (string 类型使用 sort alpha ) 2.EXPIRE相关命令都精确到了毫秒,不影响expire命令 3.INFO输出格式中增加了空行与注释...

屌丝Lee
2016/06/15
88
0
初学乍练:redis事务与脚本

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/82350861 目录 一、事务 1. 概述 2. 错误处理 3. watch命令 二、redis脚本 1. 脚本介...

wzy0623
09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux虚拟机安装VmwareTool

1.点击虚拟机: 2.点击安装Vmware-Tools,出现如下界面,将圈起来的拖动到桌面 3.接着打开终端,执行解压缩命令 tar -xzv -f VMwareTools-10.2.5-8068393.tar.gz 这个后面的VMwareTools-10.2....

陈刚生
38分钟前
1
0
Java学习笔记(1) --JSE 、JEE、 JME三者的区别

java SE : java standard edition , JSE。它允许允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的java应用程序。 java SE包含了java Web 服务开发的类,并为java platform ,e...

hellation_
41分钟前
3
0
kafka 环境配置

https://www.cnblogs.com/fly-piglet/p/7762556.html

steel7c4
45分钟前
1
0
关于人工智能的思考

像人类一样可以思考,可以创造的人工智能会出现吗? 个人认为:会出现。但是出现的时间,取决了于硬件架构,和运算架构实现的时候。原因在于,人类智能可以出现,机器智能为什么不可以呢,不...

janl
46分钟前
1
0
破界!Omi生态omi-mp发布,用小程序开发生成Web

omi-mp 是什么 Omi 框架是微信支付线研发部和 AlloyTeam 开源的通用 Web 组件化框架,基于 Web Components,用来开发 PC、手机浏览器或者微信、手Q webview 的 Web 页面。自今年5月开源以来,...

腾讯开源
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部