我是Redis,MySQL大哥被我坑惨了!

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 พ.ย. 2024

ความคิดเห็น • 66

  • @teowzhitong9806
    @teowzhitong9806 ปีที่แล้ว +16

    很喜欢这种方式讲解,有图,有故事,比起文字更能容易理解和吸收。大力支持🎉

  • @goldmanking5078
    @goldmanking5078 ปีที่แล้ว +38

    太赞了,支持up主,讲的风趣幽默的同时又有对程序原理深刻的洞见,非常棒!

  • @kaiyangwu2198
    @kaiyangwu2198 ปีที่แล้ว +7

    雖然已經知道原理,但你說的太有趣了,看完又複習一次。很期待你多做一些這類型的影片,謝謝你的用心製作,謝謝

  • @huoschen
    @huoschen ปีที่แล้ว +22

    私以為有一些問題還蠻蠢的!
    我在一些產品上自己手搓的資料緩存機制是這樣的:
    我不使用固定的超時機制,而是定下一個記憶體最大用量,如果資料緩存即將會超過這個量,則移除那些最「舊」的資料,讓出空間。所以這裡沒有超時不超時的問題,如果一直沒有新資料進來的話,很舊很舊的資料也可能會一直存在,而這也無所謂。而且這麼做記憶體不會爆,最多就用到設定的那個空間大小。
    至於什麼樣的資料叫「新」?什麼樣的資料叫「舊」?剛從大後方讀出來的資料是新資料,一直沒有人讀取的資料是舊資料。還有一旦有人取用了緩存內的某個資料,那個資料的生命年齡就會立刻歸零,變成新資料;也就是說如果有一筆資料已經很舊即將被刷出,只要有人取用了它,則它立刻就會被刷新;如果有一筆資料是熱門資料,經常被取用,則它永遠就不會舊。
    為做到這樣的機制,我只需要建立兩個查找系統,第一個資料結構是符合資料庫正規查找的結構,第二個是一個鏈結串列,用來管理所謂的資料新舊關係。新的資料就插入串列頭,中途被取用的資料就從串列解出後重新插入串列頭;當需要的時候就直接從串列尾開始移除資料,不需要查找、不需要隨機,也不會有什麼資料永遠釘子戶留在那。

    • @linshengred
      @linshengred ปีที่แล้ว +20

      這不就是LRU演算法嗎
      影片除了LRU還更多刪除策略...參考3:05
      當今天資料更新很頻繁或刪除需求很大的時候
      若只從串列尾部開始一筆筆刪除 是不是很花時間。O(n)線性
      但如果有張表來紀錄維護過期的資料 就可以進行批次的資料移除

  • @keep_calm_and_carryon
    @keep_calm_and_carryon ปีที่แล้ว +7

    記憶體裝大一點,盡量把資料轉成session(), session ()每使用一次,增加一分鐘時效。

  • @JoeyLu
    @JoeyLu ปีที่แล้ว +2

    还是微软大哥的东西好用又实在。。虽然贵,但却是好用啊。

  • @SeiLi-hr9hf
    @SeiLi-hr9hf ปีที่แล้ว +2

    還是要有大哥有小弟才有趣

  • @ShengWenChen
    @ShengWenChen ปีที่แล้ว +1

    講解的不錯 讚

  • @bruceliebewilma
    @bruceliebewilma ปีที่แล้ว +2

    都有cpu和缓存的架构了,Redis怎么就不学学他们管理进程的方式。。。

  • @mediocre2
    @mediocre2 2 หลายเดือนก่อน +1

    挺好的 就是我第一次听人这么读redis(read-dis), 我一般听到都是 red-dis,可能是我孤陋寡闻了

  • @ox6542
    @ox6542 2 หลายเดือนก่อน +1

    這個情境是假定數據只讀不寫嗎?不然mySQL那邊如果有被別的service update,要如何通知cache數據過期,還是在雙11這種use case裡consistency不重要🤔

  • @Evan-fj2lb
    @Evan-fj2lb ปีที่แล้ว +3

    RDB和AOF是不是该上场了

  • @oceanwjswong1162
    @oceanwjswong1162 ปีที่แล้ว +1

    講的真好

  • @youngyoung3976
    @youngyoung3976 ปีที่แล้ว

    可以对键值命中做统计?对命中超过某个阈值的,不要清除。 这个统计和阈值的设置甚至可以有AI计算

  • @nowhereman5956
    @nowhereman5956 ปีที่แล้ว

    讲得真不错,会做视频你就多做几部

  • @kanlu5199
    @kanlu5199 ปีที่แล้ว +4

    MySQL本身不是也有内存来缓存吗?

  • @kahchon87
    @kahchon87 ปีที่แล้ว +1

    Memcached 是不是和 redis 一样?

  • @08058804
    @08058804 ปีที่แล้ว +2

    脫離後端一段時間,不知不覺把這系列看完了

  • @JunKaiGan
    @JunKaiGan 2 หลายเดือนก่อน

    这影片太棒了

  • @cia1099
    @cia1099 2 หลายเดือนก่อน

    讲得很具体生动有趣啊😂

  • @JayHsuLatte
    @JayHsuLatte 2 หลายเดือนก่อน

    😂 超牛逼的解釋

  • @yayapipi1385
    @yayapipi1385 ปีที่แล้ว

    太棒了,直接订阅!

  • @samshum2
    @samshum2 ปีที่แล้ว +2

    勵害,完全沒想到還可以說成故事來,但有一點不明白,就是第一次問mysql,數據不應該上載redis做緩存了嗎?

    • @nbspnbsp5639
      @nbspnbsp5639 ปีที่แล้ว +1

      这个第一次不是原子操作,是很多同时来,这些都是第一次

    • @michaeldang8189
      @michaeldang8189 ปีที่แล้ว +1

      我也有同样的疑问,偶然一次击穿(再来的Redis应该有缓存抵挡了),这MySQL就扛不住,MySQL怎么也是历练多年出来的武林大咖,不会这么菜吧?

    • @wudewang9947
      @wudewang9947 หลายเดือนก่อน

      @@michaeldang8189 国内对mysql的印象还停留在过去

  • @sc0110
    @sc0110 หลายเดือนก่อน

    太讚了

  • @服务器维护成都
    @服务器维护成都 ปีที่แล้ว +1

    没有redis之前还有memcache

  • @michaeldang8189
    @michaeldang8189 ปีที่แล้ว

    热点缓存清除后大量访问击穿到MySQL,但是那不应该只是一次而已吗?头一次击穿后就该又缓存了,大量访问也只是跑在最前头的那一次穿啊,我想错了吗?

    • @davidwu8232
      @davidwu8232 ปีที่แล้ว

      能接待的话还需要啥redis 逻辑问题

  • @clairezhang3103
    @clairezhang3103 ปีที่แล้ว +1

    大哥,你真是个人才呀!没办法不一键三联! 超赞!

  • @cinnamon2006
    @cinnamon2006 2 หลายเดือนก่อน

    Memcache也不错。。。

  • @cncclay7473
    @cncclay7473 ปีที่แล้ว

    谢谢。

  • @Qwerty-ru8cz
    @Qwerty-ru8cz 2 หลายเดือนก่อน

    牛哇

  • @ifcwlme
    @ifcwlme ปีที่แล้ว +1

    mysql 不是也有 cahce 嗎?

  • @kunmiaoyang9515
    @kunmiaoyang9515 ปีที่แล้ว

    后事就是Redis也能persist

  • @sciab3674
    @sciab3674 ปีที่แล้ว

    有意思 不错。

  • @frank_zhao
    @frank_zhao ปีที่แล้ว

    太赞了👍

  • @linlouise-x2t
    @linlouise-x2t หลายเดือนก่อน

    听到删除查询到的过期的数据就感觉不对劲,既然是用到了应该加时啊

  • @soulge
    @soulge ปีที่แล้ว +4

    缓存穿透是因为没有数据然后去数据库查询,那第一个穿透过去然后缓存下来, 后续的查询不就可以直接从缓存里拿吗?那怎么会有很多穿透过去? 这里是不是因为有很多这一类型的穿透才造成雪崩?

    • @aaronwu9695
      @aaronwu9695 ปีที่แล้ว +7

      通常是高併發的情況,單一KEY過期導致擊穿
      雪崩是多個key 過期才導致的

    • @devinguo3726
      @devinguo3726 ปีที่แล้ว

      如果查询的东西MySQL里也不存在呢?

    • @devinguo3726
      @devinguo3726 ปีที่แล้ว +7

      穿透是指查询的东西MySQL中不存在,击穿是指mysql中存在但redis中没有(已过期),雪崩是指大量的击穿😁

    • @许跃华
      @许跃华 ปีที่แล้ว

      @@aaronwu9695 这位说的有道理,应该是和高并发有关系。不是高并发,第一个获得查询值后就缓存下来了,后面的自然会去找缓存

    • @indigoichigo
      @indigoichigo ปีที่แล้ว

      @@devinguo3726 一樣會設一個 key 儲存空值,但由於可能大量查詢不存在的數據,即使儲存空值也會占用 RAM,所以過期時間會設置比較短

  • @tommymairo8964
    @tommymairo8964 2 หลายเดือนก่อน

    所以為啥不用 Cassandra 😂

  • @foollonggone4727
    @foollonggone4727 ปีที่แล้ว

    謝謝

  • @wanderer4290
    @wanderer4290 2 หลายเดือนก่อน

    大赞

  • @jingvzhi
    @jingvzhi ปีที่แล้ว

    真不错

  • @boensad7911
    @boensad7911 ปีที่แล้ว

    太愚蠢了。。。

  • @pkpk1889
    @pkpk1889 ปีที่แล้ว +7

    看了前面准备点赞了,最后却要关注公众号才能看后面,果断点了踩

  • @pat.j3667
    @pat.j3667 ปีที่แล้ว

    不错

  • @ricosun
    @ricosun ปีที่แล้ว

    Nice !

  • @波哥-p7k
    @波哥-p7k ปีที่แล้ว

    我竟然看笑了

  • @ravenxrz6523
    @ravenxrz6523 ปีที่แล้ว

    最后是是不是可以用共享内存?

  • @naturerelaxingsongs7084
    @naturerelaxingsongs7084 ปีที่แล้ว

    大赞

  • @lixinyang6651
    @lixinyang6651 2 หลายเดือนก่อน

    抄别人的内容就没意思了吧

  • @mingli9563
    @mingli9563 ปีที่แล้ว

    真不错

  • @浮躁天狗活着
    @浮躁天狗活着 8 หลายเดือนก่อน +1

    真不错