C\#memcache 사용 안내

9411 단어 C#memcache
개술
memcache 는 오픈 소스 의 분포 식 캐 시 시스템 입 니 다.서버 와 클 라 이언 트 로 구성 되 어 있 으 며,데 몬(감청)방식 으로 하나 이상 의 서버 에서 실행 되 며,언제든지 클 라 이언 트 의 연결 과 조작 을 받 을 수 있 습 니 다.memcache 는 주로 데이터 대상 을 메모리 에 캐 시 하고 메모리 에서 통 일 된 커 다란 hash 표를 유지 합 니 다.쉽게 말 하면 데 이 터 를 메모리 에 호출 한 다음 메모리 에서 읽 어 내 어 읽 기 속 도 를 크게 높 인 다 는 것 이다.memcache 는 메모리 키/값 에 대한 hashmap 를 기반 으로 메모리 에 저장 합 니 다.memcache 는 C 로 썼 지만 클 라 이언 트 는 모든 언어 로 작성 할 수 있 으 며 memcached 프로 토 콜 을 통 해 데 몬 과 통신 할 수 있 습 니 다.
특성:
•메모리 만 충분 하면 Memcached 에 저장 할 수 있 는 item 데이터 의 양은 제한 이 없습니다.
•Memcached 단일 프로 세 스 는 32 비트 시스템 에서 최대 2G 메모 리 를 사용 합 니 다.64 비트 시스템 에 서 는 제한 이 없습니다.32 비트 시스템 에서 단일 프로 세 스 를 최대 2G 메모 리 를 사용 할 수 있 도록 제한 하기 때 문 입 니 다.더 많은 메모 리 를 사용 하려 면 여러 포트 로 나 누 어 여러 Memcached 프로 세 스 를 열 수 있 습 니 다.
•최대 30 일의 데이터 만 료 시간,영구적 으로 설 정 된 것 도 이 시간 에 만 료 됩 니 다.상수 REALTIMEMAXDELTA
•단일 item 의 최대 데 이 터 는 1MB 이 고 1MB 가 넘 는 데 이 터 는 저장 하지 않 습 니 다.상수 POWERBLOCK 1048576 제어
Windows 에 Memcache 설치
memcache 의 기본 정 보 를 알 아 본 후 windows 에 memcache 서버 를 설치 하려 고 합 니 다.
1.먼저 memcache 설치 파일 다운로드:[설치 패키지].설치 패키지 에는 x64 와 x86 두 개의 폴 더 가 있 습 니 다.운영 체제 에 따라 하 나 를 선택 하면 memcached.exe 를 찾 을 수 있 습 니 다.이 파일 은 설 치 를 직접 두 번 눌 러 서 실행 할 수 없습니다.cmd 를 통 해 설치 해 야 합 니 다.
2.설치 절 차 는 그림 과 같다.

단계:
1.창+R:cmd 입력
2.G 판 진행:G 입력:
3.Memcached for window 32/64 설치 디 렉 터 리 진행:cd CK\memcached 입력en32or64\x64
4.memcached 설치:memcached-d install 입력
5.서비스 시작:memcached-d start 입력
서 비 스 를 시작 하면 Windows 프로 세 스 에서 memcached.exe 를 볼 수 있 습 니 다.
memcached-d start|stop|shutdown|restart|uninstall|install 시작|정지|닫 기|다시 시작|마 운 트 해제|설치.
설치 절차 가 그리 복잡 하지 않다.첫째:파일(memcached.exe)경 로 를 찾 습 니 다.둘째:memcached-d install 은 OK..
기본 기본 매개 변수 설명:
-p 감청 포트
-l 연 결 된 IP 주소,기본 값 은 이 컴퓨터
-d start memcached 서비스 시작
-d restart memcached 서비스 다시 시작
-d stop|shutdown 실행 중인 memcached 서 비 스 를 닫 습 니 다.
-d 설치 memcached 서비스
-d remcached 서비스 마 운 트 해제
-u 로 실 행 됩 니 다(루트 로 실 행 될 때 만 유효 합 니 다)
-m 최대 메모리 사용 단위 MB.기본 값 64MB
-M 메모리 소 진 시 오 류 를 되 돌려 줍 니 다.항목 을 삭제 하 는 것 이 아 닙 니 다.
-c 최대 동시 연결 수,기본 값 1024
-f 블록 크기 성장 인자,기본 값 1.25
-n 최소 할당 공간,key+value+flags 기본 값 48
-h 도움말 보이 기
서버 작업 이 끝 난 후,우 리 는 이 컴퓨터 telnet 에서 서비스 테스트 를 한 번 할 수 있 습 니 다.(telnet 명령 이 존재 하지 않 는 다 면 컨트롤 패 널 에 가서 windows 의 tel 서비스 기능 을 켜 야 합 니 다.win 7 의 tel 기능 작 동 절 차 는[제어 패 널]->[프로그램 과 기능]->[window 기능 을 열거 나 닫 습 니 다]이 고 tel 과 관련 된 것 을 찾 아 선택 하면 됩 니 다.다른 window 시스템 절차 가 유사 합 니 다.)
telnet 이 정상적으로 작 동 하 는 지 테스트

