Memcach服务:

内存缓存的用途之一是加快常用数据存储区查询的速度。如果许多请求进行具有相同参数的相同查询,并且对结果所做的更改不需要立即显示在网站上,则应用程序可以将结果缓存在 Memcache 中。后续请求可以检查 Memcache,只有在结果不存在或过期的情况下才执行数据存储区查询。会话数据、用户首选项以及在站点的大多数页面上执行的任何其他查询都是不错的缓存候选项。

 

过于数据过期问题:
默认情况下,存储在 Memcache 中的值会保留尽可能长的时间。当因为内存压力而清除某些值时,采用LRU算法.

应用程序在存储一个值时将提供一个过期时间.

sample:
//获取一个alex的缓存
MemcacheService ms = MemcacheServiceFactory.getMemcacheService("alex");
//是否包含一个key
assertFalse(ms.contains("yar"));
//存放一个对象
ms.put("yar", "foo");
assertTrue(ms.contains("yar"));
//打印cache的统计信息
System.out.println(ms.getStatistics());

 

Blob服务:

最大2G的文件
只有通过上传才能调用Blob服务.

 

http://localhost:8888/_ah/admin/datastore

jsp:
//form的编码必须是multipart/form-data

<form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data">
	        <input type="file" name="myFile">
	        <input type="submit" value="Submit">
	    </form>

处理上传:
//当用户submit了表单, 并且这个上传请求被处理之后, 其实blob已经被保存了.
//这个时候只需要使用getUploadedBlobs方法就可以把blob key得到
//一般在业务中: 可以把这个blob key保存在某个实体中

private BlobstoreService blobstoreService = BlobstoreServiceFactory
			.getBlobstoreService();

public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
//myFile是控件的名字
		BlobKey blobKey = blobs.get("myFile");

		if (blobKey == null) {
			res.sendRedirect("/");
		} else {
			res.sendRedirect("/serve?blob-key=" + blobKey.getKeyString());
		}
	}

处理得到blob数据:

private BlobstoreService blobstoreService = BlobstoreServiceFactory
			.getBlobstoreService();

	public void doGet(HttpServletRequest req, HttpServletResponse res)
			throws IOException {
//创建一个blob key
		BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
//得到blob数据, 并返回
		blobstoreService.serve(blobKey, res);
	}

Channel服务:

主要是可以让你的应用和Google的服务器之间保持一个长连接, 这样可以让应用程序向js客户端发送实时消息. 应用: 游戏, 协作性质的应用, 聊天室

 

js客户端:
用户和一个嵌入在web页面中的js客户端交互, js客户端主要完成:
1. 一旦接到从服务端发送来的channel token, 就连接到channel上
2. 监听channel中其他用户的更新, 并使用相关的数据
3. 向服务端发送数据, 以便能够被发送到远程的客户端

服务端:
1. 为每一个独立的js客户端创建唯一的一个channel
2. 对于每一个js客户端创建一个唯一的token,
3. 接受客户端的返回的update信息
4. 发送update信息

待续:

posted on 2010-12-22 23:25  菊次郎  阅读(329)  评论(0)    收藏  举报