从数据库类型、数据存储方式、特殊功能讲解Redis和memcached和Mysql的区别
分析为什么越来越的人抛弃memecached选择redis
作为同款功能的内存产品,Redis和memcached各有什么优势?
内存管理机制
Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小, 将分配的内存分割成特定长度的块 以存储相应长度的key-value数据记录,以完全解决内存碎 片问题。空闲列表进行判断存储状态,【类似于Java虚拟机对象的分配,空闲列表】
Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,【CPU内存是连续,类似于Java虚拟机对象的分配,直接内存分配(指针碰撞)】
持久化方案
memcached不支持内存数据的持久化操作,所有的数据都以in-memory的形式存储。
redis支持持久化操作。redis提供了两种不同的持久化方法来讲数据存储到硬盘里面, 第一种是rdb形式,一种是aof形式
rdb:属于全量数据备份,备份的是数据
aof:append only if 增量持久化备份,备份的是指令
缓存数据过期机制
概念:key,设计一个小时之后过期,超过一个小时查数据就会查不到
Memcached 在删除失效主键时也是采用的消极方法,即 Memcached 内部也不会监视主键是否失效,而是在通过 Get 访问主键时才会检查其是否已经失效
Redis 定时、定期等多种缓存失效机制,减少内存泄漏
支持的数据类型
Memcached支持单一数据类型[k,v]
redis支持五种丰富的数据类型
结论:结合以上几点Redis优势较大,虽然内存存储方面有些不足,但影响不大