突破Java面试(21) - redis有哪些数据类型,谈谈适用场景

1 面试题

redis都有哪些数据类型?分别在哪些场景下使用比较合适?git

2 考点分析

除非是感受看你简历,就是工做3年之内的比较初级的一个同窗,可能对技术没有很深刻的研究过,我才会问这类问题,在宝贵的面试时间里,我实在是不想多问github

其实问这个问题,主要就俩缘由面试

  • 看看你到底有没有全面的了解redis有哪些功能,通常怎么来用,啥场景用什么,就怕你别就会最简单的kv操做
  • 看看你在实际项目里都怎么玩儿过redis

要是你回答的很差,没说出几种数据类型,也没说什么场景,你完了,面试官对你印象确定很差,以为你平时就是作个简单的set和get。redis

3 详解

3.1 string

这是最基本的类型了,没啥可说的,就是普通的set和get,作简单的kv缓存缓存

3.2 hash

这个是相似map的一种结构,这个通常就是能够将结构化的数据,好比一个对象(前提是这个对象没嵌套其余的对象)给缓存在redis里,而后每次读写缓存的时候,能够就操做hash里的某个字段。bash

key=150

value={
  “id”: 150,
  “name”: “zhangsan”,
  “age”: 20
}
复制代码

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

value={
  “id”: 150,
  “name”: “zhangsan”,
  “age”: 21
}
复制代码

3.3 list

有序列表,这个是能够玩儿出不少花样的jvm

微博,某个大v的粉丝,就能够以list的格式放在redis里去缓存性能

key=某大v

value=[zhangsan, lisi, wangwu]
复制代码

好比能够经过list存储一些列表型的数据结构,相似粉丝列表了、文章的评论列表之类的东西学习

好比能够经过lrange命令,就是从某个元素开始读取多少个元素,能够基于list实现分页查询,这个很棒的一个功能,基于redis实现简单的高性能分页,能够作相似微博那种下拉不断分页的东西,性能高,就一页一页走

好比能够搞个简单的消息队列,从list头怼进去,从list尾巴那里弄出来

3.4 set

无序集合,自动去重

直接基于set将系统里须要去重的数据扔进去,自动就给去重了,若是你须要对一些数据进行快速的全局去重,你固然也能够基于jvm内存里的HashSet进行去重,可是若是你的某个系统部署在多台机器上呢?

得基于redis进行全局的set去重

能够基于set玩儿交集、并集、差集的操做,好比交集吧,能够把两我的的粉丝列表整一个交集,看看俩人的共同好友是谁?对吧

把两个大v的粉丝都放在两个set中,对两个set作交集

3.5 sorted set

排序的set,去重可是能够排序,写进去的时候给一个分数,自动根据分数排序,这个能够玩儿不少的花样,最大的特色是有个分数能够自定义排序规则

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

排行榜:将每一个用户以及其对应的什么分数写入进去,zadd board score username,接着zrevrange board 0 99,就能够获取排名前100的用户;zrank board username,能够看到用户在排行榜里的排名

zadd board 85 zhangsan
zadd board 72 wangwu
zadd board 96 lisi
zadd board 62 zhaoliu

96 lisi
85 zhangsan
72 wangwu
62 zhaoliu

zrevrange board 0 3
复制代码

获取排名前3的用户

96 lisi
85 zhangsan
72 wangwu

zrank board zhaoliu

4

复制代码

X 交流学习

  • 公众号

图片描述

相关文章
相关标签/搜索