1. 资料
英文官网: https://redis.io/
中文翻译: http://www.redis.cn
书籍:《Redis 实战》Redis实战 — Redis 实战
2. Redis 简介
2.1. 它是什么?为什么使用 Redis?
解决什么问题?方案!对比?
- 对于一个系统而言,海量的高并发读是一个很常见的性能问题,缓存是其中的一项解决方法,本质上是空间换取时间。
- 缓存, NoSQL「not only sql」,非关系型的数据库。具有数据量大,运行速度快,已被广泛使用。其中 Redis 和 MongoDB 最为广泛。
- 使用 Redis 可以很方便的扩展成为一个能够包含数百 GB 数据、每秒处理上百万次请求的系统。
- 对于传统使用关系型数据库,比如 MySQL、Oracle 数据库,有些场景它不是很适用,比如商城的秒杀、库存的扣减、首页的访问高峰等等,对于这种高并发很容易将数据库打崩,此时就需要一层缓存中间件。目前常用的 缓存的中间件有 Redis 和 Memcache,但是我只用过 Redis。数据量大,速度。运行速度很快,将其常用数据从数据库一次性查询出来存放在 Redis 中,那么之后大部分的查询只需要基于 Redis 完成便可以了,这样将很大程度上提升网站的性能。
2.2. 它的特点以及附加特性
2.2.1. 特点
- 以内存作为存储介质 (内存数据断电会丢失数据)
- 存储的数据为持久化,断电或重启后,数据也不会丢失。
- 因为 Redis 的存储分为内存存储、磁盘存储和log文件三部分。
- 支持主从模式,所以可以配置集群。更利于支撑起大型的项目。
- 提供了简单的事务机制,通过事务机制可以有效的保证在高并发的场景下数据的一致性。
- 开始增加 Lua 语言的支持,并且 Lua 语言的执行是原子性的。
2.2.2. 特性
- 持久化方法:第一种持久化方法为时间点转储,第二种持久化方法将所有修改了数据库的命令都写入一个只追加文件里面。
- 故障转移支持。
2.2.3. 性能非常高原因
- 内存存储:Redis 是使用内存(in-memeroy)存储,没有磁盘 IO 上的开销。
- 单线程实现:Redis 使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。
- 非阻塞 IO:Redis 使用多路复用 IO 技术,在 poll,epool,kqueue 选择最优IO实现。
- 优化的数据结构:Redis 有诸多可以直接应用的优化数据结构的实现,应用层可以直接使用原生的数据结构提升性能。
2.3. 使用 Redis 的理由
2.3.1. Redis 使用场景
在某些场景下,可以充分的利用 Redis 的特性,大大提高效率。这些场景包括缓存,会话缓存,时效性,访问频率,计数器,社交列表,记录用户判定信息,交集、并集和差集,热门列表与排行榜,最新动态等。
2.3.2. Redis 热点问题
使用 Redis 做缓存的时候,需要考虑 数据不一致与脏读、缓存更新机制、缓存可用性、缓存服务降级、缓存穿透、缓存预热等缓存使用问题。