自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ehcache、Memcache、Redis三大緩存比較

存儲(chǔ) 存儲(chǔ)軟件 Redis
在Java項(xiàng)目廣泛的使用。它是一個(gè)開源的、設(shè)計(jì)于提高在數(shù)據(jù)從RDBMS中取出來(lái)的高花費(fèi)、高延遲采取的一種緩存方案。正因?yàn)镋hcache具有健壯性(基于java開發(fā))、被認(rèn)證(具有apache 2.0 license)、充滿特色(稍后會(huì)詳細(xì)介紹),所以被用于大型復(fù)雜分布式web application的各個(gè)節(jié)點(diǎn)中。

最近項(xiàng)目組有用到這三個(gè)緩存,去各自的官方看了下,覺(jué)得還真的各有千秋!今天特意歸納下各個(gè)緩存的優(yōu)缺點(diǎn),僅供參考!

Ehcache

在Java項(xiàng)目廣泛的使用。它是一個(gè)開源的、設(shè)計(jì)于提高在數(shù)據(jù)從RDBMS中取出來(lái)的高花費(fèi)、高延遲采取的一種緩存方案。正因?yàn)镋hcache具有健壯性(基于java開發(fā))、被認(rèn)證(具有apache 2.0 license)、充滿特色(稍后會(huì)詳細(xì)介紹),所以被用于大型復(fù)雜分布式web application的各個(gè)節(jié)點(diǎn)中。

[[263260]]

什么特色?

1. 夠快

Ehcache的發(fā)行有一段時(shí)長(zhǎng)了,經(jīng)過(guò)幾年的努力和不計(jì)其數(shù)的性能測(cè)試,Ehcache終被設(shè)計(jì)于large, high concurrency systems.

2. 夠簡(jiǎn)單

開發(fā)者提供的接口非常簡(jiǎn)單明了,從Ehcache的搭建到運(yùn)用運(yùn)行僅僅需要的是你寶貴的幾分鐘。其實(shí)很多開發(fā)者都不知道自己用在用Ehcache,Ehcache被廣泛的運(yùn)用于其他的開源項(xiàng)目

比如:hibernate

3.夠袖珍

關(guān)于這點(diǎn)的特性,官方給了一個(gè)很可愛(ài)的名字small foot print ,一般Ehcache的發(fā)布版本不會(huì)到2M,V 2.2.3 才 668KB。

4. 夠輕量

核心程序僅僅依賴slf4j這一個(gè)包,沒(méi)有之一!

5.好擴(kuò)展

Ehcache提供了對(duì)大數(shù)據(jù)的內(nèi)存和硬盤的存儲(chǔ),最近版本允許多實(shí)例、保存對(duì)象高靈活性、提供LRU、LFU、FIFO淘汰算法,基礎(chǔ)屬性支持熱配置、支持的插件多

6.監(jiān)聽(tīng)器

緩存管理器監(jiān)聽(tīng)器 (CacheManagerListener)和 緩存監(jiān)聽(tīng)器(CacheEvenListener),做一些統(tǒng)計(jì)或數(shù)據(jù)一致性廣播挺好用的

如何使用?

夠簡(jiǎn)單就是Ehcache的一大特色,自然用起來(lái)just so easy!

貼一段基本使用代碼

CacheManager manager = CacheManager.newInstance("src/config/ehcache.xml");

Ehcache cache = new Cache("testCache", 5000, false, false, 5, 2);

