V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxc1234
V2EX  ›  程序员

面试被虐 redis,所以来这边问问

  •  1
     
  •   zxc1234 · 2020-04-01 13:36:24 +08:00 · 6265 次点击
    这是一个创建于 1697 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.redis 根据 key 获取 value

    可以用 get key,那么里面的实现原理是什么呢?

    (我百度不到啊)

    2.redis 的数据结构有 string,hash,set,sort set 等,那么在平时的业务处理中有没有遇到过用其中一种

    数据类型不合适,然后用另一种的情况呢,是什么场景呢?为什么要这么换呢?

    求大佬们告知下,不胜感激。

    第 1 条附言  ·  2020-04-01 15:23:46 +08:00
    3.关于数据结构压缩列表


    《 redis 设计与实现》说 当一个列表健只包含少量列表项,并且每个列表项要嘛就是比较短多的字符串要嘛就是小整数值,那么 redis 就会使用压缩列表来做列表健的底层实现。

    为什么在这种情况下的才使用压缩列表?
    26 条回复    2020-04-03 08:50:24 +08:00
    janxin
        1
    janxin  
       2020-04-01 13:39:23 +08:00
    1. 搜索关键词“redis 源码 get”
    2. 搜索关键词“redis xxx 使用场景”
    lhx2008
        2
    lhx2008  
       2020-04-01 13:40:56 +08:00 via Android
    get key 就是一个 hashmap,怎么用就看你有没用过了
    la2la
        3
    la2la  
       2020-04-01 13:48:39 +08:00
    如果着急面试的话,直接背面试题。如果有时间的话,可以 jd 找一本 redis 书看看
    bottleimp
        4
    bottleimp  
       2020-04-01 13:49:24 +08:00 via iPhone   ❤️ 1
    一般面试碰到这种,你可以说我没看过 redis 代码,但我自己实现的话,会怎么怎么来做,巴拉巴拉,设计大体合理,能讨论下去就行了。
    Hstar
        5
    Hstar  
       2020-04-01 13:57:58 +08:00
    redis 的面试问题,《 redis 设计与实现》看完基本全能答,就算那些不懂的有点深度的问题,也能回答得可圈可点。
    huntcool001
        6
    huntcool001  
       2020-04-01 14:56:19 +08:00
    redis.io 官网上你全部看一遍再说吧
    gen900
        7
    gen900  
       2020-04-01 15:03:16 +08:00
    估计面试官想听你说哈希。
    danhahaha
        8
    danhahaha  
       2020-04-01 15:09:57 +08:00 via iPhone
    @gen900 其实更想听到你说希哈,这样就可以面不改色的微笑着看下个人的简历了
    0x666666
        9
    0x666666  
       2020-04-01 16:01:47 +08:00
    和 hashmap 差不多 主要是通过 hash 算 key
    lyhiving
        10
    lyhiving  
       2020-04-01 16:24:27 +08:00
    主要是看你之前应用有没有掉过坑,很多原理并不重要,解决问题的能力才是看中的。
    redis 就是一个 KV 数据库,所有的性能都在 key 上面,无法就是 hash 寻址问题。
    optional
        11
    optional  
       2020-04-01 16:30:23 +08:00
    不要看什么『压缩列表』的书,和面试官对不上话, 少量数据不用 hash 用 ziplist 是因为遍历的成本不高(甚至更快),而且更节约内存。
    useben
        12
    useben  
       2020-04-01 16:56:09 +08:00
    1. redis 就是一个巨大的 kv 存储, 一个巨大的 hashtable, 引出 hash 寻址, hash 算法, hash 碰撞, rehash
    2. 业务场景, 没有也要给搞出来. 如抽奖, 一开始 hash, 后来 set, 为了去重. 如排行榜, 一开始 set, 自己搜出来遍历排序, 后来换 zset...其实就是各个数据类型的使用场景切换
    mamahaha
        13
    mamahaha  
       2020-04-01 17:00:34 +08:00
    给你面试的人遇到了几个问题但百度不到,所以就以面试的名义把面试者喊来问问,总会有一些人能告诉他某个问题的答案的用于学习印证的,也总会有某个问题的答案不是每个人都知道的。
    所以即可以名正言顺地拒绝面试者,又可以不出钱、不卖人情、不跑腿。。。让自己的知识得以增长,真是太划算了。
    goodboy95
        14
    goodboy95  
       2020-04-01 17:30:15 +08:00
    redis 的 list 结构还是一个链表,不过每个节点可能压缩存储了多个数据(也就是所谓的"压缩列表")。
    我记得我以前看的是,如果 list 尾节点大小不超过 8KB,新增的数据都会加到尾节点里面压缩存储,超过的话就新增一个节点存储。
    不过现在也不敢保证百分百对了,有段时间没看过 redis 实现了。
    liunaijie
        15
    liunaijie  
       2020-04-01 17:40:00 +08:00
    借楼,想请教一个 redis aof 持久化的问题: https://www.v2ex.com/t/658102
    开启 aof 后,手动使用 BGREWRITEAOF 命令后 aof 文件变成了二进制文件是否正常
    zxc1234
        16
    zxc1234  
    OP
       2020-04-01 18:07:03 +08:00
    @gen900 老哥 6666666666,看了下资料,可能真的是想问这个
    zxc1234
        17
    zxc1234  
    OP
       2020-04-01 18:09:08 +08:00
    @0x666666 你是指第一个问题,是吧?
    zxc1234
        18
    zxc1234  
    OP
       2020-04-01 18:11:33 +08:00
    @useben 你这边 1 和 2 中的 hash 是不一样的吧,1 的 hash 是指散列吧,2 的 hash 是指 value 的类型吧
    julyclyde
        19
    julyclyde  
       2020-04-01 18:18:45 +08:00
    如果这岗位不是去开发 redis 的话,只能说招聘方过于装逼了
    ZehaiZhang
        20
    ZehaiZhang  
       2020-04-01 18:24:03 +08:00
    之前有被问过 string 的存储原理,楼主可以带着问题一起读
    picone
        21
    picone  
       2020-04-01 18:52:07 +08:00
    redis 集群有个问题,是根据 key 分散到各个节点的,如果使用值较大的类型,如 hashmap,会导致单个节点容量过高,这种情况可以看看能不能改成 string 类型。
    huntcool001
        22
    huntcool001  
       2020-04-01 19:13:08 +08:00
    @picone 官网上的建议是一个大的 hashmap 分成小的.. 而不是改成 string.
    zxc1234
        23
    zxc1234  
    OP
       2020-04-01 20:44:06 +08:00
    zxc1234
        24
    zxc1234  
    OP
       2020-04-01 20:45:47 +08:00
    @picone
    @huntcool001

    新手求教,redis 有 hashmap 这个类型吗?这边的 hashmap 是指?
    zjj19950716
        25
    zjj19950716  
       2020-04-01 23:38:56 +08:00 via iPhone   ❤️ 1
    redis 的源码是真的好,看起来很爽
    OysterQAQ
        26
    OysterQAQ  
       2020-04-03 08:50:24 +08:00
    1 redis 底层类似 hashmap
    2 应该从这些数据结构的操作的时间复杂度下手(根本原因是底层数据结构的实现导致的)
    3 ziplist 看一下源代码,看了数据结构就明白在什么情况下 ziplist 会产生性能问题,就会明白在什么时候该用,3.0 还是 3.2 之后 list 实现就是 quicklist 了,ziplist 在 hash set 都有用到,元素较少的时候遍历可能比 hash 还快
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1221 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:19 · PVG 02:19 · LAX 10:19 · JFK 13:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.