들 어간 후 먼저 ctrl+]를 누 르 고 리 턴 기능 을 시작 합 니 다.그렇지 않 으 면 입력 정 보 를 볼 수 없습니다.리 턴 기능 시작 성공 후 다음 그림:

그리고 리 턴 을 누 르 면 매개 변수 stats 를 입력 합 니 다.


설치 및 테스트 작업 이 완료 되 었 습 니 다.
인 스 턴 스 코드
C\#버 전의 Memcached 클 라 이언 트 프로그램 이 많 습 니 다.여기 서 우리 가 사용 하 는 것 은 Memcached.Client Library.dll 클 라 이언 트 호출 방법 입 니 다.호출 하려 면 두 개의 DLL 이 필요 합 니 다.
Memcached.Client Library.dll(Memcached 클 라 이언 트 라 이브 러 리)
log4net.dll(log4net 는 Memcached 에 로그 기록 을 제공 합 니 다)DLL 다운로드 주소:[다운로드 클릭]
프로젝트 에서 이 두 dll 을 참조 하고 log4net.dll 을 참조 한 후에 일련의 설정 작업 을 해 야 합 니 다.이전 블 로그 에 log4net 설정 에 대한 소개 가 있 습 니 다.
Log4Net 로그 설정[원본 추가]
메모:Memcached.Client Library.dll 은 log4 net.dll 과 버 전 대응 관계 가 있 습 니 다.
2.WinForm 이나 콘 솔 프로그램 을 사용 하여 log4net 의 설정 파일 을 독립 적 으로 나타 내 고 App.config 에 쓰 려 면 작은 설정 이 필요 합 니 다.
그림:Log4Net.config 속성"출력 디 렉 터 리 로 복사":"항상 복사".그렇지 않 으 면 빈 디 렉 터 리 에서 해당 설정 정 보 를 찾 지 못 하면 오류 가 발생 할 수 있 습 니 다.

memcache 는 메모리 키/값 에 대한 hashmap 를 기반 으로 메모리 에 저장 합 니 다.그래서 우 리 는 주로 hashmap 의 키 값 을 조작 하 는 것 으로 이해 할 수 있다.
다음은 간단 한 조작 이다.[추가,삭제,수정,검사,기한 이 지난 시간 설정]:

//    
string SockIOPoolName = "Test_SockIOPoolName";
string[] MemcacheServiceList = { "172.21.0.192:11211" };

//     
SockIOPool SPool = SockIOPool.GetInstance(SockIOPoolName);
SPool.SetServers(MemcacheServiceList);
SPool.Initialize();

//   Client
MemcachedClient MClient = new MemcachedClient();
MClient.PoolName = SockIOPoolName;

Console.WriteLine("1.  memcache  Hello World");
MClient.Add("Key1001", "Hello World");
Console.WriteLine("2.      {0}", MClient.Get("Key1001"));

Console.WriteLine("3.  memcache  Hello World");
MClient.Set("Key1001", "Hello World -    ");
Console.WriteLine("4.      {0}", MClient.Get("Key1001"));

if (MClient.KeyExists("Key1001"))
{
 Console.WriteLine("5.  memcache  ");
 MClient.Delete("Key1001");
}

if (MClient.KeyExists("Key1001"))
 Console.WriteLine(MClient.Get("Key1001"));
else
 Console.WriteLine("6.     ");

Student stud = new Student() { id = "10001", name = "  " };
MClient.Add("student", stud);
Student Get_stud = MClient.Get("student") as Student;
Console.WriteLine("6.      :{0} {1}", Get_stud.id, Get_stud.name);