cacheManager.addCache(cache);

  • name:緩存名稱。
  • maxElementsInMemory:緩存***個(gè)數(shù)。
  • eternal:對(duì)象是否***有效,一但設(shè)置了,timeout將不起作用。
  • timeToIdleSeconds:設(shè)置對(duì)象在失效前的允許閑置時(shí)間(單位:秒)。僅當(dāng)eternal=false對(duì)象不是***有效時(shí)使用,可選屬性,默認(rèn)值是0,也就是可閑置時(shí)間無(wú)窮大。
  • timeToLiveSeconds:設(shè)置對(duì)象在失效前允許存活時(shí)間,***時(shí)間介于創(chuàng)建時(shí)間和失效時(shí)間之間。僅當(dāng)eternal=false對(duì)象不是***有效時(shí)使用,默認(rèn)是0.,也就是對(duì)象存活時(shí) 間無(wú)窮大。
  • overflowToDisk:當(dāng)內(nèi)存中對(duì)象數(shù)量達(dá)到maxElementsInMemory時(shí),Ehcache將會(huì)對(duì)象寫到磁盤中。
  • diskSpoolBufferSizeMB:這個(gè)參數(shù)設(shè)置DiskStore(磁盤緩存)的緩存區(qū)大小。默認(rèn)是30MB。每個(gè)Cache都應(yīng)該有自己的一個(gè)緩沖區(qū)。
  • maxElementsOnDisk:硬盤***緩存?zhèn)€數(shù)。
  • diskPersistent: 是否緩存虛擬機(jī)重啟期數(shù) 據(jù) Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
  • diskExpiryThreadIntervalSeconds:磁盤失效線程運(yùn)行時(shí)間間隔,默認(rèn)是120秒。
  • memoryStoreEvictionPolicy:當(dāng)達(dá)到maxElementsInMemory限制時(shí),Ehcache將會(huì)根據(jù)指定的策略去清理內(nèi)存。默認(rèn)策略是LRU。你可以設(shè)置為 FIFO或是LFU。
  • clearOnFlush:內(nèi)存數(shù)量***時(shí)是否清除。

memcache

memcache 是一種高性能、分布式對(duì)象緩存系統(tǒng),最初設(shè)計(jì)于緩解動(dòng)態(tài)網(wǎng)站數(shù)據(jù)庫(kù)加載數(shù)據(jù)的延遲性,你可以把它想象成一個(gè)大的內(nèi)存HashTable,就是一個(gè)key-value鍵值緩存。Danga Interactive為了LiveJournal所發(fā)展的,以BSD license釋放的一套開放源代碼軟件。

1.依賴

memcache C語(yǔ)言所編寫,依賴于最近版本的GCC和libevent。GCC是它的編譯器,同事基于libevent做socket io。在安裝memcache時(shí)保證你的系統(tǒng)同事具備有這兩個(gè)環(huán)境。

2.多線程支持

memcache支持多個(gè)cpu同時(shí)工作,在memcache安裝文件下有個(gè)叫threads.txt中特別說(shuō)明,By default, memcached is compiled as a single-threaded application.默認(rèn)是單線程編譯安裝,如果你需要多線程則需要修改./configure --enable-threads,為了支持多核系統(tǒng),前提是你的系統(tǒng)必須具有多線程工作模式。開啟多線程工作的線程數(shù)默認(rèn)是4,如果線程數(shù)超過(guò)cpu數(shù) 容易發(fā)生操作死鎖的概率。結(jié)合自己業(yè)務(wù)模式選擇才能做到物盡其用。

3.高性能

通過(guò)libevent完成socket 的通訊,理論上性能的瓶頸落在網(wǎng)卡上。

簡(jiǎn)單安裝:

1.分別把memcached和libevent下載回來(lái),放到 /tmp 目錄下:

  1. # cd /tmp  
  2. # wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz  
  3. # wget http://www.monkey.org/~provos/libevent-1.2.tar.gz 

 

ehcache、memcache、redis三大緩存比較

2.先安裝libevent:

  1. # tar zxvf libevent-1.2.tar.gz 
  2. # cd libevent-1.2 
  3. # ./configure -prefix=/usr  
  4. # make (如果遇到提示gcc 沒(méi)有安裝則先安裝gcc)  
  5. # make install 

3.測(cè)試libevent是否安裝成功:

  1. # ls -al /usr/lib | grep libevent 
  2. lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3 
  3. -rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3 
  4. -rw-r-r- 1 root root 454156 11?? 12 17:38 libevent.a 
  5. -rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la 
  6. lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3 

還不錯(cuò),都安裝上了。

