當前位置:首頁 » 文件管理 » redis分布式緩存

redis分布式緩存

發布時間: 2022-01-09 20:06:14

Ⅰ 細說分布式redis

IT培訓>資料庫教程
細說分布式Redis架構設計和踩過的那些坑

作者:課課家教育2015-12-14 10:15:25

摘要:本文章主要分成五個步驟內容講解
Redis、RedisCluster和Codis;
我們更愛一致性;
Codis在生產環境中的使用的經驗和坑們;
對於分布式資料庫和分布式架構的一些看法;
Q & A環節。
Codis是一個分布式Redis解決方案,與官方的純P2P的模式不同,Codis採用的是Proxy-based的方案。今天我們介紹一下Codis及下一個大版本RebornDB的設計,同時會介紹一些Codis在實際應用場景中的tips。最後拋磚引玉,會介紹一下我對分布式存儲的一些觀點和看法,望各位首席們雅正。

細說分布式Redis架構設計和踩過的那些坑_redis 分布式_ redis 分布式鎖_分布式緩存redis
一、 Redis,RedisCluster和Codis
Redis:想必大家的架構中,Redis已經是一個必不可少的部件,豐富的數據結構和超高的性能以及簡單的協議,讓Redis能夠很好的作為資料庫的上游緩存層。但是我們會比較擔心Redis的單點問題,單點Redis容量大小總受限於內存,在業務對性能要求比較高的情況下,理想情況下我們希望所有的數據都能在內存裡面,不要打到資料庫上,所以很自然的就會尋求其他方案。 比如,SSD將內存換成了磁碟,以換取更大的容量。更自然的想法是將Redis變成一個可以水平擴展的分布式緩存服務,在Codis之前,業界只有Twemproxy,但是Twemproxy本身是一個靜態的分布式Redis方案,進行擴容/縮容時候對運維要求非常高,而且很難做到平滑的擴縮容。Codis的目標其實就是盡量兼容Twemproxy的基礎上,加上數據遷移的功能以實現擴容和縮容,最終替換Twemproxy。從豌豆莢最後上線的結果來看,最後完全替換了Twem,大概2T左右的內存集群。
Redis Cluster :與Codis同期發布正式版的官方cl

Ⅱ 大家所推崇的 Redis 分布式鎖,真的可以萬無一失嗎

使用Redis實現分布式鎖最簡單的方案是使用命令SETNX。SETNX(SET if Not eXist)的使用方式為:SETNX key value,只在鍵key不存在的情況下,將鍵key的值設置為value,若鍵key存在,則SETNX不做任何動作。SETNX在設置成功時返回,設置失敗時返回0。當要獲取鎖時,直接使用SETNX獲取鎖,當要釋放鎖時,使用DEL命令刪除掉對應的鍵key即可。
上面這種方案有一個致命問題,就是某個線程在獲取鎖之後由於某些異常因素(比如宕機)而不能正常的執行解鎖操作,那麼這個鎖就永遠釋放不掉了。為此,我們可以為這個鎖加上一個超時時間。第一時間我們會聯想到Redis的EXPIRE命令(EXPIRE key seconds)。但是這里我們不能使用EXPIRE來實現分布式鎖,因為它與SETNX一起是兩個操作,在這兩個操作之間可能會發生異常,從而還是達不到預期的結果

這里我們一眼就可以看出問題來:GET和DEL是兩個分開的操作,在GET執行之後且在DEL執行之前的間隙是可能會發生異常的。如果我們只要保證解鎖的代碼是原子性的就能解決問題了。這里我們引入了一種新的方式,就是Lua腳本,解鎖的時候還是使用DEL命令來解鎖。
修改之後的方案看上去很完美,但實際上還是會有問題。試想一下,某線程A獲取了鎖並且設置了過期時間為10s,然後在執行業務邏輯的時候耗費了15s,此時線程A獲取的鎖早已被Redis的過期機制自動釋放了。在線程A獲取鎖並經過10s之後,改鎖可能已經被其它線程獲取到了。當線程A執行完業務邏輯准備解鎖(DEL key)的時候,有可能刪除掉的是其它線程已經獲取到的鎖,總的來說Redis 分布式鎖不是那麼萬無一失的。

Ⅲ redis分布式 為什麼還要主從

redis 分布式,主從同步
張映 發表於 2011-06-27
分類目錄: cache, nosql
標簽:master, redis, slave, 主從, 分布式, 集群

