當前位置:首頁 » 文件管理 » 單系統緩存改成集群

單系統緩存改成集群

發布時間: 2022-08-29 19:24:45

java幾種緩存技術介紹說明

1、TreeCache / JBossCache

JBossCache是一個復制的事務處理緩存,它允許你緩存企業級應用數據來更好的改善性能。緩存數據被自動復制,讓你輕松進行JBoss伺服器之間 的集群工作。JBossCache能夠通過JBoss應用服務或其他J2EE容器來運行一個MBean服務,當然,它也能獨立運行。

2、WhirlyCache

Whirlycache是一個快速的、可配置的、存在於內存中的對象的緩存。它能夠通過緩存對象來加快網站或應用程序的速度,否則就必須通過查詢資料庫或其他代價較高的處理程序來建立。

3、SwarmCache

SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。

4、JCache

JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。

5、ShiftOne

ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。

⑵ 如何設置系統緩存和虛擬內存

建議不要修改這個,用處不大。
首先,一般優化來說,虛擬內存是物理內存的2倍比較合適。我原來也是1G內存,後來發現佔用太多了虛擬內存硬碟了,減少到512M內存使用了。如果你機器不是用來跑大軟體,那麼多內存也用不上的。
最好就是windows自己管理虛擬內存。

linux redis 怎麼設置集群

redis.conf 配置文件說明
daemonize no --是否把redis-server啟動在後台,默認是「否」。若改成yes
pidfile /var/run/redis.pid --當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定

prot 6379 --指定Redis監聽埠,默認埠為6379
bind 10.252.1.14 ---綁定的主機地址
timeout 0 ---當 客戶端閑置多長時間後關閉連接,如果指定為0,表示關閉該功能
loglevel notice ---指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認為verbose
logfile /mnt/redis/log/redis.log --日誌記錄方式,默認為標准輸出,如果配置Redis為守護進程方式運行,而這里又配置為日誌記錄方式為標准輸出,則日誌將會發送給/dev/null
databases 16 設置資料庫的數量,默認資料庫為0,可以使用SELECT <dbid>命令在連接上指定資料庫id
save 900 1 指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
Redis默認配置文件中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒(15分鍾)內有1個更改,300秒(5分鍾)內有10個更改以及60秒內有10000個更改
rdbcompression yes --指定存儲至本地資料庫時是否壓縮數據,默認為yes,Redis採用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致資料庫文件變的巨大
dbfilename mp.rdb --指定本地資料庫文件名,默認值為mp.rdb
dir /mnt/redis/data/ --指定本地資料庫存放目錄
slaveof <masterip> <masterport> -- 設置當本機為slav服務時,設置master服務的IP地址及埠,在Redis啟動時,它會自動從master進行數據同步
masterauth <master-password> --當master服務設置了密碼保護時,slav服務連接master的密碼
requirepass foobared --設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,默認關閉
maxclients 128 --- 設置同一時間最大客戶端連接數,默認無限制

maxmemory <bytes> ---指定Redis最大內存限制,Redis在啟動時會把數據載入到內存中,達到最大內存後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap區

appendonly no --指定是否在每次更新操作後進行日誌記錄,Redis在默認情況下是非同步的把數據寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為 redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認為no
appendfilename appendonly.aof ---指定更新日誌文件名,默認為appendonly.aof
appendfsync everysec ---指定更新日誌條件,共有3個可選值: no:表示等操作系統進行數據緩存同步到磁碟(快) . always:表示每次更新操作後手動調用fsync()將數據寫到磁碟(慢,安全). everysec:表示每秒同步一次(折衷,默認值)
vm-enabled no ---指定是否啟用虛擬內存機制,默認值為no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁碟上,訪問多的頁面由磁碟自動換出到內存中(在後面的文章我會仔細分析Redis的VM機制)
vm-swap-file /tmp/redis.swap ---虛擬內存文件路徑,默認值為/tmp/redis.swap,不可多個Redis實例共享
vm-max-memory 0 將所有大於vm-max-memory的數據存入虛擬內存,無論vm-max-memory設置多小,所有索引數據都是內存存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置為0的時候,其實是所有value都存在於磁碟。默認值為0
vm-page-size 32 ---Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置為32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用默認值
vm-pages 134217728 ---設置swap文件中的page數量,由於頁表(一種表示頁面空閑或使用的bitmap)是在放在內存中的,,在磁碟上每8個pages將消耗1byte的內存。
vm-max-threads 4 ---設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置為0,那麼所有對swap文件的操作都是串列的,可能會造成比較長時間的延遲。默認值為4
glueoutputbuf yes ---設置在向客戶端應答時,是否把較小的包合並為一個包發送,默認為開啟
hash-max-zipmap-entries 64 ---指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希演算法
hash-max-zipmap-value 512 ---指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希演算法
activerehashing yes ---指定是否激活重置哈希,默認為開啟(後面在介紹Redis的哈希演算法時具體介紹)
include /path/to/local.conf ---指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件

