redis 实战面试

网易云课堂上面的总结:redis

一.redis使用的场景?算法

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

 

二.经常使用数据结构?服务器

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

   经常使用命令:get set incr decr Mget性能

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

   经常使用命令:Lpush Rpush Lpop Rpop Lrangeblog

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有没有碰到过数据丢失的状况?

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

相关文章
相关标签/搜索