如何评价RethinkDB?和MongoDB,Redis有什么区别?
RethinkDB 简直是 NoSQL 中的黑科技,被网友誉为"MongoDB done things right",卖点是 实时性。
比如:
+ 自带 Admin UI,就是数据库在跑的时候,后台有个非常棒的管理界面,可以直接用上面的 consle 查询
+ UI 上 一键 sharding 和 replica,方便的令人发指。
+ 支持 table 间 join,甚至是 distributed join(斜眼看了下 MongoDB)。
+ Unix pipe 形式的 query language。有点像 pyspark 的那种操作,简单易懂,好调试。
+ 最新的2.1版本加入牛 X 的 Raft 算法(可以理解为 consensus algorithm中的 Paxo)。
+ 支持的 driver 齐全。这比较邪门,用户量不算怎么大,什么 Dart, Elixir, Lua, Nim, Haskell 甚至 Common Lisp 的 driver 都有。
适合场景:
+ 实时。所以游戏挺适合的。
+ SSD 硬盘。
缺点:
+ 还是比较早期,一般 query 比 MongoDB 要慢3倍甚至更多。考虑到他们团队才17个人,和 MongoDB 的规模不能比,给几年时间,说不定能干翻 MongoDB。
redis 执行 xxx.luaxxx.lua 脚本如何传参数。格式是什么
Memcached是以LiveJurnal旗下DangaInteractive公司的BardFitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失。Memcached使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上,只要安装了libevent即可使用。Memcached的客户端软件实现非常多,包括C/C++,PHP,Java,Python,Ruby,Perl,Erlang,Lua等。当前Memcached使用广泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和WordPress等。
在Redis中执行Lua脚本有两种方法:eval和evalsha
1.eval
eval 脚本内容 key个数 key列表 参数列表
如果Lua脚本较长,还可以使用redis-cli-eval直接执行文件。
客户端如果想执行Lua脚本,首先在客户端编写好Lua脚本代码,然后把脚本作为字符串发送给服务端,服务端会将执行结果返回给客户端。
2.evalsha
将Lua脚本加载到Redis服务端,得到该脚本的sha1校验和,evalsha命令使用sha1作为参数可以直接执行对应的Lua脚本,避免每次发送Lua脚本的开销。这样客户端就不需要每次执行脚本内容,而脚本也会常驻在服务端,脚本内容得到了复用。
加载脚本: script load命令可以将脚本内容加载到Redis内存中。
lua的Redis API
lua可以使用redis.call函数实现对Redis的访问
redis.call(“set”,”hello”,”world”)
redis.call(“get”,”hello”)
除此之外Lua还可以使用redis.pcall函数实现对Redis的调用,redis.call和redis.pcall的不同在于,如果redis.call执行失败,那么脚本执行结束会直接返回错误,而redis.pcall会忽略错误继续执行脚本。
Lua脚本功能为Redis开发和运维人员带来的如下三个好处:
1.Lua脚本在Redis中是原子执行的,执行过程中间不会插入其他命令。
2.Lua脚本可以帮助开发和运维人员创造出自己定制的命令,并可以将这些命令常驻在Redis内存中,实现复用的效果。
3.Lua脚本可以将多条命令一次性打包,有效地减少网络开销。
Redis如何管理Lua脚本
1.script load
此命令用于将Lua脚本加载到Redis内存中
2.script exists
scripts exists sha1 [sha1 …]
此命令用于判断sha1是否已经加载到Redis内存中
3.script flush
此命令用于清除Redis内存已经加载的所有Lua脚本,在执行script flush后,sha1不复存在。
4.script kill
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!