主伺服器配置
mkdir /mnt/redis/redisDB
mkdir /mnt/redis/redisLog
vi /etc/redis/redis.conf
dbfilename /mnt/redisDB/mp.rdb --修改磁碟上保存資料庫文件的位置
loglevel warning --修改日誌級別
logfile /mnt/redis/redisLog/redis.log --修改日誌文件的位置

從機配置
cp redis.conf /etc/redis_slave.conf
vim redis_slave.conf
修改其中的一行
配置master的ip地址和redis-server的埠。
slaveof <10.45.39.39> <6379> --設置主從伺服器的主伺服器的地址和埠

daemonize no --是否把redis-server啟動在後台,默認是「否」。若改成yes,會生成一個pid文件。
主從測試
主機: redis-server /etc/redis.conf
從機: redis-server /etc/redis_slave.conf
3.1 測試
在主機上啟動redis客戶端:
ssh 192.168.1.1
redis-cli
>set k1 v1
>get k1
"v1"
.登陸從機,並在從機上啟動客戶端:
ssh 192.168.1.2
redis-cli
>get k1
"v1"
可以看到redis已經把數據同步過來了。

⑷ 如何對區域網內的多台Linux進行集群化管理

它非常適合用來快速配置一個集群中的所有運行相同服務和具備相同配置的計算機節點。現在有大量的開源管理工具,都可以實現這樣的管理,比如dsh、SUSE Manager等。下面是用ClusterSSH管理多台Linux伺服器的具體過程。
如果你是一名Linux系統管理員,那你每天一定會和許許多多的機器打交道,因為你要定期監測和維護這些機器,如一批Web伺服器,如果你要同時在多台機器上敲入相同的命令,你可能會通過SSH登錄,然後逐台敲入,如果使用ClusterSSH,可以為你節省不少類似的工作時間。
ClusterSSH是用Tk/Perl包裝XTerm和SSH後形成的新工具,就其本身而言,它可以運行在任何兼容POSIX的操作系統上,我曾經在Linux,Solaris和Mac OS X上運行過它,它需要Perl庫Tk(在Debian或Ubuntu上就是perl-tk)和X11::Protocol(在Debian或Ubuntu上就是libx11-protocol-perl),此外,xterm和OpenSSH是必不可少的。
安裝在Debian或Ubuntu上安裝ClusterSSH是相當簡單的,只需要敲入sudo apt-get install clusterssh就可以安裝好,至於依賴包你也不必擔心,一切都會為你裝好的,它也提供了適合Fedora的rpm包,在FreeBSD上可通過port系統安裝,還為Mac OS X准備了MacPort版本,因此你可以在你的蘋果電腦上安裝ClusterSSH,當然,如果你是極客,也可以下載源代碼自己編譯
配置可以通過ClusterSSH的全局配置文件/etc/clusters,或用戶home目錄下的。csshrc文件來配置它,我喜歡用戶級的配置方式,這樣同一個系統中的不同用戶可以根據自己的喜好進行配置,ClusterSSH定義了一個「cluster」機器組,你可以通過一個界面來控制這個組中的所有機器,在配置文件的頂端「clusters」部分,你可以詳盡地列出你的集群,然後用獨立的段落來描述每個集群。
例如,假設我有兩個集群,每個集群由兩台機器組成,「Cluster1」由「Test1」和「Test2」兩台機器組成,「Cluster2」由「Test3」和「Test4」兩台機器組成,~.csshrc(或/etc/clusters)配置文件的內容看起來應該是:
clusters = cluster1 cluster2
cluster1 = test1 test2
cluster2 = test3 test4你也可以創建中間集群(包含其它集群的集群),如果你想創建一個名叫「all」的集群包含所有的機器,有兩種實現手段,首先,你可以創建一個包含所有機器的集群,如:
clusters = cluster1 cluster2 all
cluster1 = test1 test2
cluster2 = test3 test4
all = test1 test2 test3 test4但我更喜歡的方法是使用一個包含其它集群的中間集群:
clusters = cluster1 cluster2 allcluster1 = test1 test2

