Memcached与Redis的性能对比

时间:2023-02-08 19:37:09

最近有个项目需要用no-sql数据库来保存大量的数据,插入和查询都比较频繁,相对而言查询更加频繁。是选择Memcached、还是Redis呢?对Memcached与Redis做个相关测试,就知道了。

Memcached与Redis测试对比:

1)  性能方面:

相同的写入和读取数据次数,key为uuid, value为模拟的终端信息约600字节

        单线程:

    memcached的写入时间要优于redis, 而redis的读取时间优于memcached

                           20000次写入数据,memcached写入时间约为9000,msredis写入时间约为13000ms

                           20000次读取数据,memcached读取时间约为7000,msredis读取时间约为6000ms

        多线程:

                          redis在低并发的时候比memcached好

60个并发

redis每个线程写入1000次数据,执行总用时约为5000ms;Memcached每个线程写入1000次数据,执行总用时约为10000ms

redis每个线程读取1000次数据, 执行总用时约为2000ms ;Memcached每个线程读取1000次数据,执行总用时约为8000ms

2) 内存使用效率:

        如果使用简单的key-value存储,Memcached的内存利用率更高。

而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。

这和应用场景和数据特性有关。

Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘

memcache 存在内存中,分配的内存满后,会按一定的规则删除一些k/v数据(LRU规则)

3)数据操作

        Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,

通常在Memcached 里,你需要将数据拿到客户端来进行类似的修改再set回去。

这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的 GET/SET一样高效。

4)数据持久化和数据同步

Redis支持这两种,会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,在升级或者重启系统后可以再次加载进行使用, 而memcached都不支持

5)分布式

        两者都支持集群 一主多从或者一主一从


总结:两者的性能都比较高,这并不是瓶颈,Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。Redis,具备一定的数据库特征,可以将内存中的数据保持在磁盘中,当对数据的重要性比较高时,重启升级系统,Redis可以通过aof恢复部分数据。

根据以上的分析,建议还是使用redis。