面试-Redis常见场景

1.从海量的数据里查询某一固定前缀的key

(1)keys pattern指令:

摸清数据规模(很重要)

(2)cursor:游标

Scan cursor [MATCH pattern] [COUNT count]

可以无阻塞的提取出指定模式的key列表

基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程。

以0作为游标开始一次新的迭代,直到命令返回游标为0完成一次遍历

不保证每次执行都需要返回某个给定数量的元素,支持模糊查询

一次返回数量不可控,只能是大概率符合count参数

2.如何通过redis实现分布式锁

分布式锁:是控制分布式系统或不同系统之间共同访问共享资源的一种锁的实现。

分布式锁需要解决的问题:

互斥性;安全性;死锁;容错;

原子性操作。用来实现分布式锁。在执行某段代码逻辑时,先使用SETNX对某个key设值,设置成功表示没有别的线程在执行该段代码。反之,就有别的线程正在占用该段资源。

如何解决SETNX长期有效的问题?

expire key seconds

设置key的生存时间,当key过期时(生存时间为0),会自动删除

优化:从Redis 2. 6.12开始可以将SETNX和expire结合。

3.如何实现异步队列:

使用list作为队列,RPUSH生产消息,LPOP消费消息。

缺点:没有等待队列里有值就直接消费

弥补:可以通过在应用层引入Sleep机制去调用LPOP重试。

BlPOP能代替sleep做更精准的阻塞控制。


缺点:消息的发布是无状态的,无法保证可达。

对于发布者来说消息是即发即失的。若消费者在生产者发布消息时下线,重新上线时是接收不到该消息的。要解决这个问题,就要使用专业的消息队列。如Kafka,rabbitMQ

相关推荐
Q741_14712 小时前
C++ 面试高频考点 链表 迭代 递归 力扣 25. K 个一组翻转链表 每日一题 题解
c++·算法·链表·面试·递归·迭代
橘颂TA13 小时前
【剑斩OFFER】算法的暴力美学——山脉数组的蜂顶索引
算法·leetcode·职场和发展·c/c++
博语小屋14 小时前
力扣11.盛水最多的容器(medium)
算法·leetcode·职场和发展
Swift社区14 小时前
LeetCode 423 - 从英文中重建数字
算法·leetcode·职场和发展
羊锦磊14 小时前
[ 项目开发 1.0 ] 新闻网站的开发流程和注意事项
java·数据库·spring boot·redis·spring·oracle·json
小龙报15 小时前
《算法通关指南:算法基础篇 --- 一维前缀和 — 1. 【模板】一维前缀和,2.最大子段和》
c语言·数据结构·c++·算法·职场和发展·创业创新·visual studio
程序员三藏15 小时前
一文了解UI自动化测试
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
敲敲了个代码15 小时前
11月3-5年Web前端开发面试需要达到的强度
前端·vue.js·学习·react.js·面试·职场和发展·web
吃饺子不吃馅15 小时前
面试官:JWT、Cookie、Session、Token有什么区别?
前端·设计模式·面试