導航:首頁 > 編程語言 > memcachejava手冊

memcachejava手冊

發布時間:2023-09-05 18:33:50

『壹』 java怎麼樣用memcache緩存一張表的數據

其實就相當於在應用程序資料庫之間開了一塊內存區域,將一些高頻訪問的數版據放在其權中,避免每次都請求資料庫。至於之所以用memcached和redis,而不是自己在程序里開個hashmap,是因為這塊區域可以共享且容易管理,在集群環境下更方便使用。

有些做法是直接將數據序列化後存在redis的string或是memcached中,也有些其他做法是利用redis特有的數據結構存儲一些關系,例如用sorted set存排行榜,string用來計數,set做一些倒排索引、用戶好友關系之類的。我覺得這些都可以稱之為緩存。

『貳』 java下 iso app登錄伺服器,如何保持伺服器session

app登錄伺服器Session的保持實現方式:
1 ) 使用Cookie來實現
伺服器給每個Session分配一個唯一的jsESSIONID,並通過Cookie發送給客戶端。
當客戶端發起新的請求的時候,將在Cookie頭中攜帶這個JSESSIONID。這樣伺服器能夠找到這個客戶端對應的Session。
2 )使用URL回顯來實現
URL回寫是指伺服器在發送給瀏覽器頁面的所有鏈接中都攜帶JSESSIONID的參數,這樣客戶端點擊任何一個鏈接都會把JSESSIONID帶給伺服器。
如果直接在瀏覽器中輸入url來請求資源,Session是匹配不到的。
Tomcat對 Session的實現,是一開始同時使用Cookie和URL回寫機制,如果發現客戶端支持Cookie,就繼續使用Cookie,停止使用URL回寫。如果發現Cookie被禁用,就一直使用URL回寫。jsp開發處理到Session的時候,對頁面中的鏈接記得使用 response.encodeURL() 。
一般手機端與伺服器交互沒有實現在同一session下:
因為手機端在訪問web伺服器時,沒有給http請求頭部設置sessionID,而使用web瀏覽器作為客戶端訪問伺服器時,在客戶端每次發起請求的時候,都會將交互中的sessionID:JSESSIONID設置在Cookie頭中攜帶過去,伺服器根據這個sessionID獲取對應的Session,而不是重新創建一個新Session(除了這個Session失效)。

『叄』 Java游戲開發要學什麼

Java游戲開發要學什麼?所謂的游戲開發編程語言其實有很多,基本上任何一種語言都可以作為游戲伺服器的編程語言。這需要根據自己游戲的類型和要求加以選擇。比如C++,Java,Erlang,go等等。目前我用過的只有C++和Java.但是以Java為主。所以接下來就以自己的經驗,談談以Java為核心的游戲伺服器開發技術體系。

Java目前作為游戲伺服器開發語言已經很是普遍。但是大多數是作為頁游或手游的伺服器,而端游戲一般選擇C++,因為端游對伺服器的性能要求相對比較高一些。兩種語言各有利弊。C++效率高,但是掌握度難些。沒有Java易於掌握。而目前對於追求快速上線率的頁游和手游來說,Java成了一個不錯的選擇。

一、Java的技術系統

需要學習的技術:

(1)Java基礎知識

(2)JavaNIO編程

(3)Netty,Mina網路框架精通一種,其它作為了解。

(4)一種緩存框架:Redis;memcache熟悉使用一個。

(5)SQL語言,用於資料庫:mysql資料庫

(6)springmvc主要用於http協議的伺服器

(7)多線程編程,明白線程安全的重要性。

(8)Java並發集合的掌握。

(9)linux常用的基本命令及shell腳本。

(10)資料庫操作,比如mybatis。

以Java為伺服器編程語言來說,掌握Java的基本知識就不必說了,是必不可少的。可以參考《Java編程思想》,《Java核心技術》等書。根據游戲通信協議的不同,大致有兩種實現方式:Socket和http。先說簡單些的http協議,這個協議已經很成熟的應用到了網站上。而Java語言也可以用於網站開發,所以相當就簡單些。現在有很多開源的伺服器軟體,比如:tomcat,resin等。游戲前端不管是頁游flash,還是手游的Android,IOS都支持http協議,只要把游戲的邏輯數據按post方法向伺服器發出請求即可了。

二、學習流程

當然了,學習這些東西並不是一蹴而就的。需要根據實踐循環漸進,這里推薦一個學習流程:

(1)對於初學Java的人來說,如果自學能力好些,可以買些書自己練習,而現在又更的多選擇參加Java培訓機構,以快速的掌握Java的知識。