4.安裝memcached,同時(shí)需要安裝中指定libevent的安裝位置:

  1. # cd /tmp  
  2. # tar zxvf memcached-1.2.0.tar.gz  
  3. # cd memcached-1.2.0  
  4. # ./configure -with-libevent=/usr  
  5. # make  
  6. # make install 

如果中間出現(xiàn)報(bào)錯(cuò),請(qǐng)仔細(xì)檢查錯(cuò)誤信息,按照錯(cuò)誤信息來(lái)配置或者增加相應(yīng)的庫(kù)或者路徑。

安裝完成后會(huì)把memcached放到 /usr/local/bin/memcached ,

5.測(cè)試是否成功安裝memcached:

  1. # ls -al /usr/local/bin/mem*  
  2. -rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached  
  3. -rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug 

啟動(dòng)memcache服務(wù)

啟動(dòng)Memcached服務(wù):

1.啟動(dòng)Memcache的服務(wù)器端:

  1. # /usr/local/bin/memcached -d -m 8096 -u root -l 192.168.77.105 -p 12000 -c 256 -P /tmp/memcached.pid 
  • -d選項(xiàng)是啟動(dòng)一個(gè)守護(hù)進(jìn)程,
  • -m是分配給Memcache使用的內(nèi)存數(shù)量,單位是MB,我這里是8096MB,
  • -u是運(yùn)行Memcache的用戶,我這里是root,
  • -l是監(jiān)聽(tīng)的服務(wù)器IP地址,如果有多個(gè)地址的話,我這里指定了服務(wù)器的IP地址192.168.77.105,
  • -p是設(shè)置Memcache監(jiān)聽(tīng)的端口,我這里設(shè)置了12000,***是1024以上的端口,
  • -c選項(xiàng)是***運(yùn)行的并發(fā)連接數(shù),默認(rèn)是1024,我這里設(shè)置了256,按照你服務(wù)器的負(fù)載量來(lái)設(shè)定,
  • -P是設(shè)置保存Memcache的pid文件,我這里是保存在 /tmp/memcached.pid,

2.如果要結(jié)束Memcache進(jìn)程,執(zhí)行:

# cat /tmp/memcached.pid 或者 ps -aux | grep memcache (找到對(duì)應(yīng)的進(jìn)程id號(hào))

# kill 進(jìn)程id號(hào)

也可以啟動(dòng)多個(gè)守護(hù)進(jìn)程,不過(guò)端口不能重復(fù)。

memcache 的連接

telnet ip port

注意連接之前需要再memcache服務(wù)端把memcache的防火墻規(guī)則加上

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

重新加載防火墻規(guī)則

service iptables restart

OK ,現(xiàn)在應(yīng)該就可以連上memcache了

在客戶端輸入stats 查看memcache的狀態(tài)信息

 

 

ehcache、memcache、redis三大緩存比較

 

 

  • pid memcache服務(wù)器的進(jìn)程ID
  • uptime 服務(wù)器已經(jīng)運(yùn)行的秒數(shù)
  • time 服務(wù)器當(dāng)前的unix時(shí)間戳
  • version memcache版本
  • pointer_size 當(dāng)前操作系統(tǒng)的指針大小(32位系統(tǒng)一般是32bit)
  • rusage_user 進(jìn)程的累計(jì)用戶時(shí)間
  • rusage_system 進(jìn)程的累計(jì)系統(tǒng)時(shí)間
  • curr_items 服務(wù)器當(dāng)前存儲(chǔ)的items數(shù)量
  • total_items 從服務(wù)器啟動(dòng)以后存儲(chǔ)的items總數(shù)量
  • bytes 當(dāng)前服務(wù)器存儲(chǔ)items占用的字節(jié)數(shù)
  • curr_connections 當(dāng)前打開著的連接數(shù)
  • total_connections 從服務(wù)器啟動(dòng)以后曾經(jīng)打開過(guò)的連接數(shù)
  • connection_structures 服務(wù)器分配的連接構(gòu)造數(shù)
  • cmd_get get命令 (獲取)總請(qǐng)求次數(shù)
  • cmd_set set命令 (保存)總請(qǐng)求次數(shù)
  • get_hits 總***次數(shù)
  • get_misses 總未***次數(shù)
  • evictions 為獲取空閑內(nèi)存而刪除的items數(shù)(分配給memcache的空間用滿后需要?jiǎng)h除舊的items來(lái)得到空間分配給新的items)
  • bytes_read 讀取字節(jié)數(shù)(請(qǐng)求字節(jié)數(shù))
  • bytes_written 總發(fā)送字節(jié)數(shù)(結(jié)果字節(jié)數(shù))
  • limit_maxbytes 分配給memcache的內(nèi)存大小(字節(jié))
  • threads 當(dāng)前線程數(shù)

