声明:Redis的相关知识是面试的一大热门知识点,同时也是一个庞大的体系,所涉及的知识点非常多,如果用一篇文章罗列,往往会陷入知识海洋中无法感知其全貌,因此,这段时间我会试着拆分Redis的相关章节,辅以思维导图的形式介绍Redis的相关知识点,知识点范围包括如下几部分

  • Redis基本概念和特点
  • Redis数据结构和底层数据类型
  • Redis持久化(AOF和RDB)
  • Redis集群和高可用性
  • Redis缓存
  • Redis分布式锁
  • Redis实现异步队列
  • Redis运维问题

今天主要介绍的是Redis基本概念和特点。

1. Redis基本概念

最本质的,Redis是一个数据库,作为一个数据库,它和其他数据库自然不会完全相同,如下是它的一些本质特性:

  • C语言开发:这也是它高性能的一个重要原因;
  • 基于key-value键值对存储:键、值都有丰富的数据类型支持
  • 数据存于内存中:这是访问速度快的一个原因;
  • 非关系型数据库:NoSQL,之前所了解的MySQL是关系型数据库的代表。
  • 高性能:C语言开发+数据存于内存
  • 开源

2. Redis特点

2.1 优点

Redis技术之所以被广泛使用,是因为它具有很多优点,如下所示:

  • 访问速度快

    • 访问速度快主要有四个原因:C语言开发+数据存于内存+单线程+非阻塞I/O多路复用;
    • 这也是它被web应用广泛使用、在大厂技术中作为基础的原因之一。
  • 支持丰富的数据类型

    Redis基于键值对完成数据存储,那么对于键key、值value都有相对应的数据类型支持,如下所示:

    • key:只能是字符串类型
    • value:可支持丰富的数据类型,如下所示:
      • 五大基础数据类型

        • 字符串(String):最基础的数据类型,可以是字符串、整数、浮点数、二进制数据。

          • 很常用的数据结构,存储一般数据都会使用。
        • 列表(List):存储有序元素
          • 可在实现消息队列中可使用。
        • 哈希表(Hash):存储键值对集合,也就是整体Redis存储可实现键值对嵌套,从而提高数据存储的灵活性。
          • 可存储用户信息等。
        • 集合(Set):无序、不可重复的元素。
          • 例如标签tag、共同关注等数据信息,就可以使用集合来存储。
        • 有序集合(Sorted Set):可给每个元素设置权重,作为排序依据,同样不可出现重复元素,但是可以有顺序。
          • 在实现排行榜功能中可使用。
      • 高级数据类型(了解即可)
        • 位图(Bitmap)
        • HyperLogLog
        • 布隆过滤器
        • GeoHash
        • Pub/Sub
        • Stream
  • 单线程

    • Redis是单线程的,这是它访问速度快的一个重要原因,因为单线程不需要考虑线程安全问题,也不需要考虑上下文切换的问题,因此,它的访问速度自然会快很多。
    • Redis单线程的一个重要原因:Redis的瓶颈不在于CPU,而是内存和网络带宽,因此,单线程的Redis可以充分利用CPU的性能,从而提高访问速度。
    • Redis4.0的时候,尝试在主线程外开辟后台线程,处理一些较为耗时的操作,如清理脏数据、断开无用链接、删除过期key等,但是这些操作都是在后台线程中完成,不会影响主线程的访问速度。
    • Redis6.0在某种程度上实现了多线程,使用多线程并行处理读写操作和协议分析,对于命令执行部分依然使用单线程保证访问速度。
      • 这种多线程的方式提高了IO效率,解决了Redis性能限制的瓶颈之一。
  • 非阻塞I/O多路复用

    • I/O多路复用指的是:在一个线程中,可以同时监听多个文件描述符,一旦某个文件描述符就绪(可读或可写),就能够通知程序进行相应的读写操作。这样就不会出现“为了等待任意文件的I/O响应而阻塞主线程”。
    • 也许这时候你会问“不对啊,Redis不是单线程的吗?”,是啊,这里所说的多路复用,指的正是上文中Redis6.0使用多线程处理读写操作的技术部分。
    • I/O多路复用的实现方式主要有:selectpollepoll.具体可参考此篇博客:【后端面经-Java】I/O多路复用 简录
  • 支持持久化、分布式系统、事务、主从复制(集群)

    • 这些在后续的学习中都会具体详细解释

2.2 缺点

任何一个技术都不会是完美的,有优点就必然也存在缺点。——鲁迅(:“我没说过”)

Redis的缺点如下所示

  • 瓶颈问题:内存和网络带宽

    • 在分析Redis单线程原因的时候,我们已经提到过Redis的瓶颈问题,主要就是物理内存的容量大小和IO操作的带宽限制。
    • 举个例子:一个数据库就像一个自由职业者,它的赚钱速度(效率)取决于接单速度和完工速度,而Redis就像一个完工速度非常快的自由职业者(访问速度快),且面对着海量的请求,因此,它的技术瓶颈就在于接单速度(IO操作带宽)。不仅如此,它完工速度快是因为把所有东西都堆在房间(内存)里面,因此,它也同样受限于物理房间的大小(物理内存容量)。
  • 不具备自动容错/恢复的能力
    • 主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
  • 在线扩容难度高
    • 集群容量在后续维护中很难扩容,因此一开始就需要根据使用规模预备合适的容量空间。

3. Redis的应用场景

