Redis cluster eval的使用
2018-08-07 13:26
645 查看
对于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都是一样的,因此
方法2,其实也没严格按照redis scripting规范 来 带入 key ,但是由于redis-client 保证了 把脚本发送给key的redis节点,因此这也无伤大雅
因此可以借助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节点,因此这也无伤大雅
相关文章推荐
- redis(9)、redis集群之redis Cluster使用
- 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型
- redis-cluster集群模式下使用pipeline,mget,mset批量操作
- redis-cluster研究和使用
- redis-cluster研究和使用
- redis-cluster研究和使用
- redis-cluster研究和使用
- Redis Cluster 3.0搭建与使用
- [转载] redis-cluster研究和使用
- Redis-Cluster实战--5.使用redis-cli安装
- Redis使用Eval多个键值自增的操作实例
- redis-cluster研究和使用
- Ubuntu 15.10 下Redis Cluster使用
- [转]redis-cluster研究和使用--待研究
- Redis Cluster 3.0搭建与使用
- 使用redis4.0.1和redis-cluster搭建集群并编写重启shell脚本
- Redis 使用 Eval 多个键值自增操作示例
- 在团800运维工作总结之redis-cluster使用
- redis-cluster研究和使用
- redis-cluster研究和使用