Win下的低开销Redis兼容之选-Memurai

第一次邂逅Memurai是在2019年的大二暑假,当时在Windows上使用老旧的Redis 3.x构建时遇到了一些奇怪的问题,也找不到解决方案,跑虚拟机/Docker麻烦不说,还吃资源(Windows下的Docker借助Hyper-V,启动较慢,并且会吃掉所给的内存),现在WSL2也是一个好方案,启动快、性能佳,不过环境也会吃掉一些内存,并且还没有完全普及。折腾许久,最后在StackOverflow上发现了这个Redis的兼容实现–Memurai。当时Memurai还是1.x,大概在Preview阶段,完全兼容Redis5的API,试用一番后感觉十分满意,非常适合于日常开发。

一年多过去了,Memurai依旧不温不火,大概是更多人选择了WSL2/Docker方案吧,性能和兼容性更好,除了启动慢(WSL2很快)、吃宿主资源之外没有其他明显缺点。

唯一值得吐槽的是它的名字也太不好记了,每次重新配环境时都要找好久!

开发缘由

以下两端翻译自官方博客

从历史上看,寻找受支持的Redis Windows版本的开发人员很不幸。没有Redis官方的Windows构建,大多数其他选择都有相同的缺点:不是原生的Windows程序。开发人员不能将广受欢迎的Redis数据结构完美集成到Windows基础结构中,也无法享受原生实现带来的性能和可靠性的提升。此外,官方已放弃Windows下的Redis,连Redis的正式Microsoft Open Tech版本也已存档不再更新。

PS:这里的性能优势只是相对于传统的Windows的构建而言,相比在Hyper-V虚拟化环境中运行的原生Redis并没有明显优势

特性

Memurai是Windows平台下Redis 5的兼容实现。它旨在提供企业级Windows环境所需的可靠性和性能。与Redis一样,Memurai使用内存中的数据结构来大幅度提升性能,并且Memurai支持了所有Redis功能,例如持久性,复制,事务,LUA脚本,高可用性,发布/订阅,群集,模块,Stream和LRU数据驱逐。实际上,Memurai支持所有Redis 5的驱逐策略。

安装

官方网站:https://www.memurai.com/

下载页面:https://www.memurai.com/get-memurai

1.我们打开下载页面,找到Developer Edition,点击FREE DOWNLOAD即可。

事实上,Memurai还提供企业版,不过真到大规模应用,有几个人会选择Win Server呢?

2.下载完成后我们得到了一个标准msi安装包,直接安装就可以了

3.安装过程中可以配置一下端口,默认会安装为服务

4.安装完就可以退出了,Memurai已经被安装为系统服务

使用

安装时会自动将Memurai的根目录添加到环境变量PATH中,我们来看一下有什么内容

可以看到可执行文件都是以memurai开头,比如redis-cli就是memurai-cli

使用CLI

和redis不同,我们需要用memurai-cli,两者只是名字不同,API是完全兼容的

修改配置

配置文件为根目录下的memurai.conf,修改完用net指令重启服务就可以了

更多选项可查阅官方文档https://docs.memurai.com/

性能

Memurai并不自带redis-benchmark工具,可以到官方的3.x构建中拿一个用

由于时间关系,这里完全使用默认参数做一个压测

篇幅所限,删除了结果中的参数,压测参数如下

100000 requests
50 parallel clients
3 bytes payload
keep alive: 1

压测结果

看起来还是十分优秀的,性能只比WSL/Docker方案低20%左右,但它是原生应用,静默状态下对宿主机资源的占用非常低。WSL2/Docker运行虽然性能好,但宿主吃内存的缺点不容忽视。我们只是用Memurai做一个日常开发的兼容,应该更看重易用性和是否节省资源,内存吃紧的小伙伴可以尝试一下它。

====== PING_INLINE ======
99.76% <= 1 milliseconds
100.00% <= 1 milliseconds
60790.27 requests per second

====== PING_BULK ======
99.87% <= 1 milliseconds
100.00% <= 1 milliseconds
60496.07 requests per second

====== SET ======
99.38% <= 1 milliseconds
99.93% <= 2 milliseconds
99.95% <= 3 milliseconds
99.95% <= 16 milliseconds
99.95% <= 18 milliseconds
99.97% <= 19 milliseconds
100.00% <= 20 milliseconds
59559.26 requests per second

====== GET ======
99.87% <= 1 milliseconds
100.00% <= 1 milliseconds
60240.96 requests per second

====== INCR ======
99.91% <= 1 milliseconds
100.00% <= 1 milliseconds
61690.31 requests per second

====== LPUSH ======
99.74% <= 1 milliseconds
100.00% <= 2 milliseconds
100.00% <= 2 milliseconds
61690.31 requests per second

====== LPOP ======
99.90% <= 1 milliseconds
100.00% <= 1 milliseconds
62266.50 requests per second

====== SADD ======
99.86% <= 1 milliseconds
100.00% <= 1 milliseconds
61842.92 requests per second

====== SPOP ======
99.81% <= 1 milliseconds
99.96% <= 4 milliseconds
100.00% <= 4 milliseconds
62539.09 requests per second

====== LPUSH (needed to benchmark LRANGE) ======
99.56% <= 1 milliseconds
100.00% <= 2 milliseconds
100.00% <= 2 milliseconds
61957.87 requests per second

====== LRANGE_100 (first 100 elements) ======
59.46% <= 1 milliseconds
99.88% <= 2 milliseconds
100.00% <= 3 milliseconds
100.00% <= 3 milliseconds
24881.81 requests per second

====== LRANGE_300 (first 300 elements) ======
0.01% <= 1 milliseconds
75.39% <= 2 milliseconds
99.46% <= 3 milliseconds
99.96% <= 4 milliseconds
100.00% <= 4 milliseconds
12858.43 requests per second

====== LRANGE_500 (first 450 elements) ======
0.00% <= 1 milliseconds
0.16% <= 2 milliseconds
88.08% <= 3 milliseconds
99.49% <= 4 milliseconds
99.94% <= 5 milliseconds
100.00% <= 5 milliseconds
9521.09 requests per second

====== LRANGE_600 (first 600 elements) ======
0.00% <= 1 milliseconds
0.04% <= 2 milliseconds
20.20% <= 3 milliseconds
94.76% <= 4 milliseconds
99.82% <= 5 milliseconds
99.94% <= 6 milliseconds
100.00% <= 6 milliseconds
7572.89 requests per second

====== MSET (10 keys) ======
98.77% <= 1 milliseconds
99.91% <= 2 milliseconds
100.00% <= 2 milliseconds
62383.03 requests per second

Azure99

计算机专业学生,已经大三啦,是只休闲音游玩家,喜欢折腾vps、玩机,偶尔写写代码

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注