『壹』 redis緩存什麼情況下用怎末使用
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹復制。存檔可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。
『貳』 請教大家一個Redis緩存處理機制
應用Redis實現數據的讀寫,同時利用隊列處理器定時將數據寫入mysql。同時要注意避免沖突,在redis啟動時去mysql讀取所有表鍵值存入redis中,往redis寫數據時,對redis主鍵自增並進行讀取,若mysql更新失敗,則需要及時清除緩存及同步redis主鍵。這樣處理,主要是實時讀寫redis,而mysql數據則通過隊列非同步處理,緩解mysql壓力,不過這種方法應用場景主要基於高並發,而且redis的高可用集群架構相對更復雜,一般不是很推薦。
『叄』 redis 緩存是內存緩存嗎
只支持簡單的key/value數據結構,不像Redis可以支持豐富的數據類型。
無法進行持久化,數據不能備份,只能用於緩存使用,且重啟後數據全部丟失。
無法進行數據同步,不能將MC中的數據遷移到其他MC實例中。
Memcached內存分配採用Slab Allocation機制管理內存,value大小分布差異較大時會造成內存利用率降低,並引發低利用率時依然出現踢出等問題。需要用戶注重value設計。
『肆』 大量數據能緩存到redis裡面嗎
不適合引子:
在大數據時代,總希望存在一個Key-value存儲機制,像HashMap一樣在內存中處理大量(千萬數量級)的key-value對,以便提高數據查找、修改速度。
所以,我們會想到,Memcached和Redis這兩個NoSQL資料庫(嚴格來講二者都不可以算作資料庫)。
1、Memcached是一個cache機制,當內存不足時會採用LRU機制,替換出陳舊數據,因此他不能保證我們的數據像在HashMap中一樣不丟失,且沒有數據持久化機制;
2、Redis克服了這一缺點,採取磁碟存儲機制實現數據持久化。但是,當數據量達到1千萬左右時,由於內存中不能存儲如此大量數目的數據,頻繁同磁碟進行數據交換,導致數據查詢、存儲性能的急劇下降,將導致服務不可用。
結論:當前還沒有好的產品可以實現key-value保證數據完整性,千萬級條數量級的,高效存儲和查詢支持產品。
附錄一:如下是轉自其它網友的測試數據:
附錄二:memcached 和redis的比較,和各自用途
附錄一:
從圖中可以猜測到還會有Redis 2.2.1 的測試,相同的測試環境,1K的數據量,使用ServiceStack.Redis客戶端進行如下測試:
1) Set操作
2) Get操作
3) Del操作
每一套測試分別使用三個配置進行測試:
1) 綠色線條的是開啟Dump方式的持久化,5分鍾持久化一次
2) 藍色線條是開啟AOF方式的持久化,每秒寫入磁碟一次
3) 紅色線條是關閉任何的持久化方式
對於每一個配置都使用相同的其他配置:
1) 開啟VM 最大內存10GB(128位元組一
『伍』 Redis是什麼緩存機制
redis(RemoteDictionaryServer)遠程數據服務
內存高速緩存資料庫。C語言編寫,數據模型為key-value,NoSql資料庫。
希望對你有所啟發。apeit-程序猿IT中redis章節講的不錯,由淺入深,適合入門學習。
『陸』 ehcache vs redis 比較,功能,性能等,有人總結過么
首先ehcache如果是本地緩存的話,肯定要比redis快很多。ehcache提供in process的緩存機制,而redis不論是安裝在本地還是遠程,都要通過tcp連接來獲取數據。從機制上講,ehcache要快。但如果雙方都在遠程機器上,那就不一定了。
『柒』 mysql 有自己的緩存機制 ,為什麼還要用redis和memcache緩存mysql數據
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:
repair table tabTest;
進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裡面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這里以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local裡面,必須確認在執行這條指令時MySQL伺服器必須沒有啟動!檢測修復所有資料庫(表)
『捌』 如何使用redis做mysql的緩存
應用Redis實現數據的讀寫,同時利用隊列處理器定時將數據寫入MySQL。
同時要注意避免沖突,在redis啟動時去mysql讀取所有表鍵值存入redis中,往redis寫數據時,對redis主鍵自增並進行讀取,若mysql更新失敗,則需要及時清除緩存及同步redis主鍵。
這樣處理,主要是實時讀寫redis,而mysql數據則通過隊列非同步處理,緩解mysql壓力,不過這種方法應用場景主要基於高並發,而且redis的高可用集群架構相對更復雜,一般不是很推薦。
《內存資料庫和mysql的同步機制》
redis如何做到和mysql資料庫的同步
【方案一】http://www.hu.com/question/23401553?sort=created
程序實現mysql更新、添加、刪除就刪除redis數據。
程序查詢redis,不存在就查詢mysql並保存redis
redis和mysql數據的同步,代碼級別大致可以這樣做:
讀: 讀redis->沒有,讀mysql->把mysql數據寫回redis
寫: 寫mysql->成功,寫redis(捕捉所有mysql的修改,寫入和刪除事件,對redis進行操作)
【方案二】http://www.linuxidc.com/Linux/2015-01/380.htm
實時獲取mysql binlog進行解析,然後修改redis
MySQL到Redis數據方案
無論MySQL還是Redis,自身都帶有數據同步的機制,像比較常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog來實現的,這樣的數據其實還是一個非同步過程,只不過當伺服器都在同一內網時,非同步的延遲幾乎可以忽略。
那麼理論上我們也可以用同樣方式,分析MySQL的binlog文件並將數據插入Redis。但是這需要對binlog文件以及MySQL有非常深入的理解,同時由於binlog存在Statement/Row/Mixedlevel多種形式,分析binlog實現同步的工作量是非常大的。
因此這里選擇了一種開發成本更加低廉的方式,借用已經比較成熟的MySQL UDF,將MySQL數據首先放入Gearman中,然後通過一個自己編寫的PHP Gearman Worker,將數據同步到Redis。比分析binlog的方式增加了不少流程,但是實現成本更低,更容易操作。
【方案三】
使用mysql的udf,詳情請看MySQL :: MySQL 5.1 Reference Manual :: 22.3 Adding New Functions to MySQL 然後通過trigger在表update和insert之後進行函數的調用,寫入到redis中去。大致是這個樣子。
【http://www.hu.com/question/27738066】
1.首先明確是不是一定要上緩存,當前架構的瓶頸在哪裡,若瓶頸真是資料庫操作上,再繼續往下看。
2.明確memcached和redis的區別,到底要使用哪個。前者終究是個緩存,不可能永久保存數據(LRU機制),支持分布式,後者除了緩存的同時也支持把數據持久化到磁碟等,redis要自己去實現分布式緩存(貌似最新版本的已集成),自己去實現一致性hash。因為不知道你們的應用場景,不好說一定要用memcache還是redis,說不定用MongoDB會更好,比如在存儲日誌方面。
3.緩存量大但又不常變化的數據,比如評論。
4.你的思路是對的,清晰明了,讀DB前,先讀緩存,如果有直接返回,如果沒有再讀DB,然後寫入緩存層並返回。
5.考慮是否需要主從,讀寫分離,考慮是否分布式部署,考慮是否後續水平伸縮。
6.想要一勞永逸,後續維護和擴展方便,那就將現有的代碼架構優化,按你說的替換資料庫組件需要改動大量代碼,說明當前架構存在問題。可以利用現有的一些框架,比如SpringMVC,將你的應用層和業務層和資料庫層解耦。再上緩存之前把這些做好。
7.把讀取緩存等操作做成服務組件,對業務層提供服務,業務層對應用層提供服務。
8.保留原始資料庫組件,優化成服務組件,方便後續業務層靈活調用緩存或者是資料庫。
9.不建議一次性全量上緩存,最開始不動核心業務,可以將邊緣業務先換成緩存組件,一步步換至核心業務。
10.刷新內存,以memcached為例,新增,修改和刪除操作,一般採用lazy load的策略,即新增時只寫入資料庫,並不會馬上更新Memcached,而是等到再次讀取時才會載入到Memcached中,修改和刪除操作也是更新資料庫,然後將Memcached中的數據標記為失效,等待下次讀取時再載入。
『玖』 怎麼實現redis的資料庫的緩存
大致為兩種措施:
一、腳本同步:
1、自己寫腳本將資料庫數據寫入到redis/memcached。
2、這就涉及到實時數據變更的問題(mysql row binlog的實時分析),binlog增量訂閱Alibaba 的canal ,以及緩存層數據 丟失/失效 後的數據同步恢復問題。
二、業務層實現:
1、先讀取nosql緩存層,沒有數據再讀取mysql層,並寫入數據到nosql。
2、nosql層做好多節點分布式(一致性hash),以及節點失效後替代方案(多層hash尋找相鄰替代節點),和數據震盪恢復了。
『拾』 redis或者緩存系統有批量刪除的機制嗎
總結一:
memcache官方定義
Free & open source, high-performance, distributed memory object caching
system, generic in nature, but intended for use in speeding up dynamic web
applications by alleviating database load.
redis官方定義
Redis is an open source, BSD licensed, advanced key-value store. It is often
referred to as a data structure server since keys can contain strings, hashes,
lists, sets and sorted sets.
版權相同
它們都是使用的bsd協議,使用它的項目可以用於商業用戶,不必發布二次修改的代碼,可以修改源代碼。
數據類型
redis數據類型豐富,支持set liset等類型
memcache支持簡單數據類型,需要客戶端自己處理復雜對象
持久性
redis支持數據落地持久化存儲
memcache不支持數據持久存儲
分布式存儲
redis支持master-slave復制模式
memcache可以使用一致性hash做分布式
value大小不同
memcache是一個內存緩存,key的長度小於250字元,單個item存儲要小於1M,不適合虛擬機使用
數據一致性不同
redis使用的是單線程模型,保證了數據按順序提交。
memcache需要使用cas保證數據一致性。CAS(Check and
Set)是一個確保並發一致性的機制,屬於「樂觀鎖」范疇;原理很簡單:拿版本號,操作,對比版本號,如果一致就操作,不一致就放棄任何操作
cpu利用
redis單線程模型只能使用一個cpu,可以開啟多個redis進程
總結二:
1.Redis中,並不是所有的數據都一直存儲在內存中的,這是和Memcached相比一個最大的區別。
2.Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
3.Redis支持數據的備份,即master-slave模式的數據備份。
4.Redis支持數據的持久化,可以將內存中的數據保持在磁碟中,重啟的時候可以再次載入進行使用。
我個人認為最本質的不同是Redis在很多方面具備資料庫的特徵,或者說就是一個資料庫系統,而Memcached只是簡單的K/V緩存
總結三:
redis和memecache的不同在於:
1、存儲方式:
memecache
把數據全部存在內存之中,斷電後會掛掉,數據不能超過內存大小
redis有部份存在硬碟上,這樣能保證數據的持久性。
2、數據支持類型:
redis在數據支持上要比memecache多的多。
3、使用底層模型不同:
新版本的redis直接自己構建了VM
機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
4、運行環境不同:
redis目前官方只支持LINUX
上去行,從而省去了對於其它系統的支持,這樣的話可以更好的把精力用於本系統 環境上的優化,雖然後來微軟有一個小組為其寫了補丁。但是沒有放到主幹上
memcache只能當做緩存,cache
redis的內容是可以落地的,就是說跟mongodb有些類似,然後redis也可以作為緩存,並且可以設置master-slave