Redis 特性和应用场景
1. Redis特性
1)In-memory data structures
Redis 在内存中存储数据,key 是 String, value 可以是 hash, list, set, sorted set, stream ...
MySQL主要是通过 “表” 的方式来存储组织数据的 “关系型数据库”
Redis主要是通过 “键值对” 的方式来存储组织数据的 “非关系数据库”
2)Programmability
针对 Redis 的操作,可以直接通过简单的交互式命令进行操作
也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)
3)Extensibility
可以在 Redis 原有的功能基础上再进行扩展,Redis 也提供了一组 API
4)Persistence
持久化 —— Redis 把数据存储在内存上
内存中存储的数据是易失的,进程退出/程序重启 都会丢失
可以把 Redis 中的数据存储在硬盘上,相当于备份。当程序重启时,会加载硬盘中的数据,是 Redis 的内存恢复到重启前的状态
5)Clustering
Redis 作为一个分布式系统中的插件,能支持集群(类似于水平扩展,“分库分表”)
一个 Redis 能存储的数据是有限的(内存空间有限)
引入多台主机,部署多个 Redis 节点,每个 Redis 存储数据的一部分
6)High availability
高可用 —— 备份/冗余
Redis 自身支持 “主从” 结构,从节点相当于是主节点的备份
2. Redis 应用场景
1)缓存
2)排行榜
Redis 提供了列表和有序集合的结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统
3)计数器
4)社交网络
5)消息队列
3. Redis 运行快的原因探讨
1)Redis 数据存储在内存中,比访问硬盘的数据库要快很多
2)Redis 核心功能都是比简单的逻辑(比较简单的操作内存的数据结构)
3)从网络的角度上,Redis 使用 IO 多路复用的方式(epoll),使用一个线程管理多个 socket
4)Redis 使用的是单线程模型(高版本引入多线程),单线程减少了不必要的线程之间的竞争开销(Redis 的核心业务,主要是操作内存的数据结构,不会很消耗CPU)
多线程提高效率的前提是,CPU密集型任务
使用多个线程可以充分利用CPU多核资源