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持久化
5.redis事务
见 redis事务
6.redis单线程模型原理
7.redis集群
见 redis集群
8.redis管道
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分布式锁