⑸ 怎麼把系統緩存設到D盤怎麼把D盤的內存轉到C盤

C盤和D盤是電腦的概念,電腦的盤是硬碟,不是內存。移動的操作是非常簡單的。

1、到D盤,找到要移動的文件,按鍵盤ctrl+X。
2、到C盤,找到目標文件夾,點擊進入,按鍵盤的ctrl+V。文件就過去了。
3、也可以用菜單來操作。到D盤找到文件,點工具欄里的剪切,或右鍵點擊它選剪切,然後到目標文件夾里,在空白處,點工具欄里的粘貼,或右鍵選粘貼。

剪切和粘貼,這是電腦的最基本的操作。

⑹ Redis集群方案應該怎麼做

通常,為了提高網站響應速度,總是把熱點數據保存在內存中而不是直接從後端資料庫中讀取。Redis是一個很好的Cache工具。大型網站應用,熱點數據量往往巨大,幾十G上百G是很正常的事兒,在這種情況下,如何正確架構Redis呢?
首先,無論我們是使用自己的物理主機,還是使用雲服務主機,內存資源往往是有限制的,scale up不是一個好辦法,我們需要scale out橫向可伸縮擴展,這需要由多台主機協同提供服務,即分布式多個Redis實例協同運行。
其次,目前硬體資源成本降低,多核CPU,幾十G內存的主機很普遍,對於主進程是單線程工作的Redis,只運行一個實例就顯得有些浪費。同時,管理一個巨大內存不如管理相對較小的內存高效。因此,實際使用中,通常一台機器上同時跑多個Redis實例。
方案
1.Redis官方集群方案 Redis Cluster

Redis Cluster是一種伺服器Sharding技術,3.0版本開始正式提供。
Redis
Cluster中,Sharding採用slot(槽)的概念,一共分成16384個槽,這有點兒類似前面講的pre
sharding思路。對於每個進入Redis的鍵值對,根據key進行散列,分配到這16384個slot中的某一個中。使用的hash演算法也比較簡
單,就是CRC16後16384取模。
Redis集群中的每個node(節點)負責分攤這16384個slot中的一部分,也就是說,每個
slot都對應一個node負責處理。當動態添加或減少node節點時,需要將16384個槽做個再分配,槽中的鍵值也要遷移。當然,這一過程,在目前實
現中,還處於半自動狀態,需要人工介入。
Redis集群,要保證16384個槽對應的node都正常工作,如果某個node發生故障,那它負責的slots也就失效,整個集群將不能工作。

了增加集群的可訪問性,官方推薦的方案是將node配置成主從結構,即一個master主節點,掛n個slave從節點。這時,如果主節點失
效,Redis Cluster會根據選舉演算法從slave節點中選擇一個上升為主節點,整個集群繼續對外提供服務。這非常類似前篇文章提到的Redis
Sharding場景下伺服器節點通過Sentinel監控架構成主從結構,只是Redis Cluster本身提供了故障轉移容錯的能力。
Redis
Cluster的新節點識別能力、故障判斷及故障轉移能力是通過集群中的每個node都在和其它nodes進行通信,這被稱為集群匯流排(cluster

bus)。它們使用特殊的埠號,即對外服務埠號加10000。例如如果某個node的埠號是6379,那麼它與其它nodes通信的埠號是
16379。nodes之間的通信採用特殊的二進制協議。
對客戶端來說,整個cluster被看做是一個整體,客戶端可以連接任意一個
node進行操作,就像操作單一Redis實例一樣,當客戶端操作的key沒有分配到該node上時,Redis會返回轉向指令,指向正確的node,這
有點兒像瀏覽器頁面的302 redirect跳轉。
Redis Cluster是Redis 3.0以後才正式推出,時間較晚,目前能證明在大規模生產環境下成功的案例還不是很多,需要時間檢驗。

