redis模糊查询key前缀_Redis面试题

0. Redis的主要数据类型?

 string、hash、list、set及zset(sorted set:有序集合)

1. Memcache与Redis的区别?

Memcache支持简单数据类型、不支持数据持久化存储、不支持主从、不支持分片;

Redis数据类型丰富、支持数据磁盘持久化存储、支持主从同步、支持分片。

2. Redis能够做什么?

如图所示[1],Redis能够做缓存、计数器、简单的消息队列等等

88fbe8c8ab1232c50fb9e37b1b45c986.png

3. 为什么要用Redis?Redis为什么能这么快?

速度快,完全基于内存,数据结构简单,单线程,网络层使用非阻塞IO解决高并发问题

(1) 使用C语言实现,速度快

(2) 完全基于内存,执行效率高

(3) 数据结构简单,对数据操作也简单

(4) 采用单线程,避免线程切换与多线程开销问题

(5) 使用多路IO复用模型,非阻塞IO。采用的IO多路复用的函数有:select/epoll等,优先选择时间复杂度为O(1)的函数作为底层实现,以时间复杂度O(n)的select作为保底。

4. 在Redis中,如何从海量key中查询出某一个固定前缀所有的key?

如果该机器是生产环境正在对外提供服务,不建议使用keys * pattern的方法进行查询,可能阻塞服务器;一般生产服务器建议使用Scan命令[2]。

5. 如何通过Redis实现分布式锁?

 分布式锁可以基于很多种方式实现,如zookeeper、redis……它的基本原理是:用一个状态值表示锁,对锁的占用和释放通过状态值来标识[3]。

 Redis的SETNX(SET if Not eXists)命令可以实现分布式锁,语法:SETNX key value,如果key不存在,则创建并赋值,设置成功返回1,设置失败返回0。

 解决SETNX长期有效的问题:设置key的生存时间,当key过期时,则会被删除。

 解决死锁问题:持有锁的客户端在解锁之前应该再检查一次自己的锁是否已经超时,再去做DEL操作,因为可能客户端因为某个耗时的操作而挂起,操作完的时候锁因为超时已经被别的获得,这时就不必解锁了。

6. 如何使用Redis实现异步队列?

(1) 使用List作为队列,RPUSH生产消息,LPOP消费消息。

  缺点:没有等待队列里有值就直接消费。可以通过在应用层引入Sleep机制去调用LPOP重试。

(2) pub/sub主题订阅模式

  发送者(pub)发送消息,订阅者(sub)接受消息,订阅者可以订阅任意数量的频道,但消息的发布是无状态的,无法保证可达。

7. 如何从海量数据中快速找到所需?

 思路:分片,按照某种规则(一致性哈希算法)去划分数据……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值