Redis 嵌入式开发
目前
目前来说,我们使用Redis的场景大多是仅仅将Redis作为缓存系统来使用。其实,Redis发展到现在,由于Redis的基于内存速度快,同时支持数据持久化等优良特点,业界很多地方,都是直接将Redis做为数据库使用。甚至,对于一些简单的应用,我们可以直接把逻辑写进Redis里面,从而达到更高的效率。
为什么是lua
lua本身非常小巧,他的解释器体积也非常小
语言运行的效率相对较高,速度也比较快
有一些比较好的语言特性
这里不是重点,不再赘述
为什么要在Redis里面进行嵌入式开发
Redis运行的原理是基于C/S模型的,也就是说每次拉取数据就是一次的网络请求。如果在一个接口里面,我们有几个数据需要从Redis里面获取,可能就需要发好几次网络请求,这样的网络开销是相对比较大的。如最左边的图
如果我们把,所有取数据的逻辑,全部放在Redis里面,在Redis里面就打包好,一次性的返回回来,我们就可以只需要一次网络请求,就可以把我们需要的数据都拿回来(如中间的这幅图)。这样,我们的网络消耗就能大幅度的减小。甚至,在一些场合,我们直接就可以用Nginx直接找Redis要数据,不需要经过php-fpm/Uwsgi这个环节,就可以把需要的缓存数据全部返回(如右边的图)。这就是通过在Redis进行嵌入式开发来提高网络效率的原理。
内部优化
最主要的Redis提供了EVAL方法来进行,其用法是
eval ‘要执行的lua脚本代码’ 要调用的存在redis里面的数据的个数 他们的key 然后是要穿入的参数
例子:
eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
传入的key是保存在全局变量KEYS这个table里面,传入的参数是保存在全局变量ARGV这个table里面。全局变量是不可更改的。(table是lua中