{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

redis是否可以代替mysql進行數據存儲?怎么樣?

AndrmanAndrman 回答0 收藏1
收藏問題

10條回答

hellowoody

hellowoody

回答于2022-06-28 15:04

Redis本身是支持數據持久化的,很多有些程序員都會覺得Redis應該可以替代MySQL,但是我們在使用一項技術的時候,不是看它能不能,而是要看它適合不適合;而在大部分場景下,Redis是無法替代MySQL的。

  • MySQL是關系型數據庫,數據儲存在磁盤上,數據的格式是我們熟知的二維表格的樣式。關系型數據庫具有很多強大的功能;大部分都支持SQL語句查詢,對事務也有很好的支持。

  • Redis被稱作非關系型數據庫,屬于內存數據庫,數據都儲存在內存中(Redis有RDB持久化策略),Redis支持的數據類型也比較多,比如字符串,HASH,List等。

  • MySQL和Redis沒有競爭的關系,通常當并發訪問量比較大的時候,特別是讀操作很多,架構中可以引入Redis,幫助提升架構的整體性能,減少Mysql(或其他關系型數據庫)的壓力;

  • 不是MySQL or Redis;而是MySQL + Redis ;

因為Redis的性能十分優越,可以支持每秒十幾萬此的讀/寫操作,并且它還支持持久化、集群部署、分布式、主從同步等,Redis在高并發的場景下數據的安全和一致性,所以它經常用于這些場景:

  1. 經常要被查詢,但是CUD操作頻率低的數據;比如數據字典,確定了之后很少被修改,是可以放到緩存中的;還有熱點數據,查詢極為頻繁的數據,放到Redis中可以減少MySQL的壓力;

  2. 經常被查詢,但是實時性要求不高數據,比如購物網站的熱銷排行榜,定時統計一次后把統計結果放到Redis中提供查詢(請不要每次都使用select top 10 from xxxx)。

  3. 緩存還可以做數據共享(Session共享),在分布式的架構中,把用戶的Session數據放到Redis中。

  4. 高并發場景下的計數器,比如秒殺,把商品庫存數量放到Redis中(秒殺的場景會比較復雜,Redis只是其中之一,例如如果請求超過某個數量的時候,多余的請求就會被限流);

  5. 因為Redis對高并發的支持和單線程機智,它也經常用作分布式鎖;

Redis雖然功能強大、性能高效,但是也不是萬能的,項目在引入Redis的時候,需要考慮的問題也比較多,并且會帶來額外的開發和運維的工作量。

  1. 首先要判斷數據是否適合緩存到Redis中,可以從幾個方面考慮:數據會被經常查詢么?命中率如何?寫操作多么?數據大小?數據一致性如何保證?

  2. 我們經常采用這樣的方式將數據刷到Redis中:查詢的請求過來,現在Redis中查詢,如果查詢不到,就查詢數據庫拿到數據,再放到緩存中,這樣第二次相同的查詢請求過來,就可以直接在Redis中拿到數據;不過要注意【緩存穿透】的問題。

  3. 緩存的刷新會比較復雜,通常是修改完數據庫之后,還需要對Redis中的數據進行操作;代碼很簡單,但是需要保證這兩步為同一事務,或最終的事務一致性。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。

評論0 贊同0
  •  加載中...
X1nFLY

X1nFLY

回答于2022-06-28 15:04

首先可以明確一點的是:Redis可以對MySQL中的部分數據進行存儲,但Redis是無法代替MySQL來做數據存儲的。Redis是非關系型數據庫,MySQL是關系型數據庫,聽上去都是數據庫,但兩者的定位及應用場景是完全不同的。

數據庫的目的及功能

數據庫是專門用來存儲數據的地方,可以理解成是一個電子檔案館。數據庫需要具備最基本的新增、更新、查詢、刪除等操作,另外要在并發操作下保證數據的隔離性和一致性。

為什么會存在非關系型數據庫(NoSQL)?

我們知道,傳統的關系型數據庫都是持久化存儲的,數據是存放在硬盤中的。隨著數據量的擴大,無論是寫入還是查詢操作都會產生IO開銷。為了解決寫讀數據帶來的IO瓶頸就出現了NoSQL技術。

Redis非關系型數據庫的初衷及不足

Redis作為一種非關系型數據庫的代表,它是基于內存的高性能Key-Value數據庫。它支持每秒十幾萬次的讀寫操作,在讀寫性能上遠遠超過傳統的關系型數據庫

Redis讀寫速度之所以這么快,是因為它將數據直接存放在內存中進行操作的。但是問題也來了,如果使用Redis來做數據存儲,那內存開銷是相當大的,出于成本考慮我們一般只使用Redis來存儲熱點數據。

另外一方面,雖然Redis也支持數據持久化,但是Redis的數據查詢能力很差而且事務支持不完善。這樣一比較,在數據存儲能力上,Redis遠遠比不上MySQL這類關系型數據庫。


綜上,Redis一般都是配合MySQL來使用的,也無法代替MySQL來做數據持久存儲。

以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我了解更多科技知識!

評論0 贊同0
  •  加載中...
zgbgx

zgbgx

回答于2022-06-28 15:04

redis是不可以代替mysql進行數據存儲的。redis和mysql不應該是競爭的關系,而是一對好基友。在實際工作中針對不同的場景,根據redis和mysql的各自優點采用不同的存儲方案,合理的運用兩者才能達到理想的效果。

NoSQL是“Not Only SQL”的意思,本質上是跟SQL形成互補關系的應用。

之所以有“redis是否可以代替mysql進行數據存儲”這樣的疑問,一定是有很多人認為redis是可以替代mysql的。我也不可否認,在特定的場景下或者說小型web服務的場景下,redis確實可以替代mysql做數據存儲。但是這是有前提條件的,絕不能就可以說redis可以代替mysql進行數據存儲的。

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

上面是redis的官網描述,redis是一個基于BSD協議開源的內存數據庫,可用作數據庫、緩存和消息隊列,支持strings、hashes、lists、sets、sorted sets、bitmaps...等等數據結構。

每一種數據結構都有適合自己的應用場景,熟悉運用redis的各種數據結構,確實讓各位有一種錯覺“redis可以替代mysql”。

redis是基于內存存儲的,采用IO單路復用模型。一個字就是快!對于并發訪問量比較高的場景,使用redis可以避免流量直接沖向數據庫層。


下面是個人使用redis和mysql的一些心得:

  1. redis存業務數據,mysql存更細粒度或者基于數據模型對象的數據,redis是中間緩存層,mysql是數據存儲層。

  2. mysql中like/in/and/or/join等數據查詢檢索redis是無法支持的,通常情況下,我們會以mysql數據為基礎數據,然后通過一系列的策略或者job跑出業務數據放到redis中存儲,這是二者結合使用的典型應用場景。

  3. redis對事務的支持還是比較簡單的,所以很多復雜的數據落庫場景很難用redis去支持,即便可以支持,那也需要花費高昂的代價,這個時候你突然想起來有一個mysql好像可以完美的支持事務。

  4. 大部分的業務請求基本上就到redis這一層就結束了,如果查不到數據那就查不到,不會再去數據庫里面去查了,所以也不用考慮“緩存穿透”的問題。

  5. redis中存儲的大部分數據是不過期的,所以也沒有“緩存雪崩”的問題。

  6. redis能夠讓你的業務運行的更快,mysql能夠讓你的數據更安全。

  7. 那么問題來了,如何保證redis中存儲的業務數據能夠與mysql中存儲的數據保持一致呢?所以我們需要做一套數據一致性的方案來保證這個前提。


綜上,MySQL和redis各自有各自的應用場景,掌握好他們的特性,在不同的場景下應用最適合的存儲方案才是編碼之道。

歡迎大家積極參與討論,一起學習,共同成長~

評論0 贊同0
  •  加載中...
baiy

baiy

回答于2022-06-28 15:04

Mysql是關系型數據庫,而NOSQL譬如redis通常都是弱關系,如果你的數據相互之間關系非常弱,哪自然可以使用redis,反之如果你是強關系,使用redis則需要自己實現上層的數據模型關系,祝你好運

評論0 贊同0
  •  加載中...
Olivia

Olivia

回答于2022-06-28 15:04

基本上,作為一個靠開發維持生活的人,看到此類比較什么比什么好、什么能不能代替什么的問題,基本上會判定為是初學者的無聊撕逼,這種情況都是直接略過。但是,偶爾這些問題也會出自某些資深同行之口,那么可以分情況討論。

如何回答這類問題,基本上取決于這個問題出現在什么場景下:
場景一:面試
可以考慮的回答:面試官你是認真的嗎?貴司是真的考慮要這么干還是已經這么干了?我感覺我的職業生涯規劃可能跟貴司的發展方向并不是非常匹配,所以,非常抱歉!我還有事,先走了。
場景二:技術分享

可以考慮拒絕回答。而且如果是公司內部的技術分享,基本上可以考慮找下家了。討論這種問題的公司要么是太牛逼而毫無生存壓力,要么是太垃圾而毫無生存機會。前者的可能性不會太大。所以,走為上策吧!


在各位大佬噴我之前,請先讓我把話說完。

這個問題如果不是那么認真地提出來的話,我還有可能會假裝認真地回答。

如果真有人認真地提出這個問題,我只能認為此人對待技術本身有點太不認真了。

當然,純屬個人看法。


好了,各位請隨便噴吧!反正我也不會回來看。

評論0 贊同0
  •  加載中...
baukh789

baukh789

回答于2022-06-28 15:04

兩者適用于不同的場景,誰也替代不了誰

redis主要用于熱點數據的快速查詢,數據要符合“查多改少”的特點,事務性差。

mysql存儲的結構化數據,強調數據的一致性,需要數據高度一致的場景還是要關系型數據庫出馬,電信運營商、金融等行業oracle還是主流解決方案。

這兩種數據庫,在檢索方式,存儲容量上,也是不一樣的。

MySQL是關系型數據庫,可以通過多字段的檢索來確定數據,而且,基于硬盤的存儲,容量會大得多。

而Redis是kv數據庫,雖然支持多種數據結構,但是本質上,依然是kv。它的高效檢索是依賴于數據緩存在內存當中的。不能進行多條件聯合檢索,也不支持like等檢索。

存在即合理,redis和關系型數據庫是共生關系

大型系統都會同時看到redis、關系型數據庫的身影,通過相互配合解決系統的高并發和數據的一致性。當然這里面要考慮緩存擊穿、緩存雪崩、緩存和數據庫的一致性等問題。

總之,兩者是相輔相成的,歡迎探討。

評論0 贊同0
  •  加載中...
?xiaoxiao,

?xiaoxiao,

回答于2022-06-28 15:04

不可以,存儲數據類型不一樣,都是開源數據庫,用redis 代替mysql沒意義

評論0 贊同0
  •  加載中...
lunaticf

lunaticf

回答于2022-06-28 15:04

想搞明白這個問題,必須要先知道,什么是redis,什么是mysql,他們的各自優缺點是什么

  • redis:是一種非關系kv內存數據庫(也就是常說的nosql),即將數據存儲在緩存中,支持的數據類型比較多,比如字符串,hash,list等緩存的讀取速度快,能夠大大的提高運行效率,但是保存時間有限。
  • mysql:是關系型數據庫,主要用于存放持久化數據,將數據存儲在硬盤中,數據的格式是我們熟知的二維表格的樣式,關系型數據庫具有很多強大的功能,大部分都支持SQL語句查詢,對事務也有很好的支持。
  • mysqlredis沒有競爭的關系,通常當并發訪問量比較大的時候,特別是讀操作很多,架構中可以引入redis,幫助提升架構的整體性能,減少mysql(或其他關系型數據庫)的壓力。

所以兩者是相互配合,而不是替代,因為Redis的性能十分優越,可以支持每秒十幾萬次的讀/寫操作,并且它還支持持久化、集群部署、分布式、主從同步等,Redis在高并發的場景下數據的安全和一致性,所以它經常用于這些場景:

  1. 經常要被查詢,但是創建、更新、刪除等操作頻率低的數據;比如數據字典,確定了之后很少被修改,是可以放到緩存中的;還有熱點數據,查詢極為頻繁的數據,放到redis中可以減少mysql的壓力;
  2. 經常被查詢,但是實時性要求不高數據,比如購物網站的熱銷排行榜,定時統計一次后把統計結果放到redis中提供查詢 。
  3. 緩存還可以做數據共享(session共享),在分布式的架構中,把用戶的session數據放到redis中。
  4. 高并發場景下的計數器,比如秒殺,把商品庫存數量放到redis中(秒殺的場景會比較復雜,redis只是其中之一,例如如果請求超過某個數量的時候,多余的請求就會被限流);
  5. 因為redis對高并發的支持和單線程機智,它也經常用作分布式鎖;

redis雖然功能強大、性能高效,但是也不是萬能的,項目在引入redis的時候,需要考慮的問題也比較多,并且會帶來額外的開發和運維的工作量。

  1. 首先要判斷數據是否適合緩存到redis中,可以從幾個方面考慮:數據會被經常查詢么?命中率如何?寫操作多么?數據大小?數據一致性如何保證?
  2. 我們經常采用這樣的方式將數據刷到redis中:查詢的請求過來,現在redis中查詢,如果查詢不到,就查詢數據庫拿到數據,再放到緩存中,這樣第二次相同的查詢請求過來,就可以直接在redis中拿到數據;不過要注意【緩存穿透】的問題。
  3. 緩存的刷新會比較復雜,通常是修改完數據庫之后,還需要對redis中的數據進行操作;代碼很簡單,但是需要保證這兩步為同一事務,或最終的事務一致性。

評論0 贊同0
  •  加載中...
Cristic

Cristic

回答于2022-06-28 15:04

redis是nosql數據庫,擅長處理鍵值對(key, value)結構的數據,同時他還支持豐富的數據結構 set, map, list, zset

mysql擅長處理關系型數據

如果你的應用場景,僅限于存儲和簡單查詢,不去做復雜的關聯操作,并且能夠容忍一定的數據丟失的話,可以使用redis代替mysql。但是主流場景不這樣使用,redis主要用作熱點數據的緩存,相當于緩存一些讀多寫少的數據,用于降低mysql(后者其它關系型數據庫)的讀寫壓力。

評論0 贊同0
  •  加載中...
yuanzhanghu

yuanzhanghu

回答于2022-06-28 15:04

緩存數據庫怎么替代物理數據庫

評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<