色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Guava、Memcached和Redis,選哪個(gè)比較好?

簡(jiǎn)單來(lái)說(shuō),Redis 就是一個(gè)數(shù)據(jù)庫(kù)。

不同于傳統(tǒng)數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在磁盤(pán)中,Redis 將數(shù)據(jù)存在內(nèi)存中,所以它也經(jīng)常被叫做內(nèi)存數(shù)據(jù)庫(kù);同時(shí) Redis 存儲(chǔ)也被叫做 NoSQL 數(shù)據(jù)庫(kù)、非關(guān)系型數(shù)據(jù)庫(kù)。

因?yàn)?Redis 將數(shù)據(jù)保存在內(nèi)存中,所以讀寫(xiě)速度會(huì)非常快,因此 Redis 被廣泛應(yīng)用做緩存或其他需要高速讀寫(xiě)的場(chǎng)景。

為什么要使用 Redis

軟件架構(gòu)中引入 Redis ,是因?yàn)樗坝挚煊謴?qiáng)”。

1. 快,是指性能高

計(jì)算機(jī)硬件的速度由低到高:硬盤(pán)-網(wǎng)絡(luò)-內(nèi)存-CPU;

在傳統(tǒng)的數(shù)據(jù)庫(kù)中,如果第一次訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)中的某條數(shù)據(jù),通常是比較慢的,因?yàn)閿?shù)據(jù)庫(kù)需要從硬盤(pán)上讀取數(shù)據(jù);而 Redis 中的數(shù)據(jù)保存在了內(nèi)存中,所以速度會(huì)比從磁盤(pán)中讀取數(shù)據(jù)快得多。

所以我們經(jīng)常把 Redis 當(dāng)做緩存:第一次從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),并放入 Redis ,后面直接訪(fǎng)問(wèn) Redis 就可以了。

2. 強(qiáng),是指高并發(fā)場(chǎng)景下的穩(wěn)定性(高可用)

在高并發(fā)的場(chǎng)景下,Redis 能夠承受的訪(fǎng)問(wèn)極限,是遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)庫(kù)的,所以我們可以考慮把需要高并發(fā)讀的數(shù)據(jù)放到 Redis 中;

比如秒殺功能,短短幾秒內(nèi)可能就會(huì)有數(shù)十萬(wàn)筆的訪(fǎng)問(wèn),如果直接操作數(shù)據(jù)庫(kù)的話(huà),數(shù)據(jù)庫(kù)可能瞬間就被擊垮了。

哪些場(chǎng)景不適合放入 Redis

當(dāng)然,也不是說(shuō)所有的場(chǎng)景、所有的數(shù)據(jù)都適合放進(jìn) Redis 中,通常我們需要考慮以下幾點(diǎn):

  • 數(shù)據(jù)查詢(xún)的命中率高么?如果緩存的命中率很低,沒(méi)有必要放入到 Redis 中;
  • 數(shù)據(jù)讀寫(xiě)操作多么?如果數(shù)據(jù)會(huì)被頻繁寫(xiě)入(增、改、刪),設(shè)置寫(xiě)操作次數(shù)大于讀操作次數(shù),那么也沒(méi)有必要使用 Redis ;
  • 業(yè)務(wù)數(shù)據(jù)大小如何?如果要儲(chǔ)存文件,那完全沒(méi)有必要放入到 Redis 中。

本地緩存 or Redis

緩存分為本地緩存和分布式緩存:

1. 本地緩存

比如 Guava、Ehcache,甚至把緩存保存到 Map 中,這些都是本地緩存;

本地緩存的特點(diǎn)是輕量、實(shí)現(xiàn)簡(jiǎn)單,生命周期隨著 JVM 的銷(xiāo)毀而結(jié)束;但是如果程序存在多個(gè)實(shí)例(程序部署多套),每個(gè)實(shí)例中的緩存不具有一致性。

2. 分布式緩存

Redis 被稱(chēng)作分布式緩存,如果程序存在多個(gè)實(shí)例,各個(gè)實(shí)例可以共用 Redis 中的緩存數(shù)據(jù),但同時(shí)因?yàn)橐肓?Redis ,那么需要保證 Redis 的高可用,架構(gòu)上更為復(fù)雜。

Redis or Memcached

Memcached 也經(jīng)常被用作緩存,也是分布式緩存的一種,那么它和 Redis 有什么區(qū)別呢?

  • Redis 支持更豐富的數(shù)據(jù)類(lèi)型,Memcache 支持簡(jiǎn)單的數(shù)據(jù)類(lèi)型String;

  • Redis 支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存到硬盤(pán)中,重啟之后把數(shù)據(jù)加載到內(nèi)存中,而 Memcache 只是把數(shù)據(jù)保存在內(nèi)存中 ;

  • Redis 目前支持集群模式,而 Memcached 沒(méi)有原生的集群模式,需要使用方自己實(shí)現(xiàn);

  • Redis 使用單線(xiàn)程的多路 IO 復(fù)用模型(Redis 在最新的 6.0 版本中開(kāi)始支持多線(xiàn)程);Memcached 使用的是多非阻塞IO復(fù)用的網(wǎng)絡(luò)模型。

最后再?gòu)?qiáng)調(diào)一點(diǎn),是否要引入 Redis?使用本地緩存還是分布式緩存?都需從項(xiàng)目的實(shí)際情況出發(fā);Redis 豐富的數(shù)據(jù)類(lèi)型和對(duì)持久化的支持,會(huì)更加適合我們的項(xiàng)目。

我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注;關(guān)注我后,可私信發(fā)送數(shù)字【1】,獲取海量學(xué)習(xí)資料。