redis和memcache比較像的,memcache可以實現伺服器的集群,redis肯定也是可以的。下面在一台機,實現redis主從復制。
1,一下redis.conf,生成一個從機的配置
cp /usr/local/redis/redis.conf /usr/local/redis/redis_slave.conf
2,修改主伺服器的配置redis.conf
bind 127.0.0.1
3,修改從伺服器的配置redis_slave.conf
pidfile /usr/local/redis/var/redis_slave.pid
port 10002
bind 127.0.0.1
logfile /usr/local/redis/var/redis_slave.log
dbfilename mp_slave.rdb
slaveof 127.0.0.1 6379
4,啟動主伺服器,從伺服器
redis-server /usr/local/redis/redis.conf
redis-server /usr/local/redis/redis_slave.conf
查看一下,redis.log文件會有以下內容
[3774] 27 Jun 12:53:32 * The server is now ready to accept connections on port 10002
[3774] 27 Jun 12:53:32 - 0 clients connected (0 slaves), 539568 bytes in use
[3774] 27 Jun 12:53:32 * Connecting to MASTER...
[3772] 27 Jun 12:53:32 - Accepted 127.0.0.1:33237
[3772] 27 Jun 12:53:32 * Slave ask for synchronization
[3772] 27 Jun 12:53:32 * Starting BGSAVE for SYNC
[3772] 27 Jun 12:53:32 * Background saving started by pid 3775
[3774] 27 Jun 12:53:32 * MASTER <-> SLAVE sync started: SYNC sent
[3775] 27 Jun 12:53:32 * DB saved on disk
[3772] 27 Jun 12:53:33 * Background saving terminated with success
[3772] 27 Jun 12:53:33 * Synchronization with slave succeeded
[3774] 27 Jun 12:53:33 * MASTER <-> SLAVE sync: receiving 333 bytes from master
[3774] 27 Jun 12:53:33 * MASTER <-> SLAVE sync: Loading DB in memory
[3774] 27 Jun 12:53:33 * MASTER <-> SLAVE sync: Finished with success
查看一下
root@ubuntu:/usr/local/redis# ps -e|grep redis
3774 ? 00:00:00 redis-server
4148 ? 00:00:00 redis-server
5,測試結果
<?php
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('test',json_encode(array(1,2,3,4)));
print_r(json_decode($redis->get('test')));
?>

root@ubuntu:/usr/local/redis# telnet 127.0.0.1 10002
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get test
$9
[1,2,3,4]
緩存數據是放在6379這個埠的伺服器上,代碼執行後,登錄到10002埠的slave伺服器上也可以看到有數據,說明已經同步了。
我嘗試了一下,redis的主主同步,但是沒有成功,我看了一下log,以從伺服器127.0.0.1 10002為master的時候,同時啟動二個埠,怎麼也連接不上127.0.0.1 6379是不支持呢?還是配置有問題,我在網上查了一下,沒看到有人配置主主同步的。

Ⅳ 如何理解redis+tomcat+nginx集群緩存

Nginx是一款輕量級兼備高性能的Http和反向代理伺服器
所謂反向代理就是指在用戶發起訪問請求,由代理伺服器接收,然後將請求轉發給正式伺服器,並且將正式伺服器處理完的數據返回給客戶端,此時代理伺服器就表現為一個伺服器。

Ⅳ redis實現分布式鎖必須是單機嗎

Redis的發起者是Salvatore Sanfilippo,最初開發它的目的就是為了解決快速存儲和查詢社交網站上常見的好友關系數據。
目前Vmware在資助著Redis項目的開發和維護,Redis最新的版本是3.X(本文寫作時為version 3.2.5),其中內置支持了很多實用的數據存儲結構,例如string, hashes, lists, set, sorted sets等,還提供了很多實用的高性能、高可靠特性,例如集合運算、LRU緩存內容管理、主從同步等等。

Ⅵ 什麼是分布式緩存

分布式緩存能夠處理大量的動態數據,因此比較適合應用在Web 2.0時代中的社交網站等需要由用戶生成內容的場景。從本地緩存擴展到分布式緩存後,關注重點從CPU、內存、緩存之間的數據傳輸速度差異也擴展到了業務系統、資料庫、分布式緩存之間的數據傳輸速度差異。

常用的分布式緩存包括Redis和Memcached。

Memcached

Memcached是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕資料庫負載。Memcached通過在內存中緩存數據和對象來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。

特點:哈希方式存儲;全內存操作;簡單文本協議進行數據通信;只操作字元型數據;集群由應用進行控制,採用一致性哈希演算法

限制性:數據保存在內存當中的,一旦機器重啟,數據會全部丟失;只能操作字元型數據,數據類型貧乏;以root許可權運行,而且Memcached本身沒有任何許可權管理和認證功能,安全性不足;能存儲的數據長度有限,最大鍵長250個字元,儲存數據不能超過1M。

Redis

Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。

特點:

Redis支持的數據類型包括:字元串、string、hash、set、sortedset、list;Redis實現持久化的方式:定期將內存快照寫入磁碟;寫日誌;Redis支持主從同步。

限制性:單核運行,在存儲大數據的時候性能會有降低;不是全內存操作;主從復制是全量復制,對實際的系統運營造成了一定負擔。

Ⅶ redis是怎麼分布式緩存數據的

Redis使用單線程的IO復用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現了epoll、kqueue和select,對於單純只有IO操作來說,單線程可以將速度優勢發揮到最大,但是Redis也提供了一些簡單的計算功能
比如排序、聚合等,對於這些操作,單線程模型實際會嚴重影響整體吞吐量,CPU計算過程中,整個IO調度都是被阻塞住的。

Ⅷ 分布式緩存的作用

分布式緩存主要用於在高並發環境下,減輕資料庫的壓力,提高系統的響應速度和並發吞吐。當大量的讀、寫請求湧向資料庫時,磁碟的處理速度與內存顯然不在一個量級,因此,在資料庫之前加一層緩存,能夠顯著提高系統的響應速度,並降低資料庫的壓力。作為傳統的關系型資料庫,MySQL提供完整的ACID操作,支持豐富的數據類型、強大的關聯查詢、where語句等,能夠非常客易地建立查詢索引,執行復雜的內連接、外連接、求和、排序、分組等操作,並且支持存儲過程、函數等功能,產品成熟度高,功能強大。但是,對於需要應對高並發訪問並且存儲海量數據的場景來說,出於對性能的考慮,不得不放棄很多傳統關系型資料庫原本強大的功能,犧牲了系統的易用性,並且使得系統的設計和管理變得更為復雜。這也使得在過去幾年中,流行著另一種新的存儲解決方案——NoSQL,它與傳統的關系型資料庫最大的差別在於,它不使用SQL作為查詢語言來查找數據,而採用key-value形式進行查找,提供了更高的查詢效率及吞吐,並且能夠更加方便地進行擴展,存儲海量數據,在數千個節點上進行分區,自動進行數據的復制和備份。在分布式系統中,消息作為應用間通信的一種方式,得到了十分廣泛的應用。消息可以被保存在隊列中,直到被接收者取出,由於消息發送者不需要同步等待消息接收者的響應,消息的非同步接收降低了系統集成的耦合度,提升了分布式系統協作的效率,使得系統能夠更快地響應用戶,提供更高的吞吐。
當系統處於峰值壓力時,分布式消息隊列還能夠作為緩沖,削峰填谷,緩解集群的壓力,避免整個系統被壓垮。垂直化的搜索引擎在分布式系統中是一個非常重要的角色,它既能夠滿足用戶對於全文檢索、模糊匹配的需求,解決資料庫like查詢效率低下的問題,又能夠解決分布式環境下,由於採用分庫分表,或者使用NoSQL資料庫,導致無法進行多表關聯或者進行復雜查詢的問題。

Ⅸ 想知道除了redis集群還有那些緩存集群。最近做畢設模擬集群條件的網站,要求就是節點嚴格有限的條件

摘要 1、Ehcache(純java的進程內緩存框架,也叫二級緩存)

Ⅹ JAVA目前比較常用的緩存有哪些 集中式緩存與分布式緩存有何區別 它們應用場景是

java目前常用的緩存:
Generic
JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, etc)
EhCache 2.x
Hazelcast
Infinispan
Couchbase
Redis
Caffeine
Guava (deprecated)
Simple
建議使用spring boot集成方式,可插拔,簡單。
集中式緩存適用場景:
1、伺服器集群部署。
2、數據高一致性(任何數據變化都能及時的被查詢到)

分布式緩存適用場景:
系統需要緩存的數據量大
對數據的可用性較高的情況

需要橫向擴展,從而達到緩存的容量無限的要求

熱點內容
刪資料庫事件 發布:2024-11-15 12:10:54 瀏覽:455
資料庫選課管理系統 發布:2024-11-15 12:10:15 瀏覽:126
android音樂波形圖 發布:2024-11-15 11:57:12 瀏覽:378
福建社保銀行卡初始密碼是多少 發布:2024-11-15 11:47:40 瀏覽:911
游戲多開用什麼配置 發布:2024-11-15 11:46:51 瀏覽:729
管理java版本 發布:2024-11-15 11:44:03 瀏覽:629
ndk編譯的程序如何執行 發布:2024-11-15 11:43:18 瀏覽:626
輕應用伺服器適合搭建網站嗎 發布:2024-11-15 11:36:08 瀏覽:246
c語言的百分號 發布:2024-11-15 11:34:24 瀏覽:31
一加五安卓8什麼時候推送 發布:2024-11-15 11:19:40 瀏覽:854