
强制搜索引擎只索引mixlrcom
Google把子域名当作完全独立的网站,我们不希望爬虫抓取子域名的页面,降低我们的Page rank
location /robotstxt {
rewrite_by_lua '
if ngxvar>kong的插件开发是基于lua开发的,原理是基于lua-nginx-module的机制。kong的机制其实同openresty一样,都是利用lua脚本动态控制路由规则。
所以增加kong自定义插件需要两个位置:
首先在插件目录里增加一个文件夹:hello-world
然后在文件夹里创建两个文件:handlerlua和schemalua
handlerlua 是插件逻辑文件,里面放具体的过滤规则
schemalua 是插件声明文件,里面放插件的参数等申明
编辑kongconf,增加plugins = bundled,hello-world。一般情况下/etc/kong里是没有kongconf,只有kongconfdefault和konglogrotate,可以把kongconfdefault拷贝成kongconf即可主要用途是:
(1)描述界面:WOW和剑网三的界面都是用LUA写的;
(2)沟通引擎:游戏图形引擎提供了一些接口库,可以在LUA中调用;
(3)服务器端:有些游戏,例如剑网三,在服务器端也会大量使用LUA。Lua一般用于嵌入式应用,现在越来越多应用于游戏当中,魔兽世界,愤怒的小鸟都有用到。
Lua极易嵌入到其他程序,可当做一种配置语言。
还有很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本
可以直接使用 C 代码写的函数。
比如corona 移动应用开发平台,跟PhonePap类似,不过使用Lua做开发语言,应用可以build到iOS,Android,kindle fire,nook平台; 服务器端应该也是Lua。
moai 跟corona相似,免费。
在给软件提供嵌入式脚本编程能力上,Lua是绝佳选择。如果需要脚本语言功能强大,Python是绝佳选择。Ruby在网络方面的库比较多,而Perl长于字符串处理。可以说他们各有千秋。服务端不同的引擎用的不同的语言,但是核心都是C++写的。
unity是C#+lua,lua有很多插件xlua 和slua等等。
UE4是C++配合unlua。
网易服务器是自研服务端引擎,一般是lpc、python或者luaRedis 本身已经提供了丰富的命令,但是直接用来处理一些复杂业务时可能还不够方便,会有一定的局限性。因此,在 Redis26 版本开始提供了对 Lua 脚本的支持,Lua 脚本的使用还是比较广泛的,比如商品秒杀、分布式锁等,使用 Lua 脚本可以带来以下的好处:
为了让例子更加的贴近实际应用,这里实现一个简单版的分布式锁。这里先用 Jedis *** 作。
上边详细的介绍了分布式锁的实现过程,以及可能出现的问题,最终,我们决定删除锁的 *** 作使用 Lua 脚本实现,对应的脚本如下:
Lua 脚本中执行具体的 Redis 命令,需要使用 rediscall() 方法, KEYS 表示客户端发起脚本执行命令时携带的 Redis key 的一个集合, ARGV 则是其它参数的一个集合,主意下标从1开始。结合我们的业务,这里的 KEYS[1] 则表示 lock , ARGV[1] 则是一个随机字符串。整个脚本的含义就是,如果客户端传递的 lock 的 value 和 Redis 中存储的一致,就删除 lock 。
Lua 脚本的语法还是比较简单的,具体内容可以自行学习。
前边的准备工作基本结束了,文章开始说过执行脚本有两种途径,下边我们具体来看:
这里使用 jediseval() 发送脚本到 Redis 服务器执行,后两个参数分别是 key 的集合,以及 value 参数的集合。
先将脚本以文件形式放到 Redis 里,例如这样:
然后通过如下命令让 Redis 服务器缓存脚本:
script load 命令会在 Redis 服务器缓存 Lua 脚本,并且脚本内容经过 SHA-1 签名算法处理后,会返回脚本内容的 SHA1 校验和的编码,然后在端调用时,传入编码字符串作为参数,这样 Redis 服务器就会执行对应缓存的脚本了,就不用了每次发送具体的脚本内容了。
还有两个比较有用的命令:
除了使用上边的命令缓存脚本、生成脚本的 SHA1 校验和的编码,还可以使用 Jedis 实现,但最终的 SHA1 编码内容是不同的:
实际的项目中,可能更多的会在 SpringBoot 项目中整合 Redis,此时执行 Lua 脚本的基本流程如下:
核心的类就是 DefaultRedisScript ,它实现了 RedisScript 接口。 execute() 方法最后一个参数是可变类型的,用来传递多个 value 参数。初次执行 execute() 方法时,其内部会自动缓存 Lua 脚本到 Redis 服务器;同时每次执行脚本时会根据脚本内容自动计算出对应的 SHA1 校验和的编码,去匹配、执行缓存的脚本。
具体的 SHA1 校验和的编码,可以在 execute() 方法执行后,使用 redisScriptgetSha1() 查看。使用 SpringBoot 方式 执行 Lua 脚本生成的 SHA1 校验和的编码和前边直接使用 Jedis 生成的一致。
无论用那种方式在 Redis 中使用 Lua 脚本,其中的原理都是类似的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)