Redis跟MemoryCache相比

比较

  1. redis可以持久化存储,支持事务
  2. redis相比memcached来说,拥有更多的数据结构和并支持更丰富的数据操作
  3. 内存使用效率对比:使用简单的key-value存储的话,memcached的内存利用率更高,而如果redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于memcached。另外,memcached使用预分配的内存池的方式,带来一定程度的空间浪费 并且在内存仍然有很大空间时,新的数据也可能会被剔除,而redis使用现场申请内存的方式来存储数据,不会剔除任何非临时数据 redis更适合作为存储而不是cache
  4. 性能对比:由于redis只使用单核,而memcached可以使用多核,所以平均每一个核上redis在存储小数据时比memcached性能更高。而在100k以上的数据中,memcached性能要高于redis,虽然redis最近也在存储大数据的性能上进行优化,但是比起memcached,还是稍有逊色。

redis怎么持久化存储

  1. 快照
    当redis进行快照持久化的时候,会调用操作系统的Fork函数,Fork函数会把母进程中的所有的内存进行拷贝,接下来再慢慢的进行写磁盘操作。这个时候,会充分利用操作系统的CopyOnWrite机制,在一开始,子进程
    还是使用母进程的数据,从来打到节约内存的效果,直到数据发送改变。所以,在redis空闲的时候,进行rdb持久化最划算。
  2. AOF日志
    每一条redis的错作,都会以日志的方式记录下来。举个例子,有一个集合,初始是空,先放1,再放2,最后变成{1,2}。在快照的持久化,记录的是集合的最终结果{1,2},而在AOF日志持久化中,记录的则是add1,add2,只要对日志进行重放,一样可以得到结果

我们都知道,操作系统写文件,都是先写到缓冲区,缓冲区写满才会被刷进磁盘。这个时候如果宕机了,内容是不会保存到文件当中的,好在操作系统提供了fsync的系统函数让我们可以事实把缓冲区的数据刷进磁盘。当然,如果我们每条指令都刷进磁盘,系统的瓶颈很可能会转到磁盘IO上,所以生产环境上,Redis一般配置1s钟默认执行一次fync。

你可能感兴趣的:(Redis跟MemoryCache相比)