redis

Redis是 在memcache之后編寫的,大家經(jīng)常把這兩者做比較,如果說(shuō)它是個(gè)key-value store 的話但是它具有豐富的數(shù)據(jù)類型,我想暫時(shí)把它叫做緩存數(shù)據(jù)流中心,就像現(xiàn)在物流中心那樣,order、package、store、 classification、distribute、end。現(xiàn)在還很流行的LAMP PHP架構(gòu) 不知道和 redis+MySQL 或者 redis + MongoDB的性能比較(聽(tīng)群里的人說(shuō)mongodb分片不穩(wěn)定)。

先說(shuō)說(shuō)reidis的特性

1. 支持持久化

redis的本地持久化支持兩種方式:RDB和AOF。RDB 在redis.conf配置文件里配置持久化觸發(fā)器,AOF指的是redis沒(méi)增加一條記錄都會(huì)保存到持久化文件中(保存的是這條記錄的生成命令),如果 不是用redis做DB用的話還會(huì)不要開AOF ,數(shù)據(jù)太龐大了,重啟恢復(fù)的時(shí)候是一個(gè)巨大的工程!

2.豐富的數(shù)據(jù)類型

redis 支持 String 、Lists、sets、sorted sets、hashes 多種數(shù)據(jù)類型,新浪微博會(huì)使用redis做nosql主要也是它具有這些類型,時(shí)間排序、職能排序、我的微博、發(fā)給我的這些功能List 和 sorted set

的強(qiáng)大操作功能息息相關(guān)

3.高性能

這點(diǎn)跟memcache很想象,內(nèi)存操作的級(jí)別是毫秒級(jí)的比硬盤操作秒級(jí)操作自然高效不少,較少了磁頭尋道、數(shù)據(jù)讀取、頁(yè)面交換這些高開銷的操作!這也是NOSQL冒出來(lái)的原因吧,應(yīng)該是高性能

是基于RDBMS的衍生產(chǎn)品,雖然RDBMS也具有緩存結(jié)構(gòu),但是始終在app層面不是我們想要的那么操控的。

4.replication

redis提供主從復(fù)制方案,跟mysql一樣增量復(fù)制而且復(fù)制的實(shí)現(xiàn)都很相似,這個(gè)復(fù)制跟AOF有點(diǎn)類似復(fù)制的是新增記錄命令,主庫(kù)新增記錄將新增腳本 發(fā)送給從庫(kù),從庫(kù)根據(jù)腳本生成記錄,這個(gè)過(guò)程非常快,就看網(wǎng)絡(luò)了,一般主從都是在同一個(gè)局域網(wǎng),所以可以說(shuō)redis的主從近似及時(shí)同步,同事它還支持一 主多從,動(dòng)態(tài)添加從庫(kù),從庫(kù)數(shù)量沒(méi)有限制。 主從庫(kù)搭建,我覺(jué)得還是采用網(wǎng)狀模式,如果使用鏈?zhǔn)?master-slave-slave-slave-slave·····)如果***個(gè)slave出 現(xiàn)宕機(jī)重啟,首先從master 接收 數(shù)據(jù)恢復(fù)腳本,這個(gè)是阻塞的,如果主庫(kù)數(shù)據(jù)幾TB的情況恢復(fù)過(guò)程得花上一段時(shí)間,在這個(gè)過(guò)程中其他的slave就無(wú)法和主庫(kù)同步了。

