文章目录
- Redis基础概念
- Redis特性
- Redis的应用场景
Redis基础概念
Redis 是一种基于键值对(key-value)的NoSQL数据库,其 key 都为 string 类型,但 value 则可以为 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等多种数据结构,可以满足多种应用场景
其次,Redis会将所有数据存放在内存中,所以其读写性能非常惊人,但同时也支持将内存的数据利用快照和日志的形式保存到硬盘上,这样即使发生断电或者机器故障的时候,内存的数据也不会“丢失”
Redis还提供过期键、发布订阅、事务、流水线、Lua脚本等附加功能
这里插一句,Redis 的作者起初是像实现一个消息队列的,结果后来被人们更多用于缓存
Redis特性
一般的 Redis 都是客户端/服务器模式
,需要进行网络通信
以下介绍 Redis 的8个重要特性
1. 速度快
- 因为 Redis 的所有数据都存放在内存中,所以读写性能很高
- Redis 使用 C语言实现,“距离”操作系统更近,执行速度相对会快
- Redis 使用了单线程,预防了多线程可能产生的竞争问题。虽然 Redis 在 6.0 版本引入了多线程,但主要是用于处理网络和IO的,执行命令任然采用单线程模式
2. 基于键值对的数据结构服务器
Redis 全称为 Remote Dictionary Server
,类似字典的功能。与其他键值对数据库不同的是,Redis 的 value 是具体的数据结构,如此不仅能运用于多种应用场景,也能提高开发效率。
3. 丰富的功能
- 提供基础概念中提到的数据结构
- 提供键过期功能,可以用于实现缓存
- 提供了发布订阅功能,可以用来实现消息系统
- 支持 Lua 脚本,可以利用 Lua 创建新的 Redis 命令
- 提供简单事务功能,一定程度保证事务特性
- 提供流水线(Pipeline)功能,客户端能一批命令一次性传到 Redis 服务端,减少网络通信的开销
4. 简单稳定
Redis 使用单线程模型,使得其服务端处理模型变得简单,客户端开发也变得简单
并且不需要依赖于操作系统中的类库(例如Memcache需要依赖 libevent),Redis 自身实现了事件处理的相关功能
Redis 具备相当的稳定性,在大量使用中,很少出现因为 Redis 自身BUG而导致宕机的情况
5. 客户端语言多
Redis 提供了简单的 TCP 通信协议,很多编程语言都可以很方便的接入 Redis,并且其生态好,几乎涵盖了主流的编程语言,如:C、C++、Java、PHP、Python、Node JS等
6. 持久化
Redis 也提供持久化策略:RDB(快照)和 AOF(日志)
7. 主从复制
Redis 提供多个相同数据的 Redis 副本,主从复制是分布式 Redis 的基础
8. 高可用和分布式
Redis 也提供高可用实现的 Redis 哨兵(Redis Sentinel),能够保证 Redis 结点的故障发现和故障自动转移。也提供了 Redis 集群(Redis Cluster),是真正的分布式实现,提供了高可用、读写和容量的扩展性
Redis的应用场景
Redis 在以下场景使用效果尤为显著
- 缓存
合理使用缓存不仅可以加速数据的访问速度,而且能够有效降低后端数据源的压力。Redis 提供键值过去时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略
- 排行榜系统
例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis 提供了列表和有序集合的结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统
- 计数器应用
计数器在网站中的作用至关重要,例如视频网站有播放数,电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1操作,如果并发量很大,对于传统关系型数据库的性能是一种挑战。Redis 天然支持计数功能,且性能良好,可以说是计数器系统的不二选择
- 社交网络
赞/踩、粉丝、共同好友 / 喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据库不太适合保存这类数据,Redis 提供的数据结构可以相对比较容易实现这些功能
- 消息队列系统
这是 Redis 最初的设计初衷,Redis 提供了发布订阅功能和阻塞队列,虽然和专业的消息队列相比还不够强大,但已经可以满足常见场景了
以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。