面试突击Redis:Redis都有哪些数据类型?分别适用于哪些场景?
wptr33 2024-12-22 21:13 35 浏览
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学习笔记
- 为什么要用 redis /为什么要用缓存(高性能、高并发)
- 为什么要用 redis 而不用 map/guava 做缓存?
- redis 常见数据结构以及使用场景分析(String、Hash、List、Set、Sorted Set)
- redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)
- redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)
- Redis 常见异常及解决方案(缓存穿透、缓存雪崩、缓存预热、缓存降级)
- 分布式环境下常见的应用场景(分布式锁、分布式自增 ID)
- Redis 集群模式(主从模式、哨兵模式、Cluster 集群模式)
- 如何解决 Redis 的并发竞争 Key 问题?
- 如何保证缓存与数据库双写时的数据一致性?
- ... ..
最后,再来看一份Redis常备的面试题...
- 什么是 Redis?简述它的优缺点?
- Redis 与 memcached 相比有哪些优势?
- Redis 支持哪几种数据类型?
- Redis 主要消耗什么物理资源?
- Redis 有哪几种数据淘汰策略?
- 为什么 Redis 需要把所有数据放到内存中?
- Redis 集群方案应该怎么做?都有哪些方案?
- Redis 集群方案什么情况下会导致整个集群不可用?
- MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?
- Redis 有哪些适合的场景?
- Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
- Redis 和 Redisson 有什么关系?
- Jedis 与 Redisson 对比有什么优缺点?
- Redis 集群的主从复制模型是怎样的?
- Redis 集群会有写操作丢失吗?为什么?
- 怎么理解 Redis 事务?
- Redis 如何做内存优化?
- Redis 回收进程如何工作的?
- watch dog 自动延期机制
- 锁互斥机制
- 释放锁机制|
- ... ....
关于上面说的这些Redis学习笔记和复习大纲以及面试常备题目(附详细解析),皆可免费赠送给阅读此篇文章的你,转发+私信我 “Redis” 即可找小编免费分享下载!!
相关推荐
- 开发者必看的八大Material Design开源项目
-
MaterialDesign是介于拟物和扁平之间的一种设计风格,自从它发布以来,便引起了很多开发者的关注,在这里小编介绍在Android开发者当中里最受青睐的八个MaterialDesign开源项...
- 另类插这么可爱,一定是…(另类t恤)
-
IT之家(www.ithome.com):另类插图:这么可爱,一定是…OSXMavericks和Yosemite打破了苹果对Mac操作系统传统的命名方式,使用加州的某些标志性景点来替换猫...
- Android常用ADB命令(安卓adb工具是什么)
-
杀死应用①根据包名获取APP的PIDadbshellps|grep应用包名②执行kill命令...
- 微软Mac版PowerPoint测试Reading Order Pane功能
-
IT之家5月20日消息,微软公司昨日(5月19日)发布博文,邀请Microsoft365Insiders成员,测试macOS新版PowerPoint演示文稿应用,重点引入...
- Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍
-
前言不同于iOS,Xamarin在VisualStudio中针对Android,可以直接设计使用者界面.在本篇教学文章中,笔者会针对Android的专案目录结构以及基本控制项进行介绍,包...
- 用云存储30分钟快速搭建APP,你信吗?
-
背景不管你承认与否,移动互联的时代已经到来,这是一个移动互联的时代,手机已经是当今世界上引领潮流的趋势,大型的全球化企业和中小企业都把APP程序开发纳入到他们的企业发展策略当中。但随着手机APP上传的...
- 谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果
-
Pine发自凹非寺量子位|公众号QbitAI当你拍照片时,“模特不好好配合”怎么办?...
- iOS文本编辑控件UITextField和UITextVie
-
记录一个菜鸟的IOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!细心的朋友可能已经注意到了,IOS学习之旅系列教程在本篇公众号的文章中,封面已经换成美女图片了,...
- Android入门图文教程集锦(android 入门教程)
-
Android入门视频教程集锦AndroidStudio错误gradientandroid:endXattributenotfound...
- 如何使用Android自定义复合视图(如何使用android自定义复合视图)
-
在最近的一个客户应用中,我遇到了一个需求,根据选定的值来生成指定数量的编辑框字段,这样用户可以输入人物信息。最初我的想法是把这些逻辑放到Fragment中,只是根据选中值的变化来向线性布局容器中增加编...
- 原生安卓开发app的框架frida常用关键代码定位
-
前言有时候可能会对APP进行字符串加密等操作,这样的话你的变量名等一些都被混淆了,看代码就可能无从下手...
- 教程10 | 三分钟搞定一个智能输入法程序
-
一案例描述1、考核知识点网格布局线性布局样式和主题Toast2、练习目标掌握网格布局的使用掌握Toast的使用掌握线性布局的使用...
- (Android 8.1) 功能与新特性(android的功能)
-
和你一起终身学习,这里是程序员AndroidAndroid8.1(API级别27)为用户和开发人员引入了各种新特性和功能。本文档重点介绍了开发人员的新功能。通过本章阅读,您将获取到以下内容:Andr...
- 怎样设置EditText内部文字被锁定不可删除和修改
-
在做项目的时候,我曾经遇到过这样的要求,就是跟百度贴吧客户端上的一样,在回复帖子的时候,在EditText中显示回复人的名字,而且这个名字不可以修改和删除,说白了就是不可操作,只能在后面输入内容。在E...
- 如何阻止 Android 活动启动时 EditText 获得焦点
-
技术背景在Android开发中,当活动启动时,EditText有时会自动获得焦点并弹出虚拟键盘,这可能不是用户期望的行为。为了提升用户体验,我们需要阻止...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- 开发者必看的八大Material Design开源项目
- 另类插这么可爱,一定是…(另类t恤)
- Android常用ADB命令(安卓adb工具是什么)
- 微软Mac版PowerPoint测试Reading Order Pane功能
- Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍
- 用云存储30分钟快速搭建APP,你信吗?
- 谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果
- iOS文本编辑控件UITextField和UITextVie
- Android入门图文教程集锦(android 入门教程)
- 如何使用Android自定义复合视图(如何使用android自定义复合视图)
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)