5.更新快

這點(diǎn)好像從我接觸到redis到目前為止 已經(jīng)發(fā)了大版本就4個(gè),小版本沒(méi)算過(guò)。redis作者是個(gè)非常積極的人,無(wú)論是郵件提問(wèn)還是論壇發(fā)帖,他都能及時(shí)耐心的為你解答,維護(hù)度很高。有人維護(hù)的 話,讓我們用的也省心和放心。目前作者對(duì)redis 的主導(dǎo)開發(fā)方向是redis的集群方向。

redis的安裝

redis的安裝其實(shí)還是挺簡(jiǎn)單的,總的來(lái)說(shuō)就三步:下載tar包,解壓tar包,安裝。

不過(guò)最近我在2.6.7后用centos 5.5 32bit 時(shí)碰到一個(gè)安裝問(wèn)題,下面我就用圖片分享下安裝過(guò)程碰到的問(wèn)題,在redis 文件夾內(nèi)執(zhí)行make時(shí)有個(gè)如下的錯(cuò) undefined reference to '__sync_add_and_fetch_4'

ehcache、memcache、redis三大緩存比較

 

上網(wǎng)找了了好多***在 https://github.com/antirez/redis/issues/736 找到解決方案,write CFLAGS= -march=i686 on src/Makefile head!

ehcache、memcache、redis三大緩存比較

 

記得要把剛安裝失敗的文件刪除,重新解壓新的安裝文件,修改Makefile文件,再make安裝。就不會(huì)發(fā)現(xiàn)原來(lái)那個(gè)錯(cuò)誤了

關(guān)于redis的一些屬性注釋和基本類型操作在上一篇redis 的開胃菜有詳細(xì)的說(shuō)明,這里就不再重復(fù)累贅了(實(shí)質(zhì)是想偷懶 ,哈哈!)

***,把memcache和redis放在一起不得不會(huì)讓人想到兩者的比較,誰(shuí)快誰(shuí)好用啊,群里面已經(jīng)為這個(gè)事打架很久了,我就把我看到的在這里跟大家分享下。

在別人發(fā)了一個(gè)memcache性能比redis好很多后,redis 作者 antirez 發(fā)表了一篇博文,主要是說(shuō)到如何給redis 和 memcache 做壓力測(cè)試,文中講到有個(gè)人說(shuō)許多開源軟件都應(yīng)該丟進(jìn)廁所,因?yàn)樗麄兊膲毫y(cè)試腳本太2了,作者對(duì)這個(gè)說(shuō)明了一番。redis vs memcache is definitely an apple to apple comparison。 呵呵,很明確吧,兩者的比較是不是有點(diǎn)雞蛋挑骨頭的效果,作者在相同的運(yùn)行環(huán)境做了三次測(cè)試取多好的值,得到的結(jié)果如下圖:

ehcache、memcache、redis三大緩存比較

 

需要申明的是此次測(cè)試在單核心處理的過(guò)程的數(shù)據(jù),memcache是支持多核心多線程操作的(默認(rèn)沒(méi)開)所以在默認(rèn)情況下上圖具有參考意義,若然則 memcache快于redis。那為什么redis不支持多線程多核心處理呢?作者也發(fā)表了一下自己的看法,首先是多線程不變于bug的修復(fù),其實(shí)是不 易軟件的擴(kuò)展,還有數(shù)據(jù)一致性問(wèn)題因?yàn)閞edis所有的操作都是原子操作,作者用到一個(gè)詞nightmare 噩夢(mèng),呵呵! 當(dāng)然不支持多線程操作,肯定也有他的弊端的比如性能想必必然差,作者從2.2版本后專注redis cluster的方向開發(fā)來(lái)緩解其性能上的弊端,說(shuō)白了就是縱向不行,橫向提高。

應(yīng)用場(chǎng)景:

ehcache直接在jvm虛擬機(jī)中緩存,速度快,效率高;但是緩存共享麻煩,集群分布式應(yīng)用不方便。

