Redis(Remote Dictionary Server ),即远程字典服务。其具备如下特性:
- 基于内存运行,性能高效
- 支持分布式,理论上可以无限扩展
- key-value存储系统
- 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
Memcache 是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,基于key-value的方式它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果。
从几个维度来评估一下
一、性能对比
Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上Redis在存储小数据时比 Memcached 性能更高。而在 100k 以上的数据 Memcached 性能要高于 Redis。
二、内存使用效率对比
单纯的 key-value 形式memcache 的利用率更高。
Redis 采用的是包装的 malloc/free,(tcmalloc,jmalloc)相较于 Memcached 的内存管理方法来说,要简单很多。如果 Redis 采用 hash 结构来做 key-value 存储, 由于其组合式的压缩, 其内存利用率会高于 Memcached
三、数据类型和数据操作
Redis 支持string、list、hash、set、zset 5种数据结构,memcache仅支持string类型。
Redis支持丰富的数据操作,Memcache需要将数据拿到客户端来进行修改再 set 回去
四、安全(容灾备灾)
Redis可以通过不同的配置实现数据的持久化,主要是RGB和AOF两种模式,一旦出现机房断电或者被迫重启数据是可以通过日志恢复的,memcache是完全基于内存一旦重启或者断电数据无法恢复。
RGB:是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。
配置规则(redis.conf 文件,找到 SNAPSHOTTING 对应内容)
save <seconds> <changes>
# save ""
save 900 1
save 300 10
save 60 10000
900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘
AOF: 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
配置规则(redis.conf 文件,找到 APPEND ONLY MODE 对应内容)
1、redis 默认关闭,开启需要手动把no改为yes
appendonly yes
2、设置更新日志条件
#appendfsync always 同步持久化
appendfsync everysec 每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)
# appendfsync no 不同步
3、设置重写触发机制
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 3gb/64mb(单位写在数字后面即可)
配置说明:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。一般都设置为3G,64M太小了。