Redis面试解答指南:了解Redis及其应用

在现代的高并发应用中,Redis作为一个开源的内存数据结构存储系统,已经成为很多企业的核心组件。由于其高效的读写性能和丰富的数据结构,它被广泛应用于缓存、消息队列、实时分析等场景。如果你正在准备Redis的面试,以下是你需要掌握的关键知识点和常见面试问题。​编辑

问题

redis的数据类型有哪几种,你们用了哪几种,是怎么用的

常见的数据类型:String、Hash、List、Set、SortedSet。

1.String 字符串类型

是redis中最基本的数据类型,一个key对应一个value。

String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。​编辑

实战场景:

  1. 缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。
  2. 计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
  3. session:常见方案spring session + redis实现session共享

2.Hash (哈希)

是一个Mapmap,指值本身又是一种键值对结构,如 value={{field1,value1},......fieldN,valueN}}

实战场景:

1.缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。

3.链表

List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。

使用列表的技巧

  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpush+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)

实战场景:

1.timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。

4.Set 集合

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中 1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。

实战场景;

  1. 标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
  2. 点赞,或点踩,收藏等,可以放到set中实现

5.zset 有序集合

有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。

(有序集合中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。

实战场景:

  1. 排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

redis底层数据结构是怎么样的?

String

Hash

List

Set

Zset

redis为什么快?

  1. 基于内存操作
  2. 纯C操作,优化过的数据结构:基于几种基础的数据结构,redis做了大量的优化
  3. 使用单线程,无上下文的切换成本
  4. 基于非阻塞的IO多路复用机制

redis是怎么实现原子性的

答:使用SET key value [EX seconds] [PX milliseconds] [NX|XX]

  • EX seconds
    • 设置键的过期时间为second秒
  • PX milliseconds
    • 设置键的过期时间为milliseconds秒
  • NX
    • 只有在键不存在时,才对键进行设置操作
  • XX
    • 只有在键已经存在时,才对键进行设置操作
  • set操作
    • 成功:OK
    • 失败:nil

这样使用就保证了设置key和设置过期时间仍是原子的

如何使用Redis做异步队列?

  1. 使用List作为队列,RPUSH生产消息,LPOP消费消息
    1. 缺点:没有等待队列里有值就直接消费
    2. 解决,应用层使用sleep重试
  1. BLPOP key timout
    1. 等待队列里有值才消费
    2. 缺点:只能一次消费
  1. Sub/Pub,发布订阅模式
    1. 可以有多个消费者
    2. 缺点:下线后在上线不能收到下线后的消息
    3. 解决:使用专业的消息队列应用

Redis的应用场景

  • 缓存:Redis常用作缓存系统,通过减少数据库的访问频率来提高系统性能。
  • 消息队列:通过Redis的List和Pub/Sub功能,可以实现高效的消息队列。
  • 实时数据分析:利用Redis的有序集合,可以实现实时排名、实时统计等功能。
  • 会话存储:Redis的快速读写和内存存储非常适合存储用户会话数据。

总结

Redis在现代Web开发中扮演着非常重要的角色。掌握Redis的基本命令、配置和优化技巧是面试中非常重要的一部分。无论是在高并发缓存、消息队列,还是在分布式系统中,Redis的高效性能和灵活性都能够帮助解决各种问题。如果你正在面试中遇到关于Redis的问题,确保你能清晰地解释它的基本概念和实际应用场景,并且能够通过实践经验来支持你的回答。

相关推荐
掘金安东尼3 小时前
CSS 颜色混乱实验
前端·javascript·github
王嘉俊9253 小时前
SpringBoot应用开发指南:从入门到高级配置与自动装配原理
java·spring boot·后端·spring·ssm
武子康3 小时前
大数据-96 SparkSQL 语句详解:从 DataFrame 到 SQL 查询与 Hive 集成全解析
大数据·后端·spark
像风一样自由20204 小时前
Go语言详细指南:特点、应用场景与开发工具
开发语言·后端·golang
月阳羊4 小时前
【硬件-笔试面试题-93】硬件/电子工程师,笔试面试题(知识点:波特图)
java·经验分享·单片机·嵌入式硬件·面试
掘金安东尼4 小时前
为什么浏览器要限制 JavaScript 定时器?
前端·javascript·github
wheeldown5 小时前
【Linux】面试常考!Linux 进程核心考点:写时拷贝优化原理 + 进程等待实战,一篇理清进程一生
linux·运维·服务器·面试·php
IT_陈寒5 小时前
《Java 21新特性实战:5个必学的性能优化技巧让你的应用快30%》
前端·人工智能·后端
choice of5 小时前
SpringMVC通过注解实现全局异常处理
java·后端·spring