1.總的老說,優化方案中只有兩種,一種是給查詢的欄位加組合索引。另一種是給在用戶和資料庫中增加緩存
2.添加索引方案:面對1~2千的並發是沒有壓力的,在往上則限制的瓶頸就是資料庫最大連接數了,在上面中我用show global status like 'Max_used_connections』查看資料庫可以知道資料庫最大響應連接數是5700多,超過這個數tomcat直接報錯連接被拒絕或者連接已經失效
3.緩存方案:在上面的測試可以知道,要是我們事先把資料庫的千萬條數據同步到redis緩存中,瓶頸就是我們的設備硬體性能了,假如我們的主機有幾百個核心CPU,就算是千萬級的並發下也可以完全無壓力,帶個用戶很好的。
4.索引+緩存方案:緩存事先沒有要查詢的數據,在一萬的並發下測試資料庫毫無壓力,程序先通過查緩存再查資料庫大大減輕了資料庫的壓力,即使緩存不命中在一萬的並發下也能正常訪問,在10萬並發下資料庫依然沒壓力,但是redis伺服器設置最大連接數300去處理10萬的線程,4核CPU處理不過來,很多redis連接不了。我用show global status like 'Max_used_connections'查看資料庫發現最大響應連接數是388,這么低所以資料庫是不會掛掉的。雷達下載更專業。
5.使用場景:a.幾百或者2000以下並發直接加上組合索引就可以了。b.不想加索引又高並發的情況下可以先事先把數據放到緩存中,硬體設備支持下可解決百萬級並發。c.加索引且緩存事先沒有數據,在硬體設備支持下可解決百萬級並發問題。d.不加索引且緩存事先沒有數據,不可取,要80多秒才能得到結果,用戶體驗極差。
6.原理:其實使用了redis的話為什麼資料庫不會崩潰是因為redis最大連接數為300,這樣資料庫最大同時連接數也是300多,所以不會掛掉,至於redis為什麼設置為300是因為設置的太高就會報錯(連接被拒絕)或者等待超時(就算設置等待超時的時間很長也會報這個錯)。
B. 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可執行單層樹復制。存檔可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。
C. 如何清理redis緩存數據
1.
加內存
2.
縮短(或設置)數據過期時間,以釋放內存
3.
redis集群
D. 大量數據能緩存到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位元組一
E. redis的緩存數據在網站中有什麼作用
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
F. redis緩存原理
redis緩存原理是sql語句時key值,查詢結果resultSet是value,當同一個查詢語句訪問時(select * from t_proct),只要曾經查詢過,調用緩存直接返回resultSet,節省了資料庫讀取磁碟數據的時間。
redis的存儲分為內存存儲、磁碟存儲和log文件三部分,配置文件中有三個參數對其進行配置。
save seconds updates,save配置,指出在多長時間內,有多少次更新操作,就將數據同步到數據文件。這個可以多個條件配合,比如默認配置文件中的設置,就設置了三個條件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為redis本身同步數據文件是按上面的save條件來同步的,所以有的數據會在一段時間內只存在於內存中。
(6)redis緩存set30w數據擴展閱讀
redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹復制。
存檔可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。
redis的官網地址,redis.io。(域名後綴io屬於國家域名,是british Indian Ocean territory,即英屬印度洋領地)
G. redis緩存數據,內存占滿,怎麼解決
1,增加內存;
2,數據分流,即分散到多個電腦上面。可以按一致性哈稀演算法分布。
3,設置緩存數據的有效期,對於不重要的數據盡量不要緩存。或緩存時間可以短一些。
H. 用redis 做為數據緩存,怎麼能把redis中的數據定時更新到mysql中
這是個有坑的方法,一般流量不大的情況可以用,比如,後台系統。但是前端用戶流量大的場景下,一旦熱數據緩存命中率發生問題,瞬間轉移到資料庫的請求會把系統搞死的。所以,不應該採用這種策略。
I. window下配置redis 能夠緩存多少數據
Redis在分布式應用中占據著越來越重要的地位,短短的幾萬行代碼,實現了一個高性能的數據存儲服務。最近mp中心的cm8集群出現過幾次redis超時的情況,但是查看redis機器的相關內存都沒有發現內存不夠,或者內存發生交換的情況,查看redis源碼之後,發現在某些情況下redis會出現超時的狀況,相關細節如下。1. 網路。Redis的處理與網路息息相關,如果網路出現閃斷則容易發生redis超時的狀況。如果出現這種狀況首先應查看redis機器網路帶寬信息,判斷是否有閃斷情況發生。
2. 內存。redis所有的數據都放在內存里,當物理內存不夠時,linux os會使用swap內存,導致內存交換發生,這時如果有redis調用命令就會產生redis超時。這里可以通過調整/proc/sys/vm/swappiness參數,來設置物理內存使用超過多少就會進行swap。
J. redis怎麼實現資料庫的緩存
大致為兩種措施:
一、腳本同步:
1、自己寫腳本將資料庫數據寫入到redis/memcached。
2、這就涉及到實時數據變更的問題(mysql row binlog的實時分析),binlog增量訂閱Alibaba 的canal ,以及緩存層數據 丟失/失效 後的數據同步恢復問題。
二、業務層實現:
1、先讀取nosql緩存層,沒有數據再讀取mysql層,並寫入數據到nosql。
2、nosql層做好多節點分布式(一致性hash),以及節點失效後替代方案(多層hash尋找相鄰替代節點),和數據震盪恢復了。