【Reids系列】Redis高频面试题,不点赞不给看!

本文深入探讨Redis的五大数据类型:String、Hash、List、Set和Zset,解析其特性和常用命令。此外,文章还将涵盖Redis的持久化、缓存策略和集群模式,帮助读者理解如何在面试中应对相关问题,为数据库缓存和高可用性打下坚实基础。
摘要由CSDN通过智能技术生成

Redis作为常用的分布式缓存技术,在面试中高频出现,空空打算推送一个专题【Redis系列】,将详细剖析面试中常出现的考点内容,力求优质干货和通俗易懂,读完后,让你将彻底搞懂Redis中至少以下几个高频考点。

  • Redis数据类型
  • Redis持久化机制
  • 缓存击穿、缓存穿透和缓存雪崩等问题
  • Redis缓存淘汰机制
  • Redis集群的主从复制
  • Redis集群模式及工作原理

小伙伴们都知道在我们查询数据时,数据库会通过索引方式把所需要的数据读取出来。但当我们频繁访问某些热点数据时,如果数据库在每次访问时还是以同样的方式进行搜索读取,势必会给数据库带来很大压力。

于是缓存技术应运而生,它是将需要频繁访问的热点数据存放在内存中,不仅有效地降低了数据库的负载,还加快了用户访问速度。

原理如下图所示,在用户有写请求时,首先将数据存放到数据库,然后再写入缓存中。

在这里插入图片描述

当用户再次访问该数据时会首先尝试从缓存中获取,如果在缓存中没有找到所访问的数据,则从数据库中搜索并将结果返回给用户,同时再将查询结果放入缓存中,方便下次访问。

我们所说的分布式缓存是被部署在多个服务器节点上的,并且缓存之间有数据备份,在某个节点出现宕机等问题时,分布式缓存会将用户的读写请求装发到其他的备份节点上,以保障业务的正常运行。

以上是对分布式缓存的简单介绍,当然实际情况要更复杂一些,比如分布式缓存之间是如何备份的?内存中的数据是如何保证不丢失的?缓存数据过多时是如何进行清理的等等。

这些都是面试官们最喜欢问的,回答这些问题,就需要弄懂缓存的持久化机制、淘汰策略等原理以及缓存穿透和缓存雪崩等问题,这些都没不懂也不要慌,接下来都会详细地介绍给大家。

开场了这么久,终于轮到主角Redis出场了。

“Redis都有哪些数据类型?”往往是面试官盘问你Redis的开场白,相信大部分小伙伴们都能随口回答上来,如果没回答上来,那么然后,应该也就没然后了叭。

先用一句话介绍下:Redis是一个开源的内存中的数据结构存储系统,可用作缓存、数据库和消息中间件,支持多种数据类型,可将内存中的数据持久化到磁盘,还可通过哨兵模式和集群模式实现高可用。

Redis存储的是k-v格式的数据,其中key都是字符串,value有如下5种不同的数据类型,话不多说,上图。
在这里插入图片描述

为了让回答不那么单调,能再和面试官多唠上几句,还可以对每个类型再继续补充说明下。
以下内容选看,嫌啰嗦的直接跳过,看后面的总结。

  • String | 字符串类型
    可以存储字符串、整数或者浮点数(嗯是的,后两个你没看错),如果存储的是整数或者浮点数,还可以执行自增或者自减操作。String类型的值最大能存储512M。以下是String操作常用的命令。

    get:获取指定key的值;
    set:设置指定key的值;
    Incrby:将key所存储的值加上给定的增量值;
    Decrby:将key所存储的值减去给定的增量值;

  • Hash | 哈希
    和String类似,只不过它的value存储的是一个或多个键值对的集合。常见的命令如下:

    Hset:将散列表key中的field字段的值设为value。
    Hget:获取存储在散列表中指定的字段值
    Hdel:删除一个或者多个散列表字段

  • List | 列表
    有序地存储多个字符串,可以从列表的头部或者尾部来增删元素。常用的命令有:

    Lpush:将一个或多个值插入列表头部;
    Rpush:将一个或多个值插入列表尾部 ;
    Lrange:获取列表指定范围的元素;
    Lpop:移除并获取列表的第一个元素;
    Rpop:移除并获取列表的最后一个元素

  • Set | 集合
    以无序的方式存储多个不同元素的集合,是通过散列表实现的,所以增删查的复杂度都是O(1)。常见命令:

    Sadd:向集合中添加一个或者多个元素;
    Smembers:返回集合中所有元素 ;
    Srem:移除集合中的一个或多个元素

  • Zset | 有序集合
    Zset和set一样也是String类型元素的集合,并且不允许有重复的元素,不同的是,每个元素都会关联一个double类型的分数。而Redis正是通过分数来为集合中的成员进行从小到大排序的。常用命令:

    Zadd:向有序集合添加一个或多个成员,或者更新已存在成员的值;
    Zrange:通过索引区间返回有序集合指定区间的成员;
    Zrem:移除有序集合中的一个或多个元素

下图是对以上5种类型做下总结。

在这里插入图片描述

回答完这个几种类型后,如果想给自己加分的,还可以再多唠一下Redis的几种特殊的数据类型,比如用于存放地理位置、距离和范围的Geospatial类型,通过操作二进制位记录数据的Bitmap类型,用于估计一个Set中元素数量的HyperLogLog类型。

对Redis有了初步的认识,弄明白了Redis的数据类型,这篇也才只是个开始,文章开头的那几个问题是不是依旧很懵,不慌!

这篇先到写到这里,关于Redis还有其他不明白的问题小伙伴们可以留言,后续我会继续追加整理出来。

文章中如有不严谨的地方,还望小伙伴们指正出来,你们的批评就是我的进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值