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

相关推荐
Flynt7 小时前
我把微信运动的排行榜和定点推送复刻了一遍:100万次步数更新只要4秒,坑在别处
redis·后端·性能优化
程序员清风7 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律7 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵7 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅8 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_9 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界10 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB11 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛11 小时前
MySQL的操作
数据库·mysql
猫咪很可爱11 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle