我是Redis,MySQL大哥被我坑惨了!
HTML-код
- Опубликовано: 10 сен 2024
- 大厂面试都爱问的Redis是如何工作的,看完这个视频就知道了!
大家好,我是新人RUclipsr轩辕,专注分享硬核又有趣的计算机知识,欢迎订阅我的频道!
=========================分割线============================
背景音乐来源信息:
Harmony by Vlad Gluschenko | / vgl9
Music promoted by www.free-stock...
Creative Commons / Attribution 3.0 Unported License (CC BY 3.0)
creativecommon...
太赞了,支持up主,讲的风趣幽默的同时又有对程序原理深刻的洞见,非常棒!
这种风趣正是支性的体现。
很喜欢这种方式讲解,有图,有故事,比起文字更能容易理解和吸收。大力支持🎉
雖然已經知道原理,但你說的太有趣了,看完又複習一次。很期待你多做一些這類型的影片,謝謝你的用心製作,謝謝
私以為有一些問題還蠻蠢的!
我在一些產品上自己手搓的資料緩存機制是這樣的:
我不使用固定的超時機制,而是定下一個記憶體最大用量,如果資料緩存即將會超過這個量,則移除那些最「舊」的資料,讓出空間。所以這裡沒有超時不超時的問題,如果一直沒有新資料進來的話,很舊很舊的資料也可能會一直存在,而這也無所謂。而且這麼做記憶體不會爆,最多就用到設定的那個空間大小。
至於什麼樣的資料叫「新」?什麼樣的資料叫「舊」?剛從大後方讀出來的資料是新資料,一直沒有人讀取的資料是舊資料。還有一旦有人取用了緩存內的某個資料,那個資料的生命年齡就會立刻歸零,變成新資料;也就是說如果有一筆資料已經很舊即將被刷出,只要有人取用了它,則它立刻就會被刷新;如果有一筆資料是熱門資料,經常被取用,則它永遠就不會舊。
為做到這樣的機制,我只需要建立兩個查找系統,第一個資料結構是符合資料庫正規查找的結構,第二個是一個鏈結串列,用來管理所謂的資料新舊關係。新的資料就插入串列頭,中途被取用的資料就從串列解出後重新插入串列頭;當需要的時候就直接從串列尾開始移除資料,不需要查找、不需要隨機,也不會有什麼資料永遠釘子戶留在那。
這不就是LRU演算法嗎
影片除了LRU還更多刪除策略...參考3:05
當今天資料更新很頻繁或刪除需求很大的時候
若只從串列尾部開始一筆筆刪除 是不是很花時間。O(n)線性
但如果有張表來紀錄維護過期的資料 就可以進行批次的資料移除
記憶體裝大一點,盡量把資料轉成session(), session ()每使用一次,增加一分鐘時效。
还是微软大哥的东西好用又实在。。虽然贵,但却是好用啊。
這個情境是假定數據只讀不寫嗎?不然mySQL那邊如果有被別的service update,要如何通知cache數據過期,還是在雙11這種use case裡consistency不重要🤔
大哥,你真是个人才呀!没办法不一键三联! 超赞!
脫離後端一段時間,不知不覺把這系列看完了
都有cpu和缓存的架构了,Redis怎么就不学学他们管理进程的方式。。。
MySQL本身不是也有内存来缓存吗?
挺好的 就是我第一次听人这么读redis(read-dis), 我一般听到都是 red-dis,可能是我孤陋寡闻了
RDB和AOF是不是该上场了
講解的不錯 讚
還是要有大哥有小弟才有趣
讲得很具体生动有趣啊😂
这影片太棒了
講的真好
真不错
讲得真不错,会做视频你就多做几部
可以对键值命中做统计?对命中超过某个阈值的,不要清除。 这个统计和阈值的设置甚至可以有AI计算
😂 超牛逼的解釋
牛哇
Memcached 是不是和 redis 一样?
勵害,完全沒想到還可以說成故事來,但有一點不明白,就是第一次問mysql,數據不應該上載redis做緩存了嗎?
这个第一次不是原子操作,是很多同时来,这些都是第一次
我也有同样的疑问,偶然一次击穿(再来的Redis应该有缓存抵挡了),这MySQL就扛不住,MySQL怎么也是历练多年出来的武林大咖,不会这么菜吧?
谢谢。
大赞
没有redis之前还有memcache
太棒了,直接订阅!
太赞了👍
有意思 不错。
后事就是Redis也能persist
Memcache也不错。。。
缓存穿透是因为没有数据然后去数据库查询,那第一个穿透过去然后缓存下来, 后续的查询不就可以直接从缓存里拿吗?那怎么会有很多穿透过去? 这里是不是因为有很多这一类型的穿透才造成雪崩?
通常是高併發的情況,單一KEY過期導致擊穿
雪崩是多個key 過期才導致的
如果查询的东西MySQL里也不存在呢?
穿透是指查询的东西MySQL中不存在,击穿是指mysql中存在但redis中没有(已过期),雪崩是指大量的击穿😁
@@aaronwu9695 这位说的有道理,应该是和高并发有关系。不是高并发,第一个获得查询值后就缓存下来了,后面的自然会去找缓存
@@devinguo3726 一樣會設一個 key 儲存空值,但由於可能大量查詢不存在的數據,即使儲存空值也會占用 RAM,所以過期時間會設置比較短
热点缓存清除后大量访问击穿到MySQL,但是那不应该只是一次而已吗?头一次击穿后就该又缓存了,大量访问也只是跑在最前头的那一次穿啊,我想错了吗?
能接待的话还需要啥redis 逻辑问题
mysql 不是也有 cahce 嗎?
謝謝
所以為啥不用 Cassandra 😂
看了前面准备点赞了,最后却要关注公众号才能看后面,果断点了踩
不关注也能看哦😅
不错
Nice !
大赞
太愚蠢了。。。
我竟然看笑了
最后是是不是可以用共享内存?
抄别人的内容就没意思了吧
原作者是谁
真不错
真不错