0x00 参考书籍
https://book.douban.com/subject/30386804/
0x01 Redis特性
快。
1)数据放在内存中,硬件决定速度。(主要原因)
2)C代码,贴近操作系统。
3)单线程,规避了多线程的竞争问题。
4)代码优雅且高性能。key-value,且值类型丰富(string,hash,list,set,zset)
功能丰富。
1)键过期,可以实现缓存。
2)发布订阅,可以实现消息功能。
3)Lua脚本(不常用)。
4)事务。
5)Pipeline。简单稳定。代码量少,v3.0也就五万行左右,一般人员也能吃透。
客户端语言多。几乎覆盖所有主流语言。
持久化。RDB && AOF。
主从复制。分布式Redis的基础。
高可用和分布式。Redis Sentinel(v2.8)保证节点的故障发现和故障自动转移,Redis Cluster(v3.0)提供了高可用、读写和容量的扩展性。
0x02 Redis的使用场景
- 缓存(string)
- 排行榜(list,zset)
- 计数器(视频播放量等)
- 社交网络(点赞、粉丝、共同好友、推送、下拉刷新等)
- 消息队列系统(list:lpush+brpop)
不适合使用的场景:
- 大数据(成本过高)
- 冷数据(浪费内存)
0x03 为啥单线程还能这么快
- 纯内存访问(主要)
- 非阻塞IO,使用epoll作为IO多路复用技术的实现。
- 单线程避免了线程切换和竞态产生的消耗,锁和线程切换常常是性能杀手。
注意:单线程对于每个命令的执行时间有要求,过慢会导致其他命令的阻塞,所以Redis面向的是快速执行场景的数据库。