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

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

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

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” 即可找小编免费分享下载!!

相关推荐

[常用工具] git基础学习笔记_git工具有哪些

添加推送信息,-m=messagegitcommit-m“添加注释”查看状态...

centos7安装部署gitlab_centos7安装git服务器

一、Gitlab介1.1gitlab信息GitLab是利用RubyonRails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。...

太高效了!玩了这么久的Linux,居然不知道这7个终端快捷键

作为Linux用户,大家肯定在Linux终端下敲过无数的命令。有的命令很短,比如:ls、cd、pwd之类,这种命令大家毫无压力。但是,有些命令就比较长了,比如:...

提高开发速度还能保证质量的10个小窍门

养成坏习惯真是分分钟的事儿,而养成好习惯却很难。我发现,把那些对我有用的习惯写下来,能让我坚持住已经花心思养成的好习惯。...

版本管理最好用的工具,你懂多少?

版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。...

Git回退到某个版本_git回退到某个版本详细步骤

在开发过程,有时会遇到合并代码或者合并主分支代码导致自己分支代码冲突等问题,这时我们需要回退到某个commit_id版本1,查看所有历史版本,获取git的某个历史版本id...

Kubernetes + Jenkins + Harbor 全景实战手册

Kubernetes+Jenkins+Harbor全景实战手册在现代企业级DevOps体系中,Kubernetes(K8s)、Jenkins和Harbor组成的CI/CD流水...

git常用命令整理_git常见命令

一、Git仓库完整迁移完整迁移,就是指,不仅将所有代码移植到新的仓库,而且要保留所有的commit记录1.随便找个文件夹,从原地址克隆一份裸版本库...

第三章:Git分支管理(多人协作基础)

3.1分支基本概念分支是Git最强大的功能之一,它允许你在主线之外创建独立的开发线路,互不干扰。理解分支的工作原理是掌握Git的关键。核心概念:HEAD:指向当前分支的指针...

云效Codeup怎么创建分支并进行分支管理

云效Codeup怎么创建分支并进行分支管理,分支是为了将修改记录分叉备份保存,不受其他分支的影响,所以在同一个代码库里可以同时进行多个修改。创建仓库时,会自动创建Master分支作为默认分支,后续...

git 如何删除本地和远程分支?_git怎么删除远程仓库

Git分支对于开发人员来说是一项强大的功能,但要维护干净的存储库,就需要知道如何删除过时的分支。本指南涵盖了您需要了解的有关本地和远程删除Git分支的所有信息。了解Git分支...

git 实现一份代码push到两个git地址上

一直以来想把自己的博客代码托管到github和coding上想一次更改一次push两个地址一起更新今天有空查资料实践了下本博客的github地址coding的git地址如果是Gi...

git操作:cherry-pick和rebase_git cherry-pick bad object

在编码中经常涉及到分支之间的代码同步问题,那就需要cherry-pick和rebase命令问题:如何将某个分支的多个commit合并到另一个分支,并在另一个分支只保留一个commit记录解答:假设有两...

模型文件硬塞进 Git,GitHub 直接打回原形:使用Git-LFS管理大文件

前言最近接手了一个计算机视觉项目代码是屎山就不说了,反正我也不看代码主要就是构建一下docker镜像,测试一下部署的兼容性这本来不难但是,国内服务器的网络环境实在是恶劣,需要配置各种镜像(dock...

防弹少年团田柾国《Euphoria》2周年 获世界实时趋势榜1位 恭喜呀

当天韩国时间凌晨3时左右,该曲在Twitter上以“2YearsWithEuphoria”的HashTag登上了世界趋势1位。在韩国推特实时趋势中,从上午开始到现在“Euphoria2岁”的Has...