Redis是Web应用的常用中间件,它的应用场景非常广泛,如下所示:

  • 缓存

    • Redis作为客户端和服务器数据库之间的缓存数据,可以有效减少数据库的访问压力,提高访问速度。
    • 结构图如下所示:

  • 分布式锁
    • Redis可实现分布式锁,解决分布式系统中的并发问题。
  • 简单消息队列
    • Redis提供发布订阅功能和阻塞队列功能,可以满足一般消息队列功能。
  • 网络流量管理
    • 计数器

      • 天然支持,可记录浏览量、点赞了
    • 排行榜
      • Redis中的列表、有序集合可以用于构建排行榜
    • 社交网络
      • 各类数据之间的关联,赞踩比例、共同好友、共同爱好等等可以使用Redis实现。

面试模拟

Q:Redis、内存、磁盘的区别,为什么快为什么慢?

A:Redis是内存数据库,内存是计算机中最快的存储介质,磁盘是最慢的存储介质。Redis快速是因为它将数据存于内存之后,而内存访问可以直接传输到CPU中,磁盘访问则需要通过IO操作先将数据写入内存空间之后然后再传入CPU中。

Q:Redis的数据库类型、存储结构如何?如何实现排行榜功能

A:Redis属于NoSQL数据库,它的存储结构是键值对,其中键的数据类型只支持字符串,而值可以支持丰富的数据类型,包括列表、有序集合、集合、哈希表、字符串等等,通过列表、有序集合等数据结构实现排行榜功能。

Q:Redis是单线程还是单进程?哪些模块是单线程?

A:Redis执行指令的相关模块是单线程,6.0之后,关于网络IO的处理则转为多线程,使用非阻塞IO多路复用提高IO效率

参考资料

  1. Redis教程 - Redis知识体系详解
  2. 三万字+八十图,详解Redis五十二问!太全面了!
  3. 妈妈再也不担心我面试被Redis问得脸都绿了

【后端面经-数据库】Redis详解——Redis基本概念和特点的更多相关文章

  1. Spring Data操作Redis详解

    Spring Data操作Redis详解 Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis ...

  2. Redis学习——详解Redis配置文件(三)

    一.Redis脚本简介 在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server .redis-cli .redis-benchmark ...

  3. .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html

    .Net使用Redis详解之ServiceStack.Redis(七)   序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现 ...

  4. Redis详解入门篇

    Redis详解入门篇 [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介 ...

  5. .Net使用Redis详解之ServiceStack.Redis(7)

    Net使用Redis详解之ServiceStack.Redis(七) 序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中 ...

  6. Redis详解入门篇(转载)

    Redis详解入门篇(转载) [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 ...

  7. Redis详解(二)——AOF

    Redis详解(二)--AOF 前言 RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失).对于数据完整性要求很严格的需求 ...

  8. Redis详解(一)——RDB

    Redis详解(一)--RDB 前言 由于 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比, ...

  9. Redis详解(四)——删除策略

    Redis详解(四)--删除策略 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令来获取其状态,当 key 不存在时,返回 -2 . 当 k ...

  10. Redis详解(八)——企业级解决方案

    Redis详解(八)--企业级解决方案 缓存预热 缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统.避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓 ...

随机推荐

  1. 文心一言 VS chatgpt (13)-- 算法导论3.1 8题 3.2 1题

    八.可以扩展我们的记号到有两个参数n和m的情形,其中的n和m可以按不同速率独立地趋于无穷.对于给定的函数g(n, m),用O(g(n, m))来表示以下函数集: O(g(n, m)) = 对Ω(g(n ...

  2. 2023-03-23:音视频解混合(demuxer)为PCM和YUV420P,用go语言编写。

    2023-03-23:音视频解混合(demuxer)为PCM和YUV420P,用go语言编写. 答案2023-03-23: 大体步骤如下: 1.打开媒体文件,并获取音频和视频流. 2.对于每个流,找到 ...

  3. 2020-11-02:go中,s:=make([]string,10);s=append(s,“test“);fmt.Println(s[0]),打印什么?

    福哥答案2020-11-02: 打印空字符串.s:=make([]string,10),s中已经有10个元素,append元素,s就有11个元素了.前10个元素没初始化,就是10个空字符串,最后1个字 ...

  4. 【工作随手记】deaklock排查

    生产环境当中还没真正遇到过死锁的问题.有些疑似死锁的问题,后来经过排查也只是其它问题导致的.所以通过jstack到底怎样排查死锁问题有点疏忽了.这里作个记录. 模拟一个死锁 顺便复习一下. 死锁的产生 ...

  5. [SWPUCTF 2021 新生赛]no_wakeup

    [SWPUCTF 2021 新生赛]no_wakeup 考点 反序列化 一.题目 打开题目发现如下代码 <?php header("Content-type:text/html;cha ...

  6. JS 数组常用操作全集

    文章目录 1.push()方法 2.unshift()方法 3.pop() 方法 4.shift() 方法 5.filter() 方法 6.join()方法 7. indexOf() 方法 8.rev ...

  7. 驱动开发:PE导出函数与RVA转换

    在笔者上篇文章<驱动开发:内核扫描SSDT挂钩状态>中简单介绍了如何扫描被挂钩的SSDT函数,并简单介绍了如何解析导出表,本章将继续延申PE导出表的解析,实现一系列灵活的解析如通过传入函数 ...

  8. C#使用企业微信群机器人推送生产数据

    在日常的工作生产中,经常会有将将生产数据或者一些信息主动推送给相关的管理人员,我们公司在开发WMS系统时,为了仓库的储存安全,需要在危废品库存达到一定的储量时,自动通知仓管员去处理危废品,所以就需要程 ...

  9. 学习jQuery核心内容这一篇就够了

    jQuery 1. 介绍 jQuery是JavaScript的工具库,对原生JavaScript中的DOM操作.事件处理.数据处理等进行封装,提供更便捷的方法. 让我们用更少的代码完成我们的js操作 ...

  10. 【原创】Ftrace使用及实现机制

    Ftrace使用及实现机制 版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100 如有错误,欢迎指正. 目录 Ftrace使用及实现机制 ...