(2)掌握了Java知識之後,要多寫代碼實踐。這個時候可以結合mysql學習SQL語言,掌握資料庫的操作。比如用springmvc寫一個小網站,用mybatis實現網站數據的增,刪,改,查等功能。

(3)完成上步之後,可以在伺服器程序和資料庫之間加一個緩存,學習redis或memcache。

(4)把程序部署到linux伺服器上,練習linux的基本命令及shell腳

免責聲明:內容來源於公開網路,若涉及侵權聯系盡快刪除!

『肆』 java中memcache怎麼用

1. memcached client for java客戶端API: client for java

引入jar包:java-memcached-2.6.2.jar

package com.pcitc.memcached;

import com.danga.MemCached.*;

public class TestMemcached {
public static void main(String[] args) {
/* 初始化SockIOPool,管理memcached的連接池 */
String[] servers = { "192.168.1.111:11211" };
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(servers);
pool.setFailover(true);
pool.setInitConn(10);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaintSleep(30);
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setAliveCheck(true);
pool.initialize();
/* 建立MemcachedClient實例 */
MemCachedClient memCachedClient = new MemCachedClient();
for (int i = 0; i < 10; i++) {
/* 將對象加入到memcached緩存 */
boolean success = memCachedClient.set("" + i, "Hello!");
/* 從memcached緩存中按key值取對象 */
String result = (String) memCachedClient.get("" + i);
System.out.println(String.format("set( %d ): %s", i, success));
System.out.println(String.format("get( %d ): %s", i, result));
}
}
}

2. spymemcached客戶端API:spymemcached client

引入jar包:spymemcached-2.10.3.jar

package com.pcitc.memcached;

import java.net.InetSocketAddress;
import java.util.concurrent.Future;

import net.spy.memcached.MemcachedClient;

