項目做了很多,雖然用memcached的項目也有很多。但是沒有太關注安裝memcached細節問題
最近做了一個項目,把很多東西都放到memcached緩存中,進行緩存。
因為內容可能較多,可能會有200M~500M的樣子。
這樣就要在安裝memcached的時候。把最大內存使用提高,不然只能使用默認的64M
所以下載了memcached文件1.2.6版本
然后用命令行進行安裝
memcached -d install -m 500
本想以為這樣安裝就萬事大吉了。因為看到所有的文章都是說這樣安裝-m參數是用來修改最大使用內存
但是用telnet 127.0.0.1 11211
stats
去查看memcached狀態的時候。發現最大使用內存還是STAT limit_maxbytes 67108864 (64M)
我不是明明加上了-m參數嗎。為什么這個值還是64M呢。
這不是我想要的。所以這次安裝沒有成功,把這個服務刪除
然后直接用memcached -m 500直接這樣在命令行運行,這樣發現竟然成功的把最大使用內存提高到了500M
但是又有問題。我這樣運行的方式命令行不能關閉。要一直開着才可以。如果把命令行關了。memcached就沒有運行了
雖然這樣運行的方式不是以服務的方式運行,而是以當前用戶進行運行,但確實是把最大使用內存提高了。
雖然修改可以。但是如果命令行不能關閉,要一直運行。這是在服務器上是行的。
最終還是得以服務的方式運行,所以這種方式還是放棄了。
最后。還是用第一次的方式安裝,然后打開服務去看
發現一個問題,上圖片
我明明是有用-m 500 而在服務屬性那里。還是只有-d runservice,沒有我們用的-m 500的參數
所以在我們啟動的時候。還是以默認的64M最大使用內存來用。找到問題就好解決,
開始我還想用sc create服務的方式。來創建,按理說是可以加上-m參數。這個沒有做實驗。
我是直接修改注冊表的方式,打開注冊表,查找"memecached Server"的鍵
我們可以找到
修改ImagePath,在-d runserver前面加上-m 500保存
然后你再看看服務屬性,發現已經有了-m 500參數
然后啟動服務,現在就可以看到最大使用內存已經修改到500M了
事情到止已經OK,為了這破問題,花了我半天的時間。然后在博客園發布了一個博問,
事情還是沒有解決。我還以為我設置了-m參數,用stats去看還是64M,
還專門寫了一個測試庫來測試到是不是顯示問題

1 static void Main(string[] args) 2 { 3 MemcachedClient cacheClient = new MemcachedClient(); 4 long count = default(long); 5 string val = "abceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefgabceefg"; 6 for (int i = 0; i < 5; i++) { 7 val = val + val; 8 } 9 long MaxKey = default(long); 10 if (cacheClient.Get("MaxKey") != null) MaxKey = cacheClient.Get<long>("MaxKey"); 11 string key = "Key" + MaxKey.ToString(); 12 while (cacheClient.Store(StoreMode.Add, key, MaxKey.ToString() + val, new TimeSpan(1, 0, 0))) 13 { 14 string cacheVal = cacheClient.Get<string>(key); 15 cacheClient.Store(StoreMode.Set, "MaxKey", count); 16 MaxKey += 1; 17 key = "Key" + MaxKey.ToString(); 18 Console.WriteLine(MaxKey.ToString()); 19 if ((MaxKey % 5000) == 0) Console.ReadKey(); 20 } 21 Console.ReadKey(); 22 }
下面是測試用代碼的配置文件

1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <configSections> 4 <sectionGroup name="enyim.com"> 5 <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" /> 6 </sectionGroup> 7 <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" /> 8 </configSections> 9 <enyim.com> 10 <memcached> 11 <servers> 12 <add address="127.0.0.1" port="11211" /> 13 </servers> 14 <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" /> 15 </memcached> 16 </enyim.com> 17 <memcached keyTransformer="Enyim.Caching.TigerHashTransformer, Enyim.Caching"> 18 <servers> 19 <add address="127.0.0.1" port="11211" /> 20 </servers> 21 <socketPool minPoolSize="2" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" /> 22 </memcached> 23 </configuration>
問題解決。花了我半天的時候。在打算放棄的時候。發現了服務啟去方面的問題。
心情很happy啊。