redis特性及应用场景
文章目录
- 什么是redis?
- 热库
- redis作为热库的特性
- redis适用场景
什么是redis?
redis在系统架构中的位置就是冷热分离架构的热数据库位置, redis就是热库, 我们一般说缓存数据库。 其他的像MySQL、SQL Server这种关系数据库、MongoDB、TiBD这种分布式数据库都处于冷热分离架构的冷库的位置。 那什么是热库?
热库
热库,就是存放热点数据的数据库。 有一个原则叫做二八原则, 即百分之二十的数据能够应对百分之八十的请求。 热库里面存放的就是这百分之二十左右的热点数据, 来对外支撑百分之八十左右的请求。 当然这里的百分之而是和八十只是一个概念数字, 真正存多少,应对多少还要看具体的业务需求。
热库就是缓存级数据库,就是说热库的数据都是保存在内存中的。 当前redis作为热库有持久化方案,但是我们说热库的建立思想就是一个缓存级数据, 所有的数据都保存在内存中。 这样, 因为热库存放的数据很少, 不用担心内存不够用, 又能利用内存远远大于硬盘的访问速度(内存相对硬盘查了三个到四个数量级)对外提供非常快的查询速度。
热库的另一个好处就是分担冷库的读流量, 因为热库能够用少量的热数据分走大量的请求, 减轻了冷库的读并发负担。这样能够让冷库少一些从库, 减少系统硬件成本和系统复杂度。
redis作为热库的特性
-
内存存储数据: 缓存级数据库。
-
支持各种数据类型: redis标准内置了许多数据类型, 比如string, hash, set, list等。
-
扩展性: redis支持扩展。linux中即.so第三方库。
-
持久化:redis可以作为写库, 支持持久化。支持策略为Append-Only File 和 SnapShotting。简写为AOF和RDB。 这两个策略就是: RDB, 每当数据到来, redis进行快照将数据保存到磁盘进行数据备份。 AOF,数据备份方式为日志追加的方式(直接在日志末尾追加一条数据, 当读取时从后向前读取第一次读到的key),并且redis崩溃时会根据日志信息进行数据重建, 同时日志如果过大, 会进行压缩/重写。
-
集群化:redis支持主从复制, 也就是允许添加冗余。 因为在分布式场景中, 读写并发量非常大, 只一台机器的内存是有限的, 如果一个redis的压力太大了, 就引入多台redis。 就能让redis在分布式系统中, 能够大展拳脚。 同时,又因为允许添加冗余, 这也同时提高了可用性。
-
高可用:redis支持集群化,高冗余, 具有高可用性。
-
支持lua脚本, 内置lua脚本进行复杂的操作。
-
快 :
- redis在内存中, 访问的速度远远大于关联式数据库在硬盘读取数据。
- redis的核心操作都是非常简单的,比如set, get, expire, 以及操作内存数据结构的lpush等等, 而关联式数据库的核心存储都要进行各种约束检查, 都是非常慢的。
- redis在网络IO中, 使用了IO多路复用。
- redis除了网络IO, 其他的业务逻辑都使用单线程, 没有线程之间的竞争开销。 又因为redis的核心操作简单, 操作的执行时间很短, 引入多线程的优势不明显。
redis适用场景
- redis适用于对数据读取速率要求高的业务, 比如搜索引擎, 要搜索的快,准。
- redis作为辅助的缓存手段, 比如我们平时浏览浏览器, 浏览器上面存储了我们的cookie, 这个cookie, 我们平时用的很多, 但是丢失了影响也不大,只需要重新登录一下, 或者redis从数据库中再重新加载出来就可以。
- redis作为消息队列。