Redis的基本知识(偏八股)

前言

本文篇概念,着重介绍Redis的执行效率、功能作用、数据类型、

执行效率

江湖上都流传这Redis的执行效率是挺快的,那为什么说它快呢?有以下几个原因:

  1. 基于内存
  2. 单线程模型
  3. 高效数据结构
  4. 非阻塞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的功能作用如下:

  1. 会话管理: 保存用户登录信息,如JWT、Session这些信息
  2. 存储普通缓存: 对一些数据进行缓存,博客详情页等
  3. 实现分布式锁: Redis天然支持分布式服务(),在微服务架构下可以比较便捷的实现分布式锁
  4. 简单的消息队列: 由于Redis有列表数据类型,所以可以实现简单的发布-订阅模式的消息队列

数据类型

常见的Redis数据类型如下:

  1. String(字符串): 可以存储一些序列化消息、Session、JWT等
  2. List(列表类型): 实现简单的消息队列,存储某项列表数据
  3. Hash(哈希表) : 常见的使用场景就是一些Session值,或者说把<key,val>记录下来,举个例子:购物车的商品信息,用户ID作为key,商品的价格数量等信息作为val
  4. Set(集合): 一个无重复集合,类似于Java中的HashSet
  5. Sorted Set (有序集合): 相比于Set集合多了排序属性score,可以利用他来实现排名功能

如果对数据类型这一块还了解详细一点可以看笔者的其他关于Redis的博客:
Redis基本类型及其使用命令
Redis事务及其锁机制
Redis6的三种新数据类型
Redis应用问题(缓存穿透&缓存击穿&缓存雪崩)
END

相关推荐
未来的旋律~12 分钟前
sqlilabs注入靶场搭建与sql语句
数据库·sql
一个天蝎座 白勺 程序猿28 分钟前
KingbaseES查询逻辑优化深度解析:从子查询到语义优化的全链路实践
开发语言·数据库·kingbasees·金仓数据库
我真的是大笨蛋36 分钟前
InnoDB行级锁解析
java·数据库·sql·mysql·性能优化·数据库开发
山茶花.1 小时前
SQL注入总结
数据库·sql·oracle
派大鑫wink2 小时前
【Day61】Redis 深入:吃透数据结构、持久化(RDB/AOF)与缓存策略
数据结构·redis·缓存
m0_736919102 小时前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
m0_748229992 小时前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
阿蒙Amon2 小时前
C#每日面试题-Thread.Sleep和Task.Delay的区别
java·数据库·c#
沉舟侧畔千帆过_3 小时前
一个DBA的真心话:搞定Oracle+PG双库,我就靠这招
数据库·oracle·dba
醉风塘3 小时前
【终极解决方案】Oracle ORA-01795错误:IN列表1000条限制的全面突破指南
数据库·oracle