加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Redis进阶应用:Redis+Lua脚本实现复合操作

发布时间:2019-08-07 00:35:49 所属栏目:建站 来源:李崇
导读:一、弁言 Redis是高机能的key-value数据库,在很洪流平降服了memcached这类key/value存储的不敷,在部门场景下,是对相关数据库的精采增补。得益于超高机能和富厚的数据布局,Redis已成为当前架构计划中的首选key-value存储体系。 固然Redis官网上提供了20
副问题[/!--empirenews.page--]

一、弁言

Redis是高机能的key-value数据库,在很洪流平降服了memcached这类key/value存储的不敷,在部门场景下,是对相关数据库的精采增补。得益于超高机能和富厚的数据布局,Redis已成为当前架构计划中的首选key-value存储体系。
固然Redis官网上提供了200多个呼吁,但做措施计划时照旧停止不了为了实现一小步营业逻辑而多次挪用Redis的环境。
以compare and set场景为例。假如行使Redis原生呼吁,必要从Redis中获取这个key,然后提取个中的值举办比对:假如相称就不做处理赏罚;假如不相称可能key不存在则将key配置成方针值。仅仅一个单点的compare and set操纵就必要与Redis通信两次。
另外,这种分手操纵无法操作Redis的原子特征,占用多次收集IO。
本日我们就来切磋一下怎样优雅地应对上述场景。
二、Redis与Lua
在先容Lua之前,我们必要先对这个说话有个起源相识。Lua 是一个小巧的剧本说话,险些可以运行在全部操纵体系僻静台上。我们一样平常不会用Lua处理赏罚出格伟大的事宜,因此只需相识一些lua的根基语法即可。
Redis问世之后,其开拓者也意识到了开篇提到的题目,因此Redis从2.6版本开始支持Lua剧本。新版本的Redis还支持Lua Script debug,感乐趣的小搭档可以去官网的Documentation中找到对应先容和QuickStart。
有了Lua剧本之后,行使Redis措施时便可以或许在以下方面实现明显晋升:

  • 镌汰收集开销:原来N次收集哀求的操纵,可以用一个哀求完成。原先N次哀求的逻辑放在Redis处事器上完成,镌汰了收集来回时延; 
  • 原子操纵:Redis会将整个剧本作为一个整体执行,中间不会被其他呼吁插入。这是一个重要特征,必然要拿小本本记好。至于为什么是一个原子操纵,我们往后再说明; 
  • 复用:客户端发送的剧本会永世存储在Redis中。这样其他客户端就可以复用这一剧本,而不必要行使代码完成同样的逻辑。

以是此刻传播一句话:要想学好Redis,必会Lua Script。

三、通过Lua剧本实现compare and set

接下来我们就实现一个简朴的compare and set,并通过这个例子感觉一下Lua剧本给Redis行使带来的全新体验。
起首看一下怎样让Redis执行Lua剧本。

3.1 Redis的EVAL

  1. Redis 127.0.0.1:6379> EVAL script  numkeys key [key ...] arg [arg ...] 
  • script:参数是一段 Lua 5.1 剧本措施。剧本不必(也不该该)界说为一个Lua函数。
  • numkeys:用于指定键名参数的个数。 
  • key [key ...]:从 EVAL 的第三个参数开始算起,暗示在剧本中所用到的Redis键(key)。在Lua中,这些键名参数可以通过全局变量 KEYS 数组,用1为基址的情势会见( KEYS[1] ,KEYS[2],依次类推)。 
  • arg [arg ...]:附加参数,在Lua中通过全局变量ARGV数组会见,会见的情势和KEYS变量相同( ARGV[1] 、 ARGV[2] ,诸云云类)。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读