说到缓存,不得不提到Memcached和Redis。首先对比下Memcached和Redis的不同。
Memcached场景与局限
只能做cache,不能做storage
没有数据结构支持
数据局部踢出现象
cache与存储资源访问能力落差
不能枚举全数据
访问性能仍有提升空间
Redis特点
key - structure 类型存储
支持数据可靠存储及落地
支持复制(cluster版本在开发)
单进程单线程高性能服务器
crash safe & recovery slow
缺少内存管理算法,依赖第三方库
单机qps可以达到 10W (cpu是瓶颈)
Redis(a disk backed in-memory database),说白了就是高性能网络接口 + 数据结构集合。
Redis 数据类型
string
hash
list
set
sorted set
Redis 持久化机制
1.snapshot
save 参数
2.aof
appendfsync 参数
3.vm
vm is not the way to go for the future
4.diskstore
传统b-tree
Redis 复制
实现机制
快照同步
存在的问题
无增量复制 slave表重建
Redis缺陷与优化
持久化IO机制
复制机制
内存管理
线程模型
故障恢复时间
持久化问题 – buffer io
持久化问题 - fsync
fsync非常耗时
单进程阻塞操作
快照与fsync同时进行
复制缺陷
内存管理
缺少高效内存管理
额外内存占用过多
针对特殊场景做优化
开放地址Hash
Redis 使用场景
需要key - structure复杂数据结构
需要数据可靠存储
需要极高的单机qps
using RAM as the new disk