redis是通過(guò)socket訪問(wèn)到緩存服務(wù),效率比ecache低,比數(shù)據(jù)庫(kù)要快很多,處理集群和分布式緩存方便,有成熟的方案。

如果是單個(gè)應(yīng)用或者對(duì)緩存訪問(wèn)要求很高的應(yīng)用,用ehcache。

如果是大型系統(tǒng),存在緩存共享、分布式部署、緩存內(nèi)容很大的,建議用redis。

補(bǔ)充下:ehcache也有緩存共享方案,不過(guò)是通過(guò)RMI或者Jgroup多播方式進(jìn)行廣播緩存通知更新,緩存共享復(fù)雜,維護(hù)不方便;簡(jiǎn)單的共享可以,但是涉及到緩存恢復(fù),大數(shù)據(jù)緩存,則不合適redis和memcached相比的獨(dú)特之處:

1、redis可以用來(lái)做存儲(chǔ)(storage),而memcached是用來(lái)做緩存(cache)這個(gè)特點(diǎn)主要因?yàn)槠溆谐志没δ?/p>

2、redis中存儲(chǔ)的數(shù)據(jù)有多種結(jié)構(gòu),而memcached存儲(chǔ)的數(shù)據(jù)只有一種類型“字符串”

第二種理解:

***:兩者之間的介紹

Redis:屬于獨(dú)立的運(yùn)行程序,需要單獨(dú)安裝后,使用JAVA中的Jedis來(lái)操縱。因?yàn)樗仟?dú)立,所以如果你寫個(gè)單元測(cè)試程序,放一些數(shù)據(jù)在Redis中,然后又寫一個(gè)程序去拿數(shù)據(jù),那么是可以拿到這個(gè)數(shù)據(jù)的。,

ehcache:與Redis明顯不同,它與java程序是綁在一起的,java程序活著,它就活著。譬如,寫一個(gè)獨(dú)立程序放數(shù)據(jù),再寫一個(gè)獨(dú)立程序拿數(shù)據(jù),那么是拿不到數(shù)據(jù)的。只能在獨(dú)立程序中才能拿到數(shù)據(jù)。

第二:使用及各種配置:

兩者都可以集群:

1.Redis可以做主從來(lái)集群,例如,在A電腦上裝個(gè)Redis,作為主庫(kù);在其他電腦上裝Redis,作為從庫(kù);這樣主庫(kù)擁有讀和寫的功能,而從庫(kù)只擁有讀的功能。每次主庫(kù)的數(shù)據(jù)都會(huì)同步到從庫(kù)中。

1.默認(rèn)方式啟動(dòng)

  1. Linux下使用Redis  
  2. 安裝:從官網(wǎng)上下載tar.gz格式的包,然后使用tar zxvf redis-2.8.24.tar.gz命令解壓,然后進(jìn)入Redis文件夾目錄下的src目錄,使用make編譯一下  
  3.     
  4. 1.開啟:進(jìn)入/usr/local/redis-3.2.1/src  
  5. 然后./redis-server  

2.如果我們想修改端口,設(shè)置密碼:那么得修改配置文件的redis.conf

port 6379 //端口修改

requirepass redis123 //設(shè)置密碼 redis123為密碼

配置主從:主庫(kù)的配置文件不用修改,從庫(kù)的配置文件需要修改,因?yàn)閺膸?kù)需要綁定主庫(kù),以便可以獲取主庫(kù)的數(shù)據(jù)

slaveof 192.168.1.100 6379 //主庫(kù)的IP地址和端口號(hào)

masterauth redis123 //主庫(kù)設(shè)定的密碼

3.要讓配置文件的屬性生效,那么啟動(dòng)的redis的時(shí)候,要將配置文件加上去

進(jìn)入/usr/local/redis-3.2.1/src

然后 ./redis-server redis.conf

那么將成功的啟動(dòng)redis,如果沒(méi)有加入配置的話,按照普通方式啟動(dòng)的話,端口仍然還是6379.

4.客戶端連接遠(yuǎn)程的Redis

