志當(dāng)存高遠(yuǎn),功到自然成!

          少年強(qiáng)則中國(guó)強(qiáng),少年進(jìn)步則中國(guó)進(jìn)步!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            53 Posts :: 2 Stories :: 2 Comments :: 0 Trackbacks
          假設(shè)我們有3臺(tái)memcached 服務(wù)器,server1 和server2 有3GB 的內(nèi)存空間,server3 有2GB 的內(nèi)存空間.
          下面程序說(shuō)明怎么來(lái)創(chuàng)建客戶端.
          import com.danga.MemCached.*;

          public class MyClass {

          // 創(chuàng)建一個(gè) memcached 客戶端對(duì)象

          protected static MemCachedClient mcc = new MemCachedClient();

          // 創(chuàng)建  memcached連接池

          static

          {  // 指定memcached服務(wù)地址 String[] servers =
          { "server1.mydomain.com:1121","server2.mydomain.com:1121",
          "server3.mydomain.com:1121" };
          // 指定memcached服務(wù)器負(fù)載量
          Integer[]  weights    ={ 3, 3, 2 };
          // 從連接池獲取一個(gè)連接實(shí)例

          SockIOPool pool = SockIOPool.getInstance();

          // 設(shè)置服務(wù)器和服務(wù)器負(fù)載量

          pool.setServers( servers );

          pool.setWeights( weights );

          // 設(shè)置一些基本的參數(shù)

          //設(shè)置初始連接數(shù)5   最小連接數(shù) 5   最大連接數(shù) 250

          //設(shè)置一個(gè)連接最大空閑時(shí)間6小時(shí)

          pool.setInitConn( 5 );

          pool.setMinConn( 5 );

          pool.setMaxConn( 250 );

          pool.setMaxIdle( 1000 * 60 * 60 * 6 );

          // 設(shè)置主線程睡眠時(shí)間

          // 每隔30秒醒來(lái)  然后

          // 開(kāi)始維護(hù) 連接數(shù)大小

          pool.setMaintSleep( 30 );

          // 設(shè)置tcp 相關(guān)的樹(shù)形

          // 關(guān)閉nagle算法

          // 設(shè)置 讀取 超時(shí)3秒鐘  set the read timeout to 3 secs

          //  不設(shè)置連接超時(shí)

          pool.setNagle( false );

          pool.setSocketTO( 3000 );

          pool.setSocketConnectTO( 0 );

          // 開(kāi)始初始化 連接池

          pool.initialize();

          // 設(shè)置壓縮模式

          //如果超過(guò)64k壓縮數(shù)據(jù)

          mcc.setCompressEnable( true );

          mcc.setCompressThreshold( 64 * 1024 );

          }

          public static void examples() {

          mcc.set( "foo", "This is a test String" );

          String bar = mcc.get( "foo" );

          }

          }
          MemCachedClient 類 常用的方法說(shuō)明

          創(chuàng)建 client對(duì)象 設(shè)置參數(shù):

          MemCachedClient mc = new MemCachedClient();
          //壓縮模式
          mc.setCompressEnable(true);
          // 如果 cache數(shù)據(jù) 大于4 KB  就啟用壓縮
          mc.setCompressThreshold(4096);
          // 基本類型tostring方法
          // 通常不需要設(shè)置
          mc.setPrimitiveAsString(true);
          存儲(chǔ)一個(gè)對(duì)象:

          MemCachedClient mc = new MemCachedClient();

          String key   = "cacheKey1";

          Object value = SomeClass.getObject();

          mc.set(key, value);
          用客戶端hashcode 存儲(chǔ)一個(gè)對(duì)象:


          MemCachedClient mc = new MemCachedClient();

          String key   = "cacheKey1";

          Object value = SomeClass.getObject();

          Integer hash = new Integer(45);

          mc.set(key, value, hash);

          set方法:在cache中存儲(chǔ)一個(gè)指定對(duì)象

             add 和replace 方法功能差不多

            add -- 如果不存在 這個(gè)key的對(duì)象,將會(huì)存儲(chǔ)一個(gè)對(duì)象到cache中
            replace --只有當(dāng)存在指定key對(duì)象的時(shí)候 會(huì)覆蓋已有對(duì)象
          刪除一個(gè)對(duì)象:

          MemCachedClient mc = new MemCachedClient();

          String key   = "cacheKey1";

          mc.delete(key);
          結(jié)合hashcode 刪除一個(gè)對(duì)象:

          MemCachedClient mc = new MemCachedClient();

          String key   = "cacheKey1";

          Integer hash = new Integer(45);

          mc.delete(key, hashCode);
          怎么cache計(jì)數(shù),增 減計(jì)數(shù):

          MemCachedClient mc = new MemCachedClient();

          String key   = "counterKey";

          mc.storeCounter(key, new Integer(100));

          System.out.println("counter after adding      1: " mc.incr(key));

          System.out.println("counter after adding      5: " mc.incr(key, 5));

          System.out.println("counter after subtracting 4: " mc.decr(key, 4));

          System.out.println("counter after subtracting 1: " mc.decr(key));
          利用客戶端的hashcode存儲(chǔ)計(jì)數(shù) 增減 計(jì)數(shù):

          MemCachedClient mc = new MemCachedClient();

          String key   = "counterKey";

          Integer hash = new Integer(45);

          mc.storeCounter(key, new Integer(100), hash);

          System.out.println("counter after adding      1: " mc.incr(key, 1, hash));

          System.out.println("counter after adding      5: " mc.incr(key, 5, hash));

          System.out.println("counter after subtracting 4: " mc.decr(key, 4, hash));

          System.out.println("counter after subtracting 1: " mc.decr(key, 1, hash));
          獲取一個(gè)對(duì)象:

          MemCachedClient mc = new MemCachedClient();

          String key   = "key";

          Object value = mc.get(key);
          用客戶端hashcode獲取一個(gè)對(duì)象:

          MemCachedClient mc = new MemCachedClient();

          String key   = "key";

          Integer hash = new Integer(45);

          Object value = mc.get(key, hash);
          MemCachedClient mc = new MemCachedClient();

          String key   = "key";

          Integer hash = new Integer(45);

          Object value = mc.get(key, hash);
          從cache 中獲取多個(gè)對(duì)象

          MemCachedClient mc = new MemCachedClient();

          String[] keys      ={ "key", "key1", "key2" };Mapvalues = mc.getMulti(keys);
          用客戶端hashcode 從cache中獲取多個(gè)對(duì)象
          MemCachedClient mc = new MemCachedClient();
          String[] keys      = { "key", "key1", "key2" };

          Integer[] hashes   =
          { new Integer(45), new Integer(32), new Integer(44) };
          Mapvalues = mc.getMulti(keys, hashes);
          清空所有的對(duì)象
          MemCachedClient mc = new MemCachedClient();

          mc.flushAll();
          得到服務(wù)器memcached的狀態(tài)信息
          MemCachedClient mc = new MemCachedClient();

          Map stats = mc.stats();
          注意點(diǎn)
          1:Failover/Failback
          當(dāng)一個(gè)memcached服務(wù)器失效的時(shí)候客戶端默認(rèn)會(huì)failover另一個(gè)服務(wù)去.

          如果失效的服務(wù)器 恢復(fù)運(yùn)行,客戶端會(huì)返回到原來(lái)連接的服務(wù)器.
          如果你不想用這個(gè)功能 設(shè)置下面的參數(shù)
          pool.setFailover( false );
          pool.setFailback( false );

          2:序列化

          Boolean
          Byte
          String
          Character
          StringBuffer
          StringBuilder
          Short
          Long
          Double
          Float
          Date
          java默認(rèn)的類型沒(méi)有實(shí)現(xiàn)序列化 可以設(shè)置
          mcc.setPrimitiveAsString( true )替代.
          Meetup.com實(shí)踐過(guò)程中得出的一個(gè)經(jīng)驗(yàn) ,項(xiàng)目中model 對(duì)象implement Externalizable 實(shí)現(xiàn)序列化,
          可以節(jié)省cache 對(duì)象的大小。從而節(jié)省網(wǎng)絡(luò)帶寬和內(nèi)存空間。

          Feedback

          # re: java版的memcached client及使用文檔 2014-09-05 16:51 aaaaaaa
          你他媽的傻逼啊. 用什么類包啊 類包 你大爺?shù)?草你媽  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 资中县| 黔西| 漳浦县| 大方县| 南涧| 临泽县| 永泰县| 车险| 舒兰市| 皮山县| 五河县| 通海县| 甘孜| 彰武县| 诏安县| 日照市| 天柱县| 冀州市| 寿阳县| 太仆寺旗| 吕梁市| 大石桥市| 玉屏| 连南| 噶尔县| 怀集县| 资溪县| 池州市| 沙田区| 古蔺县| 天长市| 景洪市| 永安市| 雅安市| 建昌县| 电白县| 衡水市| 呼玛县| 沁阳市| 金昌市| 基隆市|