public class MClient {

public static void main(String[] args) {
setValue();
getValue();
}

// 用spymemcached將對象存入緩存
public static void setValue() {
try {
/* 建立MemcachedClient 實例,並指定memcached服務的IP地址和埠號 */
MemcachedClient mc = new MemcachedClient(new InetSocketAddress(
"192.168.1.111", 11211));
Future<Boolean> b = null;
/* 將key值,過期時間(秒)和要緩存的對象set到memcached中 */
b = mc.set("neead", 900, "someObject");
if (b.get().booleanValue() == true) {
mc.shutdown();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}

// 用spymemcached從緩存中取得對象
public static void getValue() {
try {
/* 建立MemcachedClient 實例,並指定memcached服務的IP地址和埠號 */
MemcachedClient mc = new MemcachedClient(new InetSocketAddress(
"192.168.1.111", 11211));
/* 按照key值從memcached中查找緩存,不存在則返回null */
Object b = mc.get("neead");
mc.shutdown();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

3.兩種API比較
memcached client for java:較早推出的memcached JAVA客戶端API,應用廣泛,運行比較穩定。
spymemcached:A simple, asynchronous, single-threaded memcached client written in java. 支持非同步,單線程的memcached客戶端,用到了java1.5版本的concurrent和nio,存取速度會高於前者,但是穩定性不好,測試中常報timeOut等相關異常。
由於memcached client for java發布了新版本,性能上有所提高,並且運行穩定,所以建議使用memcached client for java

『伍』 php java 使用memcache 有何不同

通過telnet memcache服務及memcache協議發現flag不一致,進一步分析源碼,得到以下不同:
.NET
internal enum SerializedType : ushort
{
ByteArray = 0,
Object = 1,
String = 2,
Datetime = 3,
Bool = 4,
//SByte = 5, //Makes no sense.
Byte = 6,
Short = 7,
UShort = 8,
Int = 9,
UInt = 10,
Long = 11,
ULong = 12,
Float = 13,
Double = 14,

CompressedByteArray = 255,
CompressedObject = 256,
CompressedString = 257,
}

JAVA:
public static final int MARKER_BYTE = 1;
public static final int MARKER_BOOLEAN = 8192;
public static final int MARKER_INTEGER = 4;
public static final int MARKER_LONG = 16384;
public static final int MARKER_CHARACTER = 16;
public static final int MARKER_STRING = 32;
public static final int MARKER_STRINGBUFFER = 64;
public static final int MARKER_FLOAT = 128;
public static final int MARKER_SHORT = 256;
public static final int MARKER_DOUBLE = 512;
public static final int MARKER_DATE = 1024;
public static final int MARKER_STRINGBUILDER = 2048;
public static final int MARKER_BYTEARR = 4096;
public static final int F_COMPRESSED = 2;
public static final int F_SERIALIZED = 8;

修改了.NET中部分flag定義,考慮到每種語言的不同性,所以只保證簡單的字元串能夠在各語言中通用,把 String = 2,改為 String = 32,

這樣也能保證php中沒問題。php在$mem->set(key,value,32expire);這個32是必須的(表示字元串)。對象的話可以轉為json再存到memcache中去,(這是使用pecl中memcache這個客戶端的情況)

另外關於hash演算法的,考慮到通用,使用crc32來做hash演算法,需要修改ServerPool中
internal ServerPool(string[] hosts) {
List<SocketPool> pools = new List<SocketPool>();
foreach(string host in hosts) {
SocketPool pool = new SocketPool(this, host.Trim());
pools.Add(pool);
}
hostList = pools.ToArray();
}
internal SocketPool GetSocketPool(uint hash) {
if (hostList.Length == 1) {
return hostList[0];
}
return hostList[hash % hostList.Length];
}
及MemcachedClient中hash方法的代碼為使用crc32

寫到這問題並沒有完全解決,當使用http://pecl.php.net/package/memcache做php客戶端的情況,這個客戶端不支持選擇自己需要的hash演算法,並且此客戶端已經很久沒有更新了。

首推使用http://pecl.php.net/package/memcached做php客戶端,問題還沒完,進過測試發現這樣的情況:
java寫入,php、.net均可正常讀取
.net寫入,php、java均可正常讀取
php寫入,java無法正常讀取,.net可正常讀取,
分析源代碼發現,這個php客戶端寫入數據的時候,flag總設置為0,沒有設置成我們需要的,為了保證三大語言均能正常讀取寫入,我們可以更改源代碼php_memcached.c中的static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool by_key)方法,在switch(op)增加一行代碼 flags = 32;這樣設置後,phpize、./configure、make、make install。
這樣設置有個前提,所有存入memcache中的對象均需序列號,數據讀取出來後再反序列化即可,當然,其它簡單數據類型也需要轉換成字元串才能存入到memcache中去。

『陸』 java web 開發 如何實現 輸入密碼三次錯誤 後 鎖定賬戶功能。

鎖定是很簡單的,只要在用戶表中加上失敗次數,鎖定標志,鎖定時間(可選)。專
每次登錄時,已屬經鎖定直接禁止登錄。
沒有鎖定就判定,如果失敗就把失敗次數+1,如果成功就重新置0。
失敗次數+1後判斷失敗次數是否是3,是3的話將鎖定標志置為真,並設上時間。

其實比較煩的是解鎖。如果手工解鎖還好,在管理員界面修改鎖定標志即可。如果要自動解鎖。需要定時運行代碼,判斷是否解鎖,這時就需要鎖定時間這個欄位了。

由於是選擇高質量答案,現在才看到題目中有不用資料庫和cookie的要求。那麼辦法就只有使用memcache或靜態Map。細節和上面的說法類似,就不細說了。唯一問題memcache不能保證持久性,所以有一定的可能會提前解鎖(幾率不大)。而靜態map可能會被一些優化工具判斷為內存泄漏。

『柒』 memcache 用java語言編寫客戶端 如何在客戶端獲取所有的value值呢 用stats cachemp只能獲取幾十條數據

memcache 是一個緩存吧。不是配置到hibernate里。
查詢緩存中你使用就行了。不是根據所有的identify 儲存的么。
你使用 list() 或者是 iterator();都會獲取所有的信息啊。
但是小心出現N+1問題。

閱讀全文

與memcachejava手冊相關的資料

熱點內容
更改程序圖標c語言 瀏覽:629
網路電視偷停怎麼辦 瀏覽:418
linux連接ftp 瀏覽:512
es文件瀏覽器視頻筆記 瀏覽:874
mac無法打開描述文件 瀏覽:134
什麼軟體打文件 瀏覽:53
資料庫無數據變成0 瀏覽:899
名企筆試如何刷編程題 瀏覽:49
js跳到頁面某地 瀏覽:550
jsp展示clob欄位 瀏覽:779
nyx在網路上是什麼意思 瀏覽:145
樂播農業app是什麼 瀏覽:530
編程框架如何開發 瀏覽:136
金庸群俠傳3修改代碼 瀏覽:712
檢察院的文件類別有哪些 瀏覽:793
怎麼把九游殘留數據刪除 瀏覽:828
有什麼女生主動聊天的app 瀏覽:436
有哪些可以督促自己的app 瀏覽:244
用USB傳輸視頻文件夾顯示為空 瀏覽:710
恢復文件軟體免費版手機 瀏覽:648

友情鏈接