***步:在遠(yuǎn)程端處設(shè)置密碼:config set requirepass 123 //123為密碼

第二步:可以在客戶端登錄 redis-cli.exe -h 114.215.125.42 -p 6379

第三步:認(rèn)證:auth 123 //123為密碼

本地端設(shè)置密碼后,要使用密碼登錄;如果Redis重啟的話,密碼需要重新設(shè)置

5.主從配置后,為保證主庫(kù)寫的能力,一般不在主庫(kù)做持久化,而是在從庫(kù)做持久化:

主庫(kù)配置:

將save注釋,不使用rdb

# save 900 1

# save 300 10

# save 60 10000

appendonly no 不使用aof

從庫(kù)配置:

save 900 1

save 300 10

save 60 10000

appendonly yes

這樣做的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):保證了主庫(kù)寫的能力。

缺點(diǎn):主庫(kù)掛掉后,重啟主庫(kù),然后進(jìn)行***次寫的動(dòng)作后,主庫(kù)會(huì)先生成rdb文件,然后傳輸給從庫(kù),從而覆蓋掉從庫(kù)原先的rdb文件,造成數(shù)據(jù)丟失。但是第二次寫的時(shí)候,主庫(kù)會(huì)以快照方式直接傳數(shù)據(jù)給從庫(kù),不會(huì)重新生成rdb文件。

解決方案:先復(fù)制從庫(kù)中的數(shù)據(jù)到主庫(kù)后,再啟動(dòng)主庫(kù)。

使用:

引入jedis包

  1. <dependency>   
  2.         <groupId>redis.clients</groupId>   
  3.         <artifactId>jedis</artifactId>   
  4.         <version>2.7.3</version>   
  5.     </dependency>   

 

簡(jiǎn)單的寫個(gè)類玩玩吧

  1. public class RedisMain {   
  2.            
  3.            
  4.         public static void main(String [] str)   
  5.         {   
  6.                
  7.              Jedis jedis = new Jedis("114.215.125.42",6379);   
  8.              jedis.auth("123");     //密碼認(rèn)證   
  9.               System.out.println("Connection to server sucessfully");   
  10.               //查看服務(wù)是否運(yùn)行   
  11.               jedis.set("user","namess");   
  12.              // System.out.println("Server is running: "+jedis.ping());   
  13.               System.out.println(jedis.get("user").toString());   
  14.               jedis.set("user","name");   
  15.               System.out.println(jedis.get("user"));   
  16.                  
  17.        
  18.         }   
  19.        
  20.     }   

 

Redis完畢

下面說(shuō)說(shuō)Ehcache:

Ehcache的使用:

1.首先引入包

  1. <dependency>   
  2.                <groupId>net.sf.ehcache</groupId>   
  3.                <artifactId>ehcache-core</artifactId>   
  4.                <version>2.6.6</version>   
  5.            </dependency>   
  6.         
  7.            <dependency>   
  8.                <groupId>org.slf4j</groupId>   
  9.                <artifactId>slf4j-log4j12</artifactId>   
  10.                <version>1.6.6</version>   
  11.            </dependency>   

 

