redis 实战面试

网易云课堂上面的总结:

一.redis使用的场景?

answer:把用户信息缓存到redis。通过incr做id自增操作(例如单据编号自增)。常用的报表数据查询(hash).

二.常用数据结构?

1.string:简单的k_v类型。使用场景(微博上,粉丝数,常规计数)

   常用命令:get set incr decr Mget

2.list:链表类型。使用场景:(微博的关注列表,粉丝列表)

   常用命令:Lpush Rpush Lpop Rpop Lrange

3.set:集合,一堆不重复的组合,利用set可以存储一些集合性的数据。使用场景:共同关注,共同喜好,二度好友。

  常用命令:Sadd(向集合中添加一个或多个成员)  Spop(移除并返回集合中的一个随机元素) Smember(返回集合中的所有成员) Sunion(返回给定集合的所有并集)

4.sorted set:区别set的地方是,可以通过额外的score参数来为成员排序,并且插入是有序的,即自动排序。使用场景(排行榜,按照用户投票和时间排序)

 常用命令:Zadd  Zrange Zrem  Zcard

三.最多往redis里面塞过多少条数据?

answer:五万条?

四.单台内存用完了怎么办?

关键点:最大内存阀值(maxmemory),内存回收策略(maxmemory-plicy),LRU算法

LUR(least recently used,最近最少使用)算法:根据数据的历史访问记录来淘汰数据

伍.如果缓存的数据比单台服务器的内存要大,怎么处理?

关键字:redis集群redis cluster

场景:假如有20G数据需要存redis怎么办?

answer:做redis集群,假如一台服务器是4G内存,那么起码要七台,毕竟还有什么操作系统内存巴拉巴拉的。

集群就会引出redis_cluster。

那么redis怎么做内存分配呢?

例如火车票:每一节车厢可以做很多人,根据你的车票信息找到对应的座位,火车根据不同的座位号划分不同的车厢(这里车厢代表属于哪台服务器)

这个车票号怎么生成呢?

这叫要说到怎么计算slot(槽->车牌号),通过crc 16_hash(key)计算出唯一hash值,然后slot = hash % 16384(redis最大存储)

既然找到了车票号怎么通过车票号找到对应的车厢呢(服务器)?

假如不知道随机插入到第N台服务器,假如这个车牌号属于这个车厢,那么会返回ok,如果不属于则会重定向告诉你需要指向哪台服务器。

但是这会存在一个性能问题,假如1000个请求过来,每次都找错了,那不是本来1000次的请求要请求2000次?

这个时候可以把slot的计算放在客户端,客户端缓存slot的分配信息。然后我们就可以直接定位到redis_service,如果客户端发送的slot信息有误,那么当我们收到重定向响应的时候更新该slot分配信息。

六:数据放在redis有没有碰到过数据丢失的情况?

关键点:持久化机制主从复制

原文地址:https://www.cnblogs.com/-cyh/p/10520488.html