redis简介
Redis是一个开源的Key-Value存储,但又不仅仅是Key-Value存储,用官网上的话来说,Redis是一个数据结构存储,可用作数据库、缓存和消息中间件。相对于传统的Key-Value存储Memcached来说,Redis具有如下特点:
- 速度快
- 丰富的数据结构,除String之外,还有List、Hash、Set、Sorted Set
- 单线程,避免了线程切换和锁的性能消耗
- 原子操作
- 可持久化(RDB与AOF)
- 发布/订阅
- 支持Lua脚本
- 分布式锁
- 事务
- 主从复制与高可用(Redis Sentinel)
- 集群(3.0版本以上)
常见应用问题
- 缓存穿透处理:什么是缓存穿透?当根据Redis key在缓存中查询后,不存在对应Value,就应该会在后端系统如DB中去查找,该Key的并发请求量一旦变大,那么就会对DB造成很大的压力。解决办法有:a.前端风险控制,将恶意穿透情况排除在外;b.对查询结果为空的情况依然进行缓存,但缓存时间会设置得很短,一般是几分钟。
- 缓存雪崩处理:什么是缓存雪崩?当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。解决办法有:后端连接数限制,错误阈值限制,超时处理,缓存失效时间均匀分布,前端永不失效及后端主动更新。
- 缓存时长:策略定位复杂,需要多维度的计算。
- 缓存失效:按时失效,事件失效,后端主动更新。
- 缓存Key:Hash、规则、前缀+Hash,异常情况可人工干预。
- Lua脚本:服务端批量处理及事务能力,有条件逻辑的可扩展脚本。使用它的好处有:减少网络开销、原子操作、可复用。
- Limit:可滑动时间窗口,如应用于Session,Memcached需每次传Key和Value。
参考资料
- http://www.infoq.com/cn/articles/architecture-practice-01-redis
- nginx,memcached,redis网络模型总结
- Redis 和 I/O 多路复用