2.創(chuàng)建一個(gè)ehcache.xml文件,里面配置cache的信息,這個(gè)配置是包含了集群的配置:與192.168.93.129:40001的 機(jī)器集群了:Ip為192.168.93.129機(jī)子的配置要將rmiUrls對(duì)應(yīng)的數(shù)據(jù)改為這個(gè)配置文件的機(jī)子的IP地址,和對(duì)應(yīng)的緩存名字

  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  2.        xsi:noNamespaceSchemaLocation="ehcache.xsd">   
  3.         <cacheManagerPeerProviderFactory    
  4.        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"   
  5.     properties="peerDiscovery=manual,rmiUrls=//192.168.93.129:40001/demoCache"/>           <!--另一臺(tái)機(jī)子的ip緩存信息-->   
  6.     <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"   
  7.     properties="hostName=localhost,port=40001,socketTimeoutMillis=2000" />                  <!--hostName代表本機(jī)子的ip-->      
  8.       <diskStore path="java.io.tmpdir"/>   
  9.       <defaultCache   
  10.         maxElementsInMemory="10000"   
  11.         maxElementsOnDisk="0"   
  12.         eternal="true"   
  13.         overflowToDisk="true"   
  14.         diskPersistent="false"   
  15.         timeToIdleSeconds="0"   
  16.         timeToLiveSeconds="0"   
  17.         diskSpoolBufferSizeMB="50"   
  18.         diskExpiryThreadIntervalSeconds="120"   
  19.         memoryStoreEvictionPolicy="LFU"   
  20.         >   
  21.          <cacheEventListenerFactory     
  22.                     class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>                 
  23.         </defaultCache>   
  24.       <cache name="demoCache"   
  25.         maxElementsInMemory="100"   
  26.         maxElementsOnDisk="0"   
  27.         eternal="false"   
  28.         overflowToDisk="false"   
  29.         diskPersistent="false"   
  30.         timeToIdleSeconds="119"   
  31.         timeToLiveSeconds="119"   
  32.         diskSpoolBufferSizeMB="50"   
  33.         diskExpiryThreadIntervalSeconds="120"   
  34.         memoryStoreEvictionPolicy="FIFO"   
  35.         >   
  36.         <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>          <!--監(jiān)聽(tīng)這個(gè)cache-->   
  37.         </cache>   
  38.     </ehcache>   

 

配置完后寫代碼:

放數(shù)據(jù):

  1. @RequestMapping("/testehcache.do")   
  2.         public void testehcache(HttpServletResponse response) throws IOException   
  3.         {   
  4.             URL url = getClass().getResource("ehcache.xml");    
  5.              CacheManager singletonmanager = CacheManager.create(url);   
  6.             Cache cache = singletonmanager.getCache("demoCache");   
  7.             //使用緩存   
  8.             Element element = new Element("key1""value1");   
  9.             cache.put(element);   
  10.             cache.put(new Element("key2""value2"));   
  11.               
  12.             response.getWriter().println("我存放了數(shù)據(jù)");   
  13.         }   

 

拿數(shù)據(jù):

  1. @RequestMapping("/getcache.do")   
  2.     public void getcache(HttpServletResponse response) throws IOException   
  3.     {   
  4.         CacheManager singletonmanager = CacheManager.create();    
  5.         Cache cache = singletonmanager.getCache("demoCache");   
  6.         String one=cache.get("key1").getObjectValue().toString();   
  7.         String two=cache.get("key2").getObjectValue().toString();   
  8.         response.getWriter().println(one+two);   
  9.     }  

 

配置集群后,A機(jī)器放數(shù)據(jù),在B機(jī)器上能拿到數(shù)據(jù),B機(jī)器放數(shù)據(jù),A機(jī)器也可以拿到數(shù)據(jù)

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-02-14 07:47:20

SpringBootEhcache

2018-11-15 12:12:31

Memcache緩存系統(tǒng)

2023-10-12 08:00:48

2018-07-19 09:43:41

MemcacheRedis緩存

2022-03-15 08:22:31

Ehcachespring緩存

2018-05-15 10:54:33

NginxRedisEhcache

2025-02-04 17:40:44

2022-06-21 13:48:30

Redis緩存

2014-12-31 09:56:29

Ehcache

2012-02-01 15:53:03

JavaEhcache

2020-08-27 08:17:05

緩存高并發(fā)系統(tǒng)

2014-12-31 09:45:48

EhCache

2011-11-16 10:46:33

Ehcache

2021-02-17 21:04:03

Ehcache緩存Java

2021-09-26 05:02:00

緩存Ehcache用法

2020-12-23 15:42:42

大數(shù)據(jù)大數(shù)據(jù)技術(shù)大數(shù)據(jù)框架

2018-12-13 12:43:07

Redis緩存穿透

2024-04-18 11:43:28

緩存數(shù)據(jù)庫(kù)Redis

2021-01-31 18:58:31

redismemcache源碼

2018-06-24 09:12:33

redismemcache源碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)