百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

面试突击Redis:Redis都有哪些数据类型?分别适用于哪些场景?

wptr33 2024-12-22 21:13 70 浏览

01 面试题突击题目

Redis都有哪些数据类型?分别适用于哪些场景?

02 面试官心理分析

除非是面试官看你的简历,感觉你就是一个工作3年以内的、比较初级的一个同学,可能对技术没有很深入的研究,面试官才会问这类问题。

其实问这个问题主要就俩原因:

  • 第一,看看你有没有全面的了解redis的功能,一般怎么来用。有没有认真思考过什么场景比较适合用什么数据类型,就怕你只会最简单的kv操作,平时也没思考过怎么设计才更好。
  • 第二,看看你在实际项目里都怎么用Redis,是不是思考过Redis的这些数据类型,是不是爱学习的人。

要是你回答的不好,没说出几种数据类型,也没说什么场景,支支吾吾的你就完了,面试官对你印象肯定不好,觉得你平时就是做个简单的set和get。

03 深入剖析

看一下这道面试题怎么回答。

(1)string

这是Redis中最基本的类型了,也最常用,没啥可说的,就是普通的set和get,做简单的kv缓存。

(2)hash

这个是类似map的一种结构,一般可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段,而不是把整个对象都拿出来,这样节省了IO操作,效率更高。

使用HSET key field value命令存储一个对象,如我们有一个用户,key=user:id:1

1value={
2  "id": 1,
3  "name": "walking",
4  "age": 24
5}

hash类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。

1value={
2  "id": 1,
3  "name": "walking",
4  "age": 18
5}

HGET user:id:1 age获取用户ID为1的age值。

(3)list

有序列表,这个是可以玩儿出很多花样的。

比如在微博里,有个大v的粉丝,就可以以list的格式放在Redis里去缓存。

key=某大v

value=[zhangsan, lisi, wangwu]

比如可以通过list存储一些列表型的数据结构,类似粉丝列表了、文章的评论列表了之类的东西。

还可以通过lrange命令,从某个元素开始读取多少个元素,还可以基于list实现分页查询,这个很棒的一个功能。基于redis实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能很高,一页一页的走。

比如还可以用来搞个简单的消息队列,从list头塞进去,从list尾巴那里弄出来。

(4)set

set无序集合,可以自动去重。

直接基于set将系统里需要去重的数据扔进去,自动就给去重了,如果你需要对一些数据进行快速的全局去重,你当然也可以基于jvm内存里的HashSet进行去重。但是如果你的某个系统部署在多台机器上呢?就得基于Redis进行全局的set去重了。

当然还可以基于set玩儿交集、并集、差集的操作,比如交集吧,可以把两个人的粉丝列表整一个交集,看看俩人的共同好友是谁?对吧。

把两个大v的粉丝都放在两个set中,对两个set做交集,看到共同关注的人。

(5)sorted set

排序的set,去重但是可以排序,写进去的时候给一个分数,自动根据分数排序,这个可以玩儿很多的花样。这个数据类型的最大的特点是有个分数的概念,可以自定义排序规则。

比如说你要是想根据时间对数据排序,那么可以写入进去的时候用某个时间作为分数,人家自动给你按照时间排序了。

另外,这个数据类型很适合最排行榜这类的功能。

排行榜: 将每个用户以及其对应的分数写入进去命令zadd board score username如

1zadd board 85 Jobs
2zadd board 72 Jerry
3zadd board 96 Walking
4zadd board 62 Tom

接着使用命令zrevrange board start stop,就可以获取排名从start到stop的用户。

使用命令zrank board username,可以看到用户在排行榜里的排名。

如:zrevrange board 0 3获取排名前3的用户

196 Walking
285 Jobs
372 Jerry

查看排名zrank board Tom,返回4

04 Redis怎么学?如何复习?

首先,一起来瞄一眼Redis的学习路线图(xmind文件),看看怎么学习比较好

(注意:关于Redis怎么学?如何复习?这一块小编提供了一些学习复习笔记,有需要即可免费分享, 私信 小编 “Redis” 即可!!)

其次,说到复习,一起来看看我自己整理的一份Redis学习笔记

  1. 为什么要用 redis /为什么要用缓存(高性能、高并发)
  2. 为什么要用 redis 而不用 map/guava 做缓存?
  3. redis 常见数据结构以及使用场景分析(String、Hash、List、Set、Sorted Set
  4. redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?
  5. redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复
  6. Redis 常见异常及解决方案(缓存穿透、缓存雪崩、缓存预热、缓存降级
  7. 分布式环境下常见的应用场景(分布式锁、分布式自增 ID
  8. Redis 集群模式(主从模式、哨兵模式、Cluster 集群模式
  9. 如何解决 Redis 的并发竞争 Key 问题?
  10. 如何保证缓存与数据库双写时的数据一致性?
  11. ... ..

最后,再来看一份Redis常备的面试题...

  1. 什么是 Redis?简述它的优缺点?
  2. Redis 与 memcached 相比有哪些优势?
  3. Redis 支持哪几种数据类型?
  4. Redis 主要消耗什么物理资源?
  5. Redis 有哪几种数据淘汰策略?
  6. 为什么 Redis 需要把所有数据放到内存中?
  7. Redis 集群方案应该怎么做?都有哪些方案?
  8. Redis 集群方案什么情况下会导致整个集群不可用?
  9. MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?
  10. Redis 有哪些适合的场景?
  11. Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
  12. Redis 和 Redisson 有什么关系?
  13. Jedis 与 Redisson 对比有什么优缺点?
  14. Redis 集群的主从复制模型是怎样的?
  15. Redis 集群会有写操作丢失吗?为什么?
  16. 怎么理解 Redis 事务?
  17. Redis 如何做内存优化?
  18. Redis 回收进程如何工作的?
  19. watch dog 自动延期机制
  20. 锁互斥机制
  21. 释放锁机制|
  22. ... ....

关于上面说的这些Redis学习笔记和复习大纲以及面试常备题目(附详细解析),皆可免费赠送给阅读此篇文章的你,转发+私信我 “Redis” 即可找小编免费分享下载!!

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...