zoukankan      html  css  js  c++  java
  • 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有没有碰到过数据丢失的情况?

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

  • 相关阅读:
    webStrom 注释模板添加
    匹配正则 url 端口 域名
    监测数据类型封装方法
    base64图片展示(后端给base64数据,前端展示图片)
    倒计时
    机密16位
    mvc与mvvm的区别
    flex表格的使用
    flex中tab页面的实现
    flex中下拉框的实现
  • 原文地址:https://www.cnblogs.com/-cyh/p/10520488.html
Copyright © 2011-2022 走看看