Redis的使用場景和高並發高性能


高性能

假設這么個場景,你有個操作,一個請求過來,吭哧吭哧你各種亂七八糟操作查詢mysql,半天查出來一個結果,耗時600ms。但是這個結果可能接下來幾個小時都不會變了,或者變了也可以不用立即反饋給用戶。那么此時咋辦?

緩存啊,折騰600ms查出來的結果,扔緩存里,一個key對應一個value,下次再有人查同樣的數據,別走mysql折騰600ms了。直接從緩存里取出,通過一個key查出來一個value,2ms搞定。性能提升300倍。

這就是所謂的高性能。

就是把你一些復雜操作耗時查出來的結果,如果確定后面不咋變了,然后但是馬上還有很多的請求,那么直接結果放緩存,后面直接讀緩存就好了。

 

高並發

mysql這么重的數據庫,壓根兒設計不是讓你玩兒高並發的,雖然也可以玩兒,但是天然支持不好。mysql單機支撐到2000qps也開始容易報警了。

所以要是你有個系統,高峰期一秒鍾過來的請求有1萬,那一個mysql單機絕對會死掉。你這個時候就只能上緩存,把很多數據放緩存,別放mysql。緩存功能簡單,說白了就是key-value式操作,單機支撐的並發量輕松一秒幾萬十幾萬,支撐高並發so easy。單機承載並發量是mysql單機的幾十倍。

 

 

所以要結合這倆場景考慮一下,你為啥要用緩存?

一般很多同學項目里沒啥高並發場景,那就別折騰了,直接用高性能那個場景吧,就思考有沒有可以緩存結果的復雜查詢場景,后續可以大幅度提升性能,優化用戶體驗,有,就說這個理由,沒有?那你也得編一個出來吧,不然你不是在搞笑么
 

問題分析

(1) redis 和 memcached 的區別

redis支持更豐富的數據類型(支持更復雜的應用場景):Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。memcache支持簡單的數據類型,String。
redis與Memcached一樣,都支持數據的持久化,為了保證效率,數據都是緩存在內存中。區別的是Redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步,而Memecache只會把數據全部存在內存之中。

集群模式:memcached沒有原生的集群模式,需要依靠客戶端來實現往集群中分片寫入數據;但是 redis 目前是原生支持 cluster 模式的.

Memcached是多線程,非阻塞IO復用的網絡模型;Redis使用單線程的多路 IO 復用模型


(2)為啥redis單線程模型也能效率這么高?

 1)純內存操作

 2)核心是基於非阻塞的IO多路復用機制

 3)單線程反而避免了多線程的頻繁上下文切換問題(百度)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM