开篇词 | 这样学Redis,才能技高一筹
开篇词 | 这样学Redis,才能技高一筹
讲述:蒋德钧
时长12:58大小11.88M
为什么懂得了一个个技术点,却依然用不好 Redis?
课程是如何设计的?
赞 762
提建议
精选留言(141)
- 郭蕾置顶2020-08-04给这个我们打磨了两年的专栏留个印记吧,就像我们编辑说的,希望这不只是一个课程,而且还是一个作品,我们要精益求精,追求卓越。 这不,昨天一上线,我们就发现课程配图虽然够用,但不精致。于是,我们的编辑同学就连夜赶工做了替换。 上周刚做完Java工程师方面的招聘调研,我可以确定地说,绝大多数的一线公司在面试后端岗位时,都会问到Redis相关的问题(RPC、缓存、MQ三驾马车)。咱们就从今天开始,和蒋老师,一起学Redis吧。展开共 13 条评论351
- 朱晔2020-08-03干货🈵🈵共 2 条评论62
- Geek_48707a2020-08-04请问一下老师,Redis中sorted set 底层实现是一个dict + 一个zskiplist, Redis底层为什么要如此设计。zadd key score value 这样的形式,那如果底层采用了跳表的数据结构zset到底是如何存储数据的呢?dict中存储的是什么,跳表中存储的又是什么呢
作者回复: 这个问题非常好,对sorted set的底层实现,观察很仔细。 我们一般用sorted set时,会经常根据集合元素的分数进行范围查询,例如ZRANGEBYSCORE或者ZREVRANGEBYSCORE,这些操作基于跳表就可以实现O(logN)的复杂度。此时,跳表的每个节点同时保存了元素值和它的score。感兴趣可以进一步看下,redis源码的server.h中的zskiplistNode结构体。 然后,就是你说的为什么还设计dict。不知道你有没有注意到,sorted set 还有ZSCORE这样的操作,而且它的操作复杂度为O(1)。如果只有跳表,这个是做不到O(1)的,之所以可以做到O(1),就是因为还用了dict,里面存储的key是sorted set的member,value就是这个member的score。
共 8 条评论58 - 闫攀2020-08-03课程最后会梳理怎么更高效的读redis源码吗, 希望可以得到作者的回复
作者回复: 了解源码的确会有很好的帮助,后续会综合大家的整体需求,可能会加个餐,来聊聊源码的阅读
共 5 条评论38 - 秦穆之2020-11-18## 基础数据结构 * **02 | 数据结构:快速的Redis有哪些慢操作?** * **11 | “万金油”的String,为什么不好用了?** * **12 | 有一亿个keys要统计,应该用哪种集合?** * **13 | GEO是什么?还可以定义新的数据类型吗?** * **14 | 如何在Redis中保存时间序列数据?** ## 网络与性能 * **03 | 高性能IO模型:为什么单线程Redis能那么快?** * **16 | 异步机制:如何避免单线程模型的阻塞?** * **17 | 为什么CPU结构也会影响Redis的性能?** * **18 | 波动的响应延迟:如何应对变慢的Redis?(上)** * **19 | 波动的响应延迟:如何应对变慢的Redis?(下)** * **20 | 删除数据后,为什么内存占用率还是很高?** * **21 | 缓冲区:一个可能引发“惨案”的地方** ## 持久化 * **04 | AOF日志:宕机了,Redis如何避免数据丢失?** * **05 | 内存快照:宕机后,Redis如何实现快速恢复?** * **06 | 数据同步:主从库如何实现数据一致?** ## 哨兵机制 * **07 | 哨兵机制:主库挂了,如何不间断服务?** * **08 | 哨兵集群:哨兵挂了,主从库还能切换吗?** * **32 | Redis主从同步与故障切换,有哪些坑?** ## 分布式 * **09 | 切片集群:数据增多了,是该加内存还是加实例?** * **29 | 无锁的原子操作:Redis如何应对并发访问?** * **30 | 如何使用Redis实现分布式锁?** * **31 | 事务机制:Redis能实现ACID属性吗?** * **35 | Codis VS Redis Cluster:我该选择哪一个集群方案?** * **37 | 数据分布优化:如何应对数据倾斜?** ## 缓存策略与常用架构 * **23 | 旁路缓存:Redis是如何工作的?** * **24 | 替换策略:缓存满了怎么办?** * **25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题?** * **26 | 缓存异常(下):如何解决缓存雪崩、击穿、穿透难题?** * **27 | 缓存被污染了,该怎么办?** * **33 | 脑裂:一次奇怪的数据丢失** ## 实用项目 * **28 | Pika: 如何基于SSD实现大容量Redis?** * **36 | Redis支撑秒杀场景的关键技术和实践都有哪些?**展开共 8 条评论29
- spoofer2021-02-01整理的 笔记 https://github.com/TopSpoofer/learning/tree/master/redis共 2 条评论27
- Geek_224f632020-08-03蒋老师你好,不知道研发hikv的背景是什么呢?难道redis都不能满足这个需求吗?
作者回复: HiKV的研发驱动力主要有两方面:一个是希望键值数据库对单点操作,例如PUT/GET,以及对范围操作都能高效支持,Redis的全局组织结构是个哈希表,所以对范围操作支持不高效,例如KEYS操作。 另一个考虑是,大容量非易失内存的出现,使得键值数据库的容量可以更大,但Redis并没有支持非易失内存,或者说内存键值数据库应该如何使用非易失内存,这是要做设计考虑的。 欢迎交流讨论。
共 9 条评论26 - 张晗_Jeremy2020-08-03第一个沙发,收到通知就买了。gogogo!
作者回复: 第一个赞就给你了!:)
18 - CityAnimal2021-01-11打卡 * [ ] “坑“ * [ ] CPU上的坑 * [ ] 内存使用上的坑 * [ ] 持久化存储上的坑 * [ ] 网络通信上的坑 * [ ] 系统观 * [ ] 建立完整的知识框架 * [ ] 两大维度 * [ ] 应用纬度 * [ ] 缓存应用 * [ ] 集群应用 * [ ] 数据结构应用 * [ ] 系统纬度 * [ ] 处理层 * [ ] 线程模型 - (缓存应用,高性能主线) * [ ] 主从复制 - (集群应用,高可靠主线) * [ ] 数据分片 - (数据应用,高可扩展主线) * [ ] 内存层 * [ ] 数据结构 - (缓存应用,高性能主线) * [ ] 哨兵机制 - (集群应用,高可靠主线) * [ ] 存储层 * [ ] AOF - (缓存应用,高性能主线) * [ ] RDF - (集群应用,高可靠主线) * [ ] 负载均衡 - (数据结构应用,高可扩展主线) * [ ] 网络层 * [ ] epoll- (缓存应用,高性能主线) * [ ] 三大主线 * [ ] 高性能 * [ ] 高可用 * [ ] 高可扩展展开17
- Geek_75d94a2020-08-06两张图给我很深的启发,很好的归纳零散的知识点,让我想尝试用在其他地方建立一下知识体系。
作者回复: 加油!加油!
共 3 条评论17 - 一步2020-08-03如果使用非易失内存 NVM, 这样设计出来的 高性能的健值数据库 是不是就对硬件的依赖就很大了?
作者回复: Intel去年4月份已经面向市场推出AEP产品了,现在咱们个人也都能买得到,当然主板和CPU还需要做些支持,需要一定型号才行 不过,业界很多大厂更早些时候也在实践NVM。所以这个趋势我觉得是会比较确定的。就像现在SSD应用的很广泛,我们使用也不太会觉得有依赖性,因为使用比较普遍了。我觉得以后NVM也是类似的。
共 4 条评论16 - 轻飘飘过2020-08-03redis它终于来了12
- 型火🔥2020-08-13两大维度和三大主线的系统方法论可以迁移到大部分的中间件体系学习中
作者回复: 方法论很重要 :)
10 - 💕2020-08-18您好,还有就是你说的redis技术,存储数据。是不是说就不用数据库了比如mysql sql server等,直接用redis当数据库了呢?
作者回复: Redis是可以直接作为键值数据库,保存的数据一般为key-value这样的数据。 而你说到的mysql,SQL Server是关系型数据库,保存的数据有关系模型。 这两类数据库在支持的数据模型、增删改查操作、事务支持等方面都有差别,所以有了Redis,并不能取代MySQL这类数据库的。
共 2 条评论7 - 与路同飞2020-08-03老师说的以这种问题画像图这种学习方式挺好的,用什么技术点解决什么场景问题,自己在以后学习也要善于用这种方式去归纳总结,不至于学了不会用
作者回复: 掌握方法很重要:)
共 2 条评论7 - 藏锋2021-04-09我一直有个疑问,对于原理性的知识,真的要掌握这么细吗?就是达到能够随口将每个细节说出来说清楚的地步。说实话我之前对于原理性的东西只会了解个大概,能说出个大概,不会抠细节。而且我们作为开发,要学习的东西实在太多,越往高处走,会发现什么底层、开发、运维、架构、软件工程、测试、业务设计都是一体的都要涉猎。但是我们个人时间和精力都很有限,那么我们学习某项技术的时候,真的要把这门技术的所有细节都掌握吗?而这些细节真的不只是靠理解就够的,更多的要靠记忆,怎么说呢,就是不仅要理解还要背书。因为工作中用不到,时间不长肯定会忘。各位大牛们还有老师,麻烦谁给我解惑!展开共 5 条评论5
- 小不点2020-08-11凡事预则立,终于在极客时间上等到redis了,打卡加油共 1 条评论5
- 子郁2020-08-05一起学习,认识的朋友如果看到, 欢迎来督促我一起学习。4
- 浪潮之巅2021-03-30我怎么觉得redis的全景图RDB和AOF需要换个位置呢共 2 条评论3
- 诗和远方2020-10-29老师您好!关于AOF会造成性能抖动,我有些疑问。 在事件循环中,Redis都会定期进行flushAppendOnlyFile的操作,这里会调用write将AOF Buffer中的数据写入AOF文件,但根据Linux Kernel的机制,如果不显示调用fsync,则不会立刻写入磁盘。 关于fsync的处理方式,Redis给了我们两个选项: 1. AOF_FSYNC_ALWAYS:即每次flushAppendOnlyFile操作都执行fsync,确实当AOF Buffer过大时,会导致主线程的事件循环阻塞,无法处理新来的请求。 2. AOF_FSYNC_EVERYSEC:即每秒(非严格)进行一次fsync操作,这里会提交任务给后台IO线程进行,不会阻塞主线程的事件循环,可以正常处理新的请求。 第一种确实是会造成性能抖动,但第二种应该就不会了吧?望老师解惑!展开3