2.Redis Sharding集群

Redis 3正式推出了官方集群技術,解決了多Redis實例協同服務問題。Redis Cluster可以說是服務端Sharding分片技術的體現,即將鍵值按照一定演算法合理分配到各個實例分片上,同時各個實例節點協調溝通,共同對外承擔一致服務。
多Redis實例服務,比單Redis實例要復雜的多,這涉及到定位、協同、容錯、擴容等技術難題。這里,我們介紹一種輕量級的客戶端Redis Sharding技術。
Redis
Sharding可以說是Redis
Cluster出來之前,業界普遍使用的多Redis實例集群方法。其主要思想是採用哈希演算法將Redis數據的key進行散列,通過hash函數,特定
的key會映射到特定的Redis節點上。這樣,客戶端就知道該向哪個Redis節點操作數據。Sharding架構如圖:
慶幸的是,java redis客戶端驅動jedis,已支持Redis Sharding功能,即ShardedJedis以及結合緩存池的ShardedJedisPool。
Jedis的Redis Sharding實現具有如下特點:

用一致性哈希演算法(consistent
hashing),將key和節點name同時hashing,然後進行映射匹配,採用的演算法是MURMUR_HASH。採用一致性哈希而不是採用簡單類
似哈希求模映射的主要原因是當增加或減少節點時,不會產生由於重新匹配造成的rehashing。一致性哈希隻影響相鄰節點key分配,影響量小。
2.
為了避免一致性哈希隻影響相鄰節點造成節點分配壓力,ShardedJedis會對每個Redis節點根據名字(沒有,Jedis會賦予預設名字)會虛擬
化出160個虛擬節點進行散列。根據權重weight,也可虛擬化出160倍數的虛擬節點。用虛擬節點做映射匹配,可以在增加或減少Redis節點
時,key在各Redis節點移動再分配更均勻,而不是只有相鄰節點受影響。
3.ShardedJedis支持keyTagPattern模式,即抽取key的一部分keyTag做sharding,這樣通過合理命名key,可以將一組相關聯的key放入同一個Redis節點,這在避免跨節點訪問相關數據時很重要。

Redis Sharding採用客戶端Sharding方式,服務端Redis還是一個個相對獨立的Redis實例節點,沒有做任何變動。同時,我們也不需要增加額外的中間處理組件,這是一種非常輕量、靈活的Redis多實例集群方法。
當然,Redis Sharding這種輕量靈活方式必然在集群其它能力方面做出妥協。比如擴容,當想要增加Redis節點時,盡管採用一致性哈希,畢竟還是會有key匹配不到而丟失,這時需要鍵值遷移。
作為輕量級客戶端sharding,處理Redis鍵值遷移是不現實的,這就要求應用層面允許Redis中數據丟失或從後端資料庫重新載入數據。但有些時候,擊穿緩存層,直接訪問資料庫層,會對系統訪問造成很大壓力。有沒有其它手段改善這種情況?
Redis
作者給出了一個比較討巧的辦法--presharding,即預先根據系統規模盡量部署好多個Redis實例,這些實例佔用系統資源很小,一台物理機可部
署多個,讓他們都參與sharding,當需要擴容時,選中一個實例作為主節點,新加入的Redis節點作為從節點進行數據復制。數據同步後,修改
sharding配置,讓指向原實例的Shard指向新機器上擴容後的Redis節點,同時調整新Redis節點為主節點,原實例可不再使用。
presharding
是預先分配好足夠的分片,擴容時只是將屬於某一分片的原Redis實例替換成新的容量更大的Redis實例。參與sharding的分片沒有改變,所以也
就不存在key值從一個區轉移到另一個分片區的現象,只是將屬於同分片區的鍵值從原Redis實例同步到新Redis實例。

並不是只有增
刪Redis節點引起鍵值丟失問題,更大的障礙來自Redis節點突然宕機。在《Redis持久化》一文中已提到,為不影響Redis性能,盡量不開啟
AOF和RDB文件保存功能,可架構Redis主備模式,主Redis宕機,數據不會丟失,備Redis留有備份。
這樣,我們的架構模式變
成一個Redis節點切片包含一個主Redis和一個備Redis。在主Redis宕機時,備Redis接管過來,上升為主Redis,繼續提供服務。主
備共同組成一個Redis節點,通過自動故障轉移,保證了節點的高可用性。則Sharding架構演變成:

