avatar

zian

A text-focused Halo theme

  • Java
  • 面试
  • 首页
  • C语音
  • liunx
  • 数据结构与算法
  • 控制台
Home Redis 面试
文章

Redis 面试

Posted 2025-02-8 Updated 2025-02- 9
By Administrator
11~14 min read

Redis 常用的数据类型有哪些

String

描述:最基本的数据类型,可以存储字符串、整数或浮点数

使用场景:

  • 缓存简单的键值对。
  • 计数器,比如 (文章点赞数量)

常用命令:

  • set key value :设置键值对
  • get key :获取键对应的值
  • incr key : 键的值+1(只适用于整数 , 比如计数器)
  • decr key :键的值 -1

Hash

描述:用于存储对象集合,key - value 结构

使用场景:

  • 存储用户信息(比如 id 为将键,用户信息为 value )

常用命令:

  • hset key field value :设置哈希字段的值
  • hget key field :获取哈希字段的值
  • hgetall key :获取哈希中所有的字段和值
  • hdel key field :删除哈希中的字符。

List

描述:有序字符串列表,支持从头部或者尾部插入和删除(可以实现栈和队列的效果)

常用场景:

  • 消息队列(如任务队列)。
  • 最新消息列表(如最新10条评论)。

常用命令:

  • LPUSH key value:从列表头部插入元素。
  • RPUSH key value:从列表尾部插入元素。
  • LPOP key:从列表头部弹出元素。
  • RPOP key:从列表尾部弹出元素。
  • LRANGE key start stop:获取列表范围内的元素。

Set

描述:无序且唯一的字符串集合,支持交集、并集、差集等操作。

常用场景:

  • 标签系统(如文章的标签)。
  • 去重数据存储。

常用命令:

  • SADD key member:向集合中添加元素。
  • SREM key member:从集合中移除元素。
  • SMEMBERS key:获取集合中的所有元素。
  • SINTER key1 key2:获取多个集合的交集。

SortedSet

描述:类似于 Set ,但是每一个元素关联一个分数(score),元素按照分数进行排序。

常用场景:

  • 排行榜(如用户积分排名)。
  • 带权重的任务队列。

常用命令:

  • ZADD key score member:向有序集合中添加元素。
  • ZREM key member:从有序集合中移除元素。
  • ZRANGE key start stop:按分数范围获取元素。
  • ZREVRANGE key start stop:按分数范围逆序获取元素。

Bitmap(位图)

描述:基于 String类型的位操作,可以看做一个位数组

常用场景:

  • 用户签到记录。
  • 布尔统计(如用户是否在线)。

常用命令:

  • SETBIT key offset value:设置位的值(0或1)。
  • GETBIT key offset:获取位的值。
  • BITCOUNT key:统计值为1的位数。

Redis 缓存问题

面试官问题:我看的项目中都使用到了Redis ,你在最近的项目中哪些场景使用了 Redis 呢?

答:我在失物认领的项目中,主要使用的 Redis 的缓存功能,比如:在该项目中有个关于物品分类的数据, 这些数据一般在项目开始的时候都会设计好,一般不会发生大的改变了,因此我将物品分类数据都进行缓存。

面试官:Redis 缓存有三大问题,你知道么?

答:知道,缓存穿透、缓存击穿、缓存雪崩。

缓存穿透:

  • 场景:查询不存在的数据(如恶意攻击)。
  • 解决:
    • 缓存空值:短期缓存无效 Key(如 5 分钟)。
    • 布隆过滤器:拦截非法请求,需注意误判率和空间占用。

缓存击穿:

  • 场景:热点 Key 过期后,瞬时高并发请求直达数据库。
  • 解决:
    • 互斥锁:一个线程重建缓存,其他线程等待。
    • 逻辑过期:key 不设计过期时间,在 value 中设置过期时间,到了过期时间,异步重建缓存。

缓存雪崩:

  • 场景:大量 Key 同时过期或 Redis 宕机。
  • 解决:
    • 随机 TTL:为 Key 设置基础过期时间 + 随机时间。
    • 集群高可用:哨兵模式自动故障转移,集群模式分散压力。
    • 限流降级:通过熔断机制保护数据库。

布隆过滤器

面试官:你说到了布隆过滤器,你知道布隆过滤器怎么实现的吗?

答:嗯,布隆过滤的作用就拦截一些不存在的数据,不用再查询Redis和数据库了。布隆过滤器基于一个大型位数组和多个哈希函数。写入时,对 Key 进行多次哈希,将对应位设为 1;查询时,若所有哈希位均为 1,则 Key 可能存在(可能有误判),否则一定不存在。优点是空间效率高,缺点存在误判率。

image-accy.png

面试
License:  CC BY 4.0
Share

Further Reading

Feb 9, 2025

其他

问: git 如何解决分支冲突 查看分支冲突文件 删除冲突代码 重新提交代码 liunx 常用命令 1. chmod 功能:修改文件或目录的权限。 常见用法示例: chmod +x script.sh:为 script.sh 文件添加可执行权限。 chmod 755 file.txt:使用数字模式设

Feb 9, 2025

Elasticsearch 面试

问:你了解 ElasticSearch 吗? 答:了解,ElasticSearch 一个强大的搜索引擎,在失物招领项目中我就使用 ES ,给 ES 安装中文分词器,就可以根据中文词语来检索索引库。Java

Feb 9, 2025

Spring 面试

问:解释 IOC 容器和DI依赖注入 答: IOC容器:控制反转,将创建对象权利交给IOC容器来完成 DI 依赖注入:获取 IOC 中获取创建好的对象,在Spring 常用的依赖注入有: 构造器注入 set 方法注入 @Autowired 注入 使用 IOC容器和DI依赖注入的好处: 降低代码耦合

OLDER

MySQL 面试

NEWER

RabbitMQ 面试

Recently Updated

  • 其他
  • Elasticsearch 面试
  • Spring 面试
  • RabbitMQ 面试
  • Redis 面试

Trending Tags

ruoyi docker java

Contents

©2025 zian. Some rights reserved.

Using the Halo theme Chirpy