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