【ITOO】--memcache小結
為什麼要用memcache?
每個技術的出現必然有它出現的原因,為啥要用memcached?查了一下網上的資料,瞭解到Memcache的出現解決了資料庫高併發訪問的瓶頸。當資料架構建立在單資料庫模式,資料庫連線池峰值達500,程式離崩潰就不遠了。有的小網站開發的時候沒有關注效能,等使用者訪問量越來越大,程式很容易崩潰。
如果客戶端傳送一個請求,服務端從資料庫中存取相關資料,花費高昂。如果每次都從資料庫取相同的資料,造成了資料庫低效。然而如果把第一次取出的資料都存入到記憶體中,下次讀取直接從記憶體中獲得,給資料庫就減負了。
所以在資料庫和web之間放一層cache層,好處:1.減輕資料庫的負擔 2.提高存取速度。
什麼是memcache?
Memcached是一個高效能的分散式記憶體物件快取系統,用於動態web應用以減輕資料庫負載。
上面是官方的回答,我個人的理解是Memcache像一個臨時資料庫,以key-value的形式存取資料,key會通過一個Hash演算法轉換成Hash-key,便於查詢。因為它儲存資料在記憶體中,離cpu比較近,查詢資料是很快速的。
memcache原理是什麼?2015年12月17日(Memcache快取系統知識)
1.客戶端傳送web請求,首先memcache Client檢查客戶端請求的資料是否存在memache中,如果有,直接返回資料,不對資料庫進行任何操作,路徑為1237。
2.如果不存在memache中,就去查詢資料庫中的資料,先把資料庫中的資料返回給客戶端,同時快取一份資料在memcache中,路徑為124576.
3.每次更新資料庫的資料的時候,memache會同時更新,保持資料一致性。
4.當分配給memache的空間用完,採用LRU(Least Recently Used,最近最少使用的原則),策略加上到期失效策略,失效資料首先被替換,然後再替換掉最近未使用的資料。
memcache跟cookie、session有什麼異同?
cookie、session常用來儲存使用者資訊,SSO中使用者資訊存到本地cookie中一份,傳送到session也儲存一份,cookie的安全性比session差。memcached可以用在考試的抽題中,儲存的資料的特色:1.資料量大 2.資料被多次使用。session時效性、存取在伺服器這兩點來說,是比較安全的。cookie可以通過本地cookie加密來解決安全性的問題,手寫SSO裡面cookie存取的使用者密碼就被加密過,資料庫中存取的是也是加密後的資訊。memcached可以通過放在防火牆後面增加自身的安全性。
memcached實戰演練
1.安裝memcached的服務端
- 下載memcache的windows穩定版,解壓放某個盤下面,比如在c:\r
- 在cmd下輸入 c:\memcached\memcached.exe -d install 安裝(請不要懷疑,真的安裝完成了!)
- 再輸入: c:\memcached\memcached.exe -d start 啟動。預設分配64M記憶體,使用11211埠)
2.memcached使用
首先用telnet 127.0.0.1 11211這樣的命令連線上memcache,然後直接輸入stats就可以得到當前memcache的狀態。 (如果輸入telnet 後報telnet不是內部或外部命令的時候,做如下操作。)
得到以下資訊:
3.客戶端程式碼
控制檯程式:
<font size="4"><span style="font-family:SimSun;"><span style="font-size:18px;"><span style="font-family:SimSun;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Memcached.ClientLibrary;
namespace memache
{
class Program
{
static void Main(string[] args)
{
//新增多個快取伺服器地址
string[] serverlist = { "192.168.24.247:11211","192.168.24.175:11211" };
//初始化池
SockIOPool pool = SockIOPool.GetInstance();
pool.SetServers(serverlist);
//設定memcached 的一些引數
pool.InitConnections = 3;
pool.MinConnections = 3;
pool.MaxConnections = 5;
pool.SocketConnectTimeout = 1000;
pool.SocketTimeout = 3000;
pool.MaintenanceSleep = 30;
pool.Failover = true;
pool.Nagle = false;
pool.Initialize();
// 獲得客戶端例項
MemcachedClient mc = new MemcachedClient();
mc.EnableCompression = false;
Console.WriteLine("------------測 試-----------");
bool flags1 = mc.Set("user1", "my value"); //儲存資料到快取伺服器,這裡將字串"my value"快取,key 是"test"
bool flags2 = mc.Set("user2", "my value");
bool flags3 = mc.Set("user3", "my value");
bool flags4 = mc.Set("user4", "my value");
bool flags5 = mc.Set("user5", "my value");
bool flags6 = mc.Set("user6", "my value");
if (mc.KeyExists("user1")) //測試快取存在key為test的專案
{
Console.WriteLine("test is Exists");
Console.WriteLine(mc.Get("user1").ToString()); //在快取中獲取key為test的專案
}
else
{
Console.WriteLine("test not Exists");
}
// Console.ReadLine();
bool flag = mc.Delete("user1"); //移除快取中key為test的專案
if (mc.KeyExists("user1"))
{
Console.WriteLine("test is Exists");
Console.WriteLine(mc.Get("user1").ToString());
}
else
{
//Console.WriteLine("test not Exists");
}
SockIOPool.GetInstance().Shutdown(); //關閉池, 關閉sockets
Console.ReadLine();
}
}
}
</span></span></span></font>
程式執行結果:
首先要開啟memcached服務,輸入 c:\memcached\memcached.exe
-d start 並執行。
啟動程式控制臺,memcached可以用啦!
總結
學習是一個從羅列知識、個人消化、對比、總結織網、實戰的過程,實戰是最能檢驗人學的如何的方式,做專案挺好的。
相關文章
- 【ITOO】--框架搭建框架
- 【ITOO】--MVC學習MVC
- 【ITOO】--搭建底層框架框架
- 【ITOO】--分散式事務分散式
- Memcache教程 Memcache零基礎教程
- Memcache for WindowsWindows
- ruby訪問memcache[使用memcache-client1.7.0]client
- 【ITOO】--陣列、集合、泛型解析陣列泛型
- Memcache基礎
- memcache安裝
- 【ITOO】--專案系統架構圖架構
- 【ITOO】--Jekins整合錯誤集錦
- Memcache基礎教程
- memcache安裝配置
- 【memcache快取專題(2)】memcache安裝與命令列使用快取命令列
- Windows下的Memcache安裝 linux下的Memcache安裝WindowsLinux
- 【ITOO】--迎新系統,你可以做的更好
- 【ITOO】--迎新系統,時間都去哪了?
- IIS的安裝和詳細配置--【ITOO】
- 面試之 Memcache 相關面試
- Redis 與 memcache(轉載)Redis
- php載入memcache模組PHP
- memcache和redis區別Redis
- memcache同步session的方法Session
- memcache的最佳實踐
- Memcache LRU演算法演算法
- 安裝PHP的memcachePHP
- Memcache分散式部署方案分散式
- 【ITOO】--windows工作管理員cpu使用和PF解析Windows
- CentOS7 安裝 memcacheCentOS
- thinkphp 3.2 redis memcache 呼叫方法PHPRedis
- memcache清除items和expired方法
- memcache的執行緒模型執行緒模型
- Scaling Memcache at Facebook
- 【memcache快取專題(3)】PHP-memcache擴充套件的安裝以及使用快取PHP套件
- 微信小程式小總結微信小程式
- canvas小結Canvas
- Django——小結Django