首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java高频面试题- 每日三连问?【Day24】 — Redis篇(四)

Java高频面试题- 每日三连问?【Day24】 — Redis篇(四)

作者头像
浩说编程
发布2022-04-12 14:13:56
发布2022-04-12 14:13:56
3390
举报
文章被收录于专栏:Java经验之谈Java经验之谈

问题导读

一、说说Redis 回收进程如何工作的?

二、使用过 Redis 做异步队列么,你是怎么用的?

三、使用过 Redis 分布式锁么,它是什么回事?

01

说说Redis 回收进程如何工作的?

正经回答:

一个客户端运行了新的命令,添加了新的数据。

Redis 检查内存使用情况, 如果大于 maxmemory 的限制, 则根据设定好的策略进行回收。一个新的命令被执行,等等。

所以我们不断地穿越内存限制的边界,通过不断达到边界然后不 断地回收回到边界以下。

如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。

分享朋友圈,每天进步一点点~

02

使用过 Redis 做异步队列么,你是怎么用的?

正经回答:

一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。

当 lpop 没有消息的时候,要适当 sleep 一会再重试。

可不可以不用 sleep 呢?

list 还有个指令叫 blpop, 在没有消息的时候,它会阻塞住直 到消息到来。

能不能生产一次消费多次呢?

使用 pub/sub 主题订 阅者模式,可以实现 1:N 的消息队列。

pub/sub 有什么缺点?

在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如 RabbitMQ 等。

redis 如何实现延时队列?

使用 sortedset,拿时间 戳作为 score,消息内容作为 192key 调用 zadd 来生产消息,消费者用 zrangebyscore 指令获取 N 秒之前的数据轮询进行 处理。

03

使用过 Redis 分布式锁么,它是什么回事?

正经回答:

先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了释放。

如果在 setnx 之后执行 expire 之前进程意 外 crash 或者要重启维护了,那会怎么样?

set 指令有参数,这个应该是可以同时把 setnx 和 expire 合成一条指令来用的

- End -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩说编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正经回答:
  • 正经回答:
  • 正经回答:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档