当前位置: 首页 > news >正文

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
http://www.lryc.cn/news/135937.html

相关文章:

  • react使用antd的table组件,实现点击弹窗显示对应列的内容
  • c++代码代码逻辑走查
  • CSS scoped 属性的原理
  • git 查看某个分支是从哪个分支拉出来的
  • vue helloworld.vue 点击按钮弹出 dialog,并给dialog传值
  • html动态爱心代码【三】(附源码)
  • mmseg——报错解决:RuntimeError: CUDA error: an illegal memory access was encountered
  • AWS复制EC2文件到S3,g4dn.2xlarge没有NVIDIA GPU 驱动问题
  • Go语言GIN框架安装与入门
  • 低代码系列——初步认识低代码
  • 从陌生到熟练使用string类
  • ERP规划
  • 统计学作业啊啊啊啊
  • CAM实现的流程--基于Pytorch实现
  • FL Studio2023最新版本21.1中文水果音乐编曲工具
  • 数据库概述SQL基本语法
  • 【面试】一文讲清组合逻辑中的竞争与冒险
  • 无涯教程-PHP - 性能优化
  • 如何在PHP中使用字符串
  • Mybatis简单入门
  • 【Linux】数据链路层:以太网协议
  • docker搭建私有镜像harbor
  • 汽车便携轮胎充气泵方案
  • 一、Kafka概述
  • 【数据结构OJ题】合并两个有序链表
  • C++ LibCurl 库的使用方法
  • 自然语言处理从入门到应用——LangChain:索引(Indexes)-[向量存储器(Vectorstores)]
  • 【C++练习】普通方法+利用this 设置一个矩形类(Rectangle), 包含私有成员长(length)、 宽(width), 定义一下成员函数
  • 电子电路学习笔记之SA1117BH-1.2TR——LDO低压差线性稳压器
  • 【LeetCode-面试经典150题-day7】