Redis面试题

1.redis基本数据类型及常用客户端命令

 string、list、set、zset、hash。相关指令见 redis常用客户端命令

2.redis过期key删除策略

Redis中过期key的删除策略,分为三种:定时删除、定期删除、惰性删除。其中,定时删除和定期删除是主动删除策略,惰性删除是被动删除策略。
1、定时删除
定时删除是在设置key的过期时间的同时,会创建一个定时器(timer)。定时器在key的过期时间来临时,立即执行对key的删除操作。缺点是消耗CPU,基本不使用
2、定期删除
定期删除是每隔一段时间,程序就会对Redis数据进行一次检查,删除里面的一定数量的过期key,通过定期删除策略,可以有效地减少因为过期key而带来的内存浪费。
3、惰性删除
惰性删除是是每次获取key时,都会检查取得的key是否过期,如果过期,则删除该key;若没有过期,就返回该key的值。缺点是对内存是最不友好的。如果一个key已经过期,而这个key又仍然保留在db中,那么只要这个过期key不被删除,它所占用的内存就不会释放。

3.redis数据淘汰策略

voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据

4.redis持久化

见 redis.conf详解

5.redis事务

见 redis事务

6.redis单线程模型原理

见 redis单线程模型 

7.redis集群

见 redis集群

8.redis管道

见 redis管道(Pipeline)

9.假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?

使用keys指令可以扫出指定模式的key列表。

对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?

这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。

10.缓存雪崩和缓存穿透问题解决方案

缓存雪崩:缓存同一时间大面积的失效
缓存穿透:请求缓存中不存在的数据
解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

 11.Redis相比memcached有哪些优势

1.memcached所有的值均是简单的字符串,Redis作为其替代者,支持更为丰富的数据类型
2.Redis的速度比memcached快很多
3.Redis可以持久化其数据
4.Redis支持数据的备份,即master-slave模式的数据备份。

12.redis分布式锁

见 redis分布式锁

原文地址:https://www.cnblogs.com/ryjJava/p/14265142.html