MClient.Add("Key1002", "        1  ", DateTime.Now.AddMinutes(1));
while (true)
{
 if (MClient.KeyExists("Key1002"))
 {
 Console.WriteLine("key:Key1002 Value:{0},    :{1}", MClient.Get("Key1002"), DateTime.Now);
 Thread.Sleep(20000);
 }
 else
 {
 Console.WriteLine("key:Key1002     ,    :{0}", DateTime.Now);
 break;
 }
}
출력 결과:

Memcached 캐 시 만 료 메커니즘:
타성 삭제:데이터 가 만 료 되 는 것 을 감시 하 는 메커니즘 을 제공 하지 않 고 타성 입 니 다.어떤 key 데 이 터 를 조회 할 때 만 료 되면 바로 버 립 니 다.
예 를 들 어 키 키 1002 는 2015-04-09 13:54:18 에 나 는 그의 값 을'나 는 만 료 시간 1 분'으로 설정 했다.그의 만 료 시간 은 1 분 이다.2015-04-09 13:55:18 까지 데이터 가 만 료 되 어야 하지만 메모리 에 이 데 이 터 를 저장 합 니 다.클 라 이언 트 가 이 데 이 터 를 요청 할 때 데이터 가 만 료 되 었 는 지 판단 합 니 다.기한 이 지나 면 바로 삭제 하고 빈 곳 으로 돌아 갑 니 다.메모리 가 memcached 로 가득 차 면 가장 오래 사용 되 지 않 은 캐 시 기록 을 삭제 하고 공간 을 비 워 계속 사용 합 니 다.
Memcached 분포 저장 소
다음은 memcached 서버 에 node 1~node 3 대가 있다 고 가정 합 니 다.응용 프로그램 은 키 이름 이'tokyo','kanagawa','chiba','saitama','gunma'인 데 이 터 를 저장 해 야 합 니 다.

먼저 memcached 에'tokyo'를 추가 합 니 다.'tokyo'를 클 라 이언 트 라 이브 러 리 에 전송 하면 클 라 이언 트 가 실현 하 는 알고리즘 은'키'에 따라 데 이 터 를 저장 하 는 memcached 서버 를 결정 합 니 다.서버 가 선택 하면'tokyo'와 그 값 을 저장 하 라 고 명령 합 니 다.

마찬가지 로'카 나 가와','치 바','사이 타 마','gunma'는 서버 를 먼저 선택 하고 저장 합 니 다.다음 에 저 장 된 데 이 터 를 가 져 옵 니 다.가 져 올 때 도 가 져 올 키'tokyo'를 함수 라 이브 러 리 에 전달 해 야 합 니 다.함수 라 이브 러 리 는 데이터 저장 시 와 같은 알고리즘 을 통 해'키'에 따라 서버 를 선택 합 니 다.사용 하 는 알고리즘 이 같 으 면 저장 할 때 와 같은 서버 를 선택 하고 get 명령 을 보 낼 수 있 습 니 다.데이터 가 어떤 이유 로 삭제 되 지 않 았 다 면 저 장 된 값 을 얻 을 수 있 습 니 다.

이렇게 하면 서로 다른 키 를 서로 다른 서버 에 저장 하면 memcached 의 분포 식 을 실현 합 니 다.memcached 서버 가 증가 하면 키 가 분 산 됩 니 다.memcached 서버 가 고장 이 나 서 연결 할 수 없 더 라 도 다른 캐 시 에 영향 을 주지 않 고 시스템 은 계속 실 행 될 수 있 습 니 다.(참고:memcached 전면 분석)

//  
string[] MemcacheServiceList = { "172.21.0.192:11211", "172.21.0.28:11211", "172.21.13.246:11211" };

//     
SockIOPool SPool = SockIOPool.GetInstance();
SPool.SetServers(MemcacheServiceList);
SPool.Initialize();

MemcachedClient MClient = new MemcachedClient();
MClient.FlushAll();

int count = 5;
var time = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
 MClient.Add(i.ToString(), "value" + i);
}
Console.WriteLine("memcached      。  :{0}",time.ElapsedTicks);


time = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
 if (MClient.KeyExists(i.ToString()))
 {
 Console.WriteLine("key:{0}.value:{1}", i, MClient.Get(i.ToString()));
 }
 else
 {
 Console.WriteLine("--------       key:{0}--------",i);
 }
}
Console.WriteLine("memcached        。  :{0}", time.ElapsedTicks);

SPool.Shutdown();
[인 스 턴 스 코드]

좋은 웹페이지 즐겨찾기