redis学习(十)--- 与memcache区别
什么是memcache?
memcahce是高性能的分布式内存缓存服务器,也是一个key-valu的内存缓存服务器。但是memcahce是存在内存中的,所以发生断电或者故障会导致数据的丢失。
memcache的内存分配原理
采用slab Allocato的机制进行内存的分配和管理,其基本原理是按照预先规定的大小,将内存分为特定长度的块,以解决内存碎片问题。其中,chunk为分配的特定长度的内存块,并把内存相同的块分成组(chunk的集合),而且slab allocator还会重复使用已分配的内存,也就是说分配的内存不会释放,而是重复利用。下图是slab allocator的构造图。
memcache在收到数据后,根据数据的大小选择合适的slab,然后选择 空闲的chunk存储数据,但是这样带来了空间浪费的问题,假设一个slab中的chunk的大小为112字节,数据的大小只有100字节,那么会导致有12字节的空间的浪费。
memcahce的数据删除策略
memcahce不会释放已分配的内存,存储空间可以重复利用,会优先使用已超时的记录的空间,但是也会有新纪录添加时空间不足的情况,这个时候使用LRU机制分配空间。而且其内部也不会监视记录是否过期,而是在get的时候判断记录是否过期,因此memcache不会浪费在监视上浪费时间。
memcache与redis的区别
- 存储的数据结构:redis和memcache都存储的是键值对,但是redis的值类型丰富,可以是字符串,集合,哈希,有序集合和列表,而memcache主要是字符串
- 存储的位置:memcache存在内存中,但是redis既可以存储在内存,又可以持久化在硬盘上
- 数据的量:redis单个value的最大限制是1GB,memcache的限制是1MB
- 集群管理方式:redis支持master-slave模式,memcache支持分布式
- 性能:redis只可以使用单核,memcahce可以使用多核