前言
本文篇概念,着重介绍Redis的执行效率、功能作用、数据类型、
执行效率
江湖上都流传这Redis的执行效率是挺快的,那为什么说它快呢?有以下几个原因:
- 基于内存
- 单线程模型
- 高效数据结构
- 非阻塞I/O
基于内存:
内存的读写效率是远远比磁盘读写快的,一般是前者纳秒级别,后者是毫秒级别,所以效率可想而知,而我们的Redis是把数据在内存是进行读写的,相比于MySQL这些磁盘读写(虽然有内存缓存机制)的在访问速度上就快人一步了
单线程模型
可能有人会疑惑,为什么Redis中使用单线程就比多线程的执行效率更高呢???其实很大原因在于Redis是非关系型数据库,底层就跟Hash表一样,对key的查询可以做到O(1)的时间复杂度,这个执行效率单线程完全够用了,如果还多加一个多线程就得考虑线程切换或者线程争夺任务的资源带来的消耗,执行起来的效率和成本可能还不如单线程。
高效数据结构
在Redis中使用了高效的数据结构进行处理数据:Hash表、有序集合等,并且这些数据结构还是经过了优化处理的,例如在有序集合底层数据结构中,数据小是压缩列表,数据大之后会升级为跳跃表(跳表,时间复杂度O(logn),力扣上有道困难题是实现跳表,可以尝试一下)
非阻塞I/O
在Redis中使用了非阻塞I/O模型,非阻塞I/O就是异步I/O操作方式,在对数据进行读写的时候可以执行其他任务,而不是等待I/O任务操作完成。这就意味着,Redis在处理I/O的时候,可以不用等待磁盘读写或者网络通信过程中的数据返回,执行其他任务,充分利用CPU,提高吞吐量
总结:我个人感觉可以用:访问快、处理快、获取快、吞吐高来概括
功能作用
Redis的功能作用如下:
- 会话管理: 保存用户登录信息,如JWT、Session这些信息
- 存储普通缓存: 对一些数据进行缓存,博客详情页等
- 实现分布式锁: Redis天然支持分布式服务(),在微服务架构下可以比较便捷的实现分布式锁
- 简单的消息队列: 由于Redis有列表数据类型,所以可以实现简单的发布-订阅模式的消息队列
数据类型
常见的Redis数据类型如下:
- String(字符串): 可以存储一些序列化消息、Session、JWT等
- List(列表类型): 实现简单的消息队列,存储某项列表数据
- Hash(哈希表) : 常见的使用场景就是一些Session值,或者说把<key,val>记录下来,举个例子:购物车的商品信息,用户ID作为key,商品的价格数量等信息作为val
- Set(集合): 一个无重复集合,类似于Java中的HashSet
- Sorted Set (有序集合): 相比于Set集合多了排序属性score,可以利用他来实现排名功能
如果对数据类型这一块还了解详细一点可以看笔者的其他关于Redis的博客:
Redis基本类型及其使用命令
Redis事务及其锁机制
Redis6的三种新数据类型
Redis应用问题(缓存穿透&缓存击穿&缓存雪崩)
END