Redis Sentinel提供了主備模式下Redis監控、故障轉移功能達到系統的高可用性。

高訪問量下,即使採用Sharding分片,一個單獨節點還是承擔了很大的訪問壓力,這時我們還需要進一步分解。通常情況下,應用訪問Redis讀操作量和寫操作量差異很大,讀常常是寫的數倍,這時我們可以將讀寫分離,而且讀提供更多的實例數。
可以利用主從模式實現讀寫分離,主負責寫,從負責只讀,同時一主掛多個從。在Sentinel監控下,還可以保障節點故障的自動監測。

3.利用代理中間件實現大規模Redis集群
上面分別介紹了多Redis伺服器集群的兩種方式,它們是基於客戶端sharding的Redis Sharding和基於服務端sharding的Redis Cluster。

客戶端sharding技術其優勢在於服務端的Redis實例彼此獨立,相互無關聯,每個Redis實例像單伺服器一樣運行,非常容易線性擴展,系統的靈活性很強。其不足之處在於:
由於sharding處理放到客戶端,規模進步擴大時給運維帶來挑戰。
服務端Redis實例群拓撲結構有變化時,每個客戶端都需要更新調整。
連接不能共享,當應用規模增大時,資源浪費制約優化。
服務端sharding的Redis Cluster其優勢在於服務端Redis集群拓撲結構變化時,客戶端不需要感知,客戶端像使用單Redis伺服器一樣使用Redis集群,運維管理也比較方便。
不過Redis Cluster正式版推出時間不長,系統穩定性、性能等都需要時間檢驗,尤其在大規模使用場合。
能不能結合二者優勢?即能使服務端各實例彼此獨立,支持線性可伸縮,同時sharding又能集中處理,方便統一管理?本篇介紹的Redis代理中間件twemproxy就是這樣一種利用中間件做sharding的技術。
twemproxy處於客戶端和伺服器的中間,將客戶端發來的請求,進行一定的處理後(如sharding),再轉發給後端真正的Redis伺服器。也就是說,客戶端不直接訪問Redis伺服器,而是通過twemproxy代理中間件間接訪問。
參照Redis Sharding架構,增加代理中間件的Redis集群架構如下:

twemproxy中間件的內部處理是無狀態的,它本身可以很輕松地集群,這樣可避免單點壓力或故障。
twemproxy又叫nutcracker,起源於twitter系統中redis/memcached集群開發實踐,運行效果良好,後代碼奉獻給開源社區。其輕量高效,採用C語言開發,工程網址是:GitHub - twitter/twemproxy: A fast, light-weight proxy for memcached and redis
twemproxy後端不僅支持redis,同時也支持memcached,這是twitter系統具體環境造成的。
由於使用了中間件,twemproxy可以通過共享與後端系統的連接,降低客戶端直接連接後端伺服器的連接數量。同時,它也提供sharding功能,支持後端伺服器集群水平擴展。統一運維管理也帶來了方便。
當然,也是由於使用了中間件代理,相比客戶端直連伺服器方式,性能上會有所損耗,實測結果大約降低了20%左右。

⑺ hibernate使用memcached作為二級緩存,怎麼構建memcached集群

redis是一個key-value存儲系統和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。
與memcached一樣,為了保證效率,數據都是緩存在內存中。
區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

熱點內容
安卓版瀏覽器的收藏在哪裡 發布:2024-10-13 03:45:13 瀏覽:650
資料庫分量 發布:2024-10-13 03:36:52 瀏覽:189
安卓系統變為什麼系統 發布:2024-10-13 03:24:52 瀏覽:847
華為4x重置密碼是多少 發布:2024-10-13 03:08:31 瀏覽:279
榮放安卓屏的藍牙如何關閉 發布:2024-10-13 02:50:49 瀏覽:57
c語言學完 發布:2024-10-13 02:28:52 瀏覽:611
酒商城源碼 發布:2024-10-13 01:58:54 瀏覽:138
我的世界伺服器圈地設計 發布:2024-10-13 01:46:16 瀏覽:220
配置升級到什麼型號好 發布:2024-10-13 01:38:35 瀏覽:196
面試java基礎 發布:2024-10-13 01:38:34 瀏覽:893