博客

  • Andorid 10分钟了解

    1. Android App 想要实现什么

    我觉得

    Android = 独创设计(50%) + 简单开发(25%) + 强大API(25%)

    • 独创设计: 手机应用已经非常纷繁芜杂复杂了。学习可以是模仿,成功还需要自己独创的设计
    • 强大API: Android OS提供了大量的强大API,比如直接控制网络,电话,短信,GPS等。加上Google地图这类Mashup,可以实现很多强大功能。
    • 简单开发: 开发的要求并不是很高。基本上开发效率和你了解Andorid Reference程度相等。之所以说是了解,意思是你知道Androdi SDK是否有这个功能就足够了,用到的时候参看Sample就可以很容易掌握。

    所以,如果你想用小小的手机,解决一个生活中的现实问题,那Android非常适合你。 如果考虑作为一个系统的手机客户端,那么最好以离线+同步的方式来减少不必要的流量计费

    2. Android UI设计

    以下转自英文资料

    2.1. 别做的

    • 别把其他平台的外观直接放到Android
    • 别滥用等待进度条和弹出对话框
    • Layout不要使用绝对位置
    • 像素单位不要使用px,而是要用dp(字体是sp)
    • 不要使用小字体

    2.2. 要做的

    • 管理好复杂屏幕的图片等资源文件的版本
    • 把按钮,选择框这些触发对象做得又大又明显
    • 遵循 Android的icon做成规范
    • 选择美观的外边距,内边距
    • 支持轨迹球和其他输入控制
    • 小心管理好各个窗口的迁移堆栈
    • 处理好手持方向的变化(比如竖放,横放)
    • 整理通用的风格,模版,颜色,以减少各个窗口自己管理的冗余

    3. Android如何发布

    Android的安装包是一种叫*.apk(Android Package)文件。程序最终都会以这种新式发布。

    可以用直接提供用户*.apk下载,也可以通过Androdi商城发布,免费或收费的让用户自由下载。

    商城发布没有研究过,也许需要Google审批。

    4. Android如何运行

    因为Android可以直接控制几乎所有的手机功能。所以*.apk必须明确需要哪些数据访问权限。在下载,安装的时候都回明确告知用户,“XXX数据将会被使用,你是否同意”云云,保护用户的手机不受恶意操作。

    手机上安装后,只需要点击应用菜单的程序图标,程序就可以启动。

    安装展开后的执行文件(*.dex文件)会在一个叫Dalvik的虚拟机上运行。和JVM的最大不同,它是基于寄存器的,设计得相对轻量。

    dex文件没有使用java的class字节编码,是用自己特有的方式。

    5. Android如何开发

    5.1. 开发环境安装

    网上有很多资料,因为目前开发平台只有Google提供的一款,所以内容都基本相同。大体上

    • 下载Androdi SDK

    可能是被河蟹的缘故。不能访问http://developer.android.com的时候后面加上.nyud.net/如http://developer.android.com.nyud.net/

    • 下载Eclipse(带ADT Plugin)
    • 设置Eclipse 榜定 SDK
    • 使用ADT(直接SDK的也行,eclipse插件也行)在线更新最新的SDK(现在是2.2)
    • 使用ADT建立一个模拟器实例
    • helloWorld就可以几分钟搞定了

    建议安装

    • Eclipse如果没有SVN插件的话,事先装好
    • 用到永久存储SQLite概率比较高。为方便编辑,装一个Firefox的 SQLite Manager的插件

    因为使用了Java开发平台(转换成dex格式都是自动的,也没有深究,据说使用原始SDK,可以用C++编写直接代码),所以程序语言都很熟悉。

    5.2. 基本术语

    • Activity
      • 通常就是一个屏幕
    • Intent
      • 一个对于操作动作的概念抽象。大到应用间的移动,广播,小到应用内的窗口 移动都需要Intent.不准确,但目前可以这样理解:一个操作需要当前activity以外的外部响应的时候,需要为这个外部响应创造一个泛 Intent的实例,之后把必要消息,参数传给这个外部实例,指派它去完成这个动作。
    • Intent Filter
      • 外部响应的过程,并不是由当前的Acitvity直接去指派某某去做。而是间接的告诉系统,我的这个任务是什么,请帮我指派符合要求响应。而系统正是通过各个响应的Inter Filter来确认,谁是最适合的。如果多个合适,就出一个选择让用户定夺。
    • Service
      • 顾名思义,就是后台服务。比如杀毒软件。通常他们也有Activity来做设置,启动操作什么的。一旦启动后,会长时间呆在后台运行。
    • ContentProvider
      • 可以通过ContentProvider把资源或者服务共享。与SQLite数据库存储方式不同,用ContentsProvider保存的data,通过统一的URI命名方式,可以让手机上其他的所有应用程序访问到。而数据操作的方式,非常类似SQLite的数据库操作。

    5.3. 一个应用的资源包括

    • 对应Android版本设置(default.properties)
      • 不用自己写。
    • 应用的配置描述文件(AndroidManifest.xml
      • 整体描述,管理整个应用。例如入口窗口是什么,都有哪些窗口,每个窗口的Java Class是什么。类似Struts的config。
    • UI描述文件(res/layout/*.xml)
      • 用来设置各个界面的Layout。基本类似一个HTML文件。如同Ajax操纵HTML的各个tag一样,需要为那些需要操作的项目编号(如:@+id/setitem_textview01)
    • 一些CodeBook,Message类似的配置文件(res/values/*.xml)。
      • 这些文件可以分类型定义。UI文件和Java程序都可以直接读取这些定义。
    • 根据以上设置文件,会自动生成一个R.java(gen/package/)的文件。
      • 简单的说,就是为每一种配置类型(例如刚才的ID编号,全局的 message定义等)建立一个inner Class。每个Class里面就是各个设置项目的Const定义。因为整个App就一个R.java,所以相同类型的项目就不要取一样的名字。同时既然 是自动生成,千万别手改的。
    • 其他图片,flash等资源文件(res)
    • 剩下的就是Java文件。
      • Android应用的单位就是各个窗口,这个被称为activity(等同于其他语言的form)。所以有多少个不同的窗口,就有多少个activity。而每个窗口是事件驱动的。所以里面也就是些 OnCreate(),onActivityResult()等方法。其他的,例如共通程序,工具类,数据库操作等等,和普通的Java Class没有什么区别。

    5.4. Activity的典型设计流程

    • 窗口活动组成我们的应用。所以最开始必须确定哪一个是入口窗口(menu),哪些是主窗口,那些是附属窗口(类似popup窗口)。以及他们的迁移。
    • 建立一个继承Activity的窗口类 FooActivity
    • 建立一个相关的UI界面 Foo.xml (这个时候系统会自动更新R.java)
    • 在应用中注册这个窗口 AndroidManifest.xml。

    [sourcecode language=’xml’]


    [/sourcecode]
    如果是入口窗口,需要注明
    [sourcecode language=’xml’]


    [/sourcecode]

    • 在FooAcitvity里面绑定view

    [sourcecode language=’java’]
    setContentView(R.layout.xxx);
    [/sourcecode]

    • OK,直接Run,在应用程序里面就有你的程序了。
    • 接着是编写事件触发。首先通过R.java找到那个按钮对象

    [sourcecode language=’java’]
    Button addPayoutBtn = (Button) findViewById(R.id.setitem_add_btn);
    [/sourcecode]

    • 然后为这个按钮绑定监听

    [sourcecode language=’java’]
    Button addPayoutBtn = (Button) findViewById(R.id.setitem_add_btn);
    addPayoutBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // event处理
    }
    });
    [/sourcecode]

    • 如果是迁移(启动下一个窗口)

    [sourcecode language=’java’]
    startActivity(new Intent(MainActivity.this, BookSearchActivity.class));
    [/sourcecode]

  • 同事婚礼

    前些日子参加两位love in the office的年轻同事的婚礼。

    他们在老家已经办过酒,回南京又请些朋友,同事,一同狂欢的。

    两桌多的人,都是我熟悉的“同事”,不过大一半是旧同僚啦。也好,以前聚会总是在谈公司的事情,感觉圈子的好小好小,现在扩展到了南京IT界了,说不定今后还能扩充打其他行业,也算“被”扩展了一回。

    和一个之前的旧同事聊了很多。我觉得他的选择并没有错,我留下来也没有错。因为每个人都有自己的责任。而这里,还有很多我值得留恋的地方。。。

    也祝福我的两位同事(其中一位也刚刚离开公司),白头偕老,永浴爱河。

  • 偏见与客观

    国人或多或少都知道刘晓波这个人,他是史上第二位获得诺贝尔奖的中国人。这到底是一种喜悦,还是一种悲哀,世人自有判断。
    不过特别搜索了一些他的文章来看。很令人惊诧!对制度,对中共的一些批评自然很多,这也无什么新意。不过毫无掩饰地崇尚美国,实在有谄媚之嫌。譬如极其夸张地说西方已经在各个方面进化到人类极致,以及911之后声嘶力竭地想为美国奉献一切地急切心愿,无不流露出对美国狂热。
    其实到此我顶多也就是鄙视一下而已,人家崇尚西方,也是他的自由。可是随之而来的气愤,却再也按捺不住。这就是他对中国人,中国文化的不屑的言行。他说如果不是英语不好,他早可以和中国没有任何关系,就可以完完全全地成为一个西方人。他认为中国人的各种问题和中国的人种低劣有关系。去评判一个复杂的现实固然会因人而异,所以这通常导致的是争论不休。而去评判一个历史,通常是不明智的。若如刘晓波说得那样,忘却屈原和杜甫,完全的西化,不参杂一点中国的遗留,那中国还有存在的必要么。5000年的文化岂能如此被践踏!

    因为我看到的都是他自己的文章,无论他有多执著,有多善于演讲。我都很不理解这样的人竟然能获得诺贝尔和平奖。也许,很多人和事,在当今来看是如此的寻常,而在百年之后,后人会用一种异样目光盯着我们呢。

  • 5分钟的Social Game幻灯片

    [slideshare id=1652629&doc=socialgame-090628225331-phpapp02]

  • Social Design Best Practices 社交网站设计最佳实践 (翻译自Google)

    对于一个新手,如何使社交应用既有趣又有意义,常常感觉无所适从。为了加快大家对此的理解,我们准备了一些实践优秀社交应用的提示和建议。这些最佳实践,也不是什么尚方宝剑,不一定适合所有场合。但是看过这些火花般的想法,你会对,如何争取新用户,保持旧用户有一些新思路。而且也能够,四两拨千斤似地让你的内容永葆新鲜,快速向四方传播。

    Engage Quickly 抓住眼球

    在社交网站,用户可以很容易接触到一个陌生的应用,不过一旦发现没什么用也会立即删除掉。这条要教给你的是,应用的第一印象非常的重要,在用户失去耐心前必须吸引住用户。在这里,我建议你建立起一个30秒的用户体验。不必把高级功能面面俱到告诉用户,这样只能让用户分心。而是要在最短的时间,用最简单的功能让用户尝到甜头。你不妨试试下面的方法

    • 清晰描述你的程序的核心功能和特征的独到之处
    • 将你的应用植入一些有趣好玩的内容(特别是在朋友间的传递内容),从而有利于提高浏览的友好体验。
    • 让用户自己增加内容,修改设置,使用户感觉自己就是这个应用的主人。这可以提高用户的忠诚度。

    Mimic Look and Feel 模仿界面

    不同的OpenSocial社交网站都会有个自己不同的外观风格。设计的时候,要注意把你的应用的字体,按钮,标签等与所在社区网站风格一致。

    有时候需要体现应用的独特性。这个时候,在UI个性化的同时,也不要忽视使用者的审美需求,并体现个性表述。

    Enable Self Expression 个性表述

    社交网站中的用户信息页面,通常用来设置个人自己的特点,兴趣和喜好。一方面,通过查看主人的信息,可以了解主人的个性表述,拓展自己的社区关系。另外一方面,通过查看过客的信息,可以与过客一起了解,交流,共享共同的兴趣。应用程序也可以利用用户信息页面提供用户自己的个性表述。这既可以像通常那样,让用户自己设定一些喜欢的娱乐项目,品牌和其他爱好,也可以通过譬如送礼物,传递图标,对话等特殊的手段来实现用户的个性表述。

    Make it Dynamic 保持动态

    好的应用,不能仅仅停留在静态的提供个性表述上面,还要动态地提供有趣的用户体验。变化可以源自于交互中的社区成员的状态信息变化(比如网上菜地扩张),也可以来自于应用内容的增加修改(比如菜种增加)。无论是哪一种场合,日积月累的变化都能保持你的应用新鲜有趣和激情洋溢。

    Expose Friend Activity 公开活动

    要使你的应用保持更新和流行,一个捷径就是记录和公开用户的朋友们的活动。这可以看做一种应用的特殊业务流,朋友们的新消息或者是状态修改,本身就是应用内的内容提供和更新。通过这种活动,用户能够了解朋友们都在用这个软件做什么,从而提高软件的使用率和信息修改的频度。

    Browse the Graph 浏览网络

    浏览朋友活动是众多社交网络图浏览的一种。用户通常感兴趣那种暗地的活动,比如看看朋友最近的活动,比较一下大家的公布的信息和一些选择。并通过自己的活动间接影响朋友的活动。为了支持这种交互,有必要提供简单的朋友信息浏览。这通常可以提供转到朋友Profile信息的链接,或者索性在应用中直接显示朋友们活动的概览。

    浏览社区的信息,当然不仅仅包括朋友活动信息。有些情形下,特别是寻找志趣相投朋友的时候,朋友的朋友也是值得关注的。你的应用,应当通过挖掘用户的个性信息,帮助用户开拓新的朋友和新的信息,从而实现用户在社交网络的社交圈的附加值。

    Drive Communication 促进交流

    浏览朋友的状态,活动情况,很容易引起对话,从而提供机会实现更深入地互动和交流。在交流可能发生的地方,明显地摆一些进入交流的选项或者提示,是个不错的实践。当然,也 可以为这类交流提供专门固定的场所,譬如评论系统或者一个留言墙。另外,也可以利用社区网站提供的留言,Email或者即时通讯系统,甚至可以通过中间通讯 层,来“戳一下Ta”或者其他手势,捎信等功能。

    Build Communities 建立社区

    社交网站的关系网络通常非常巨大,一个用户通过简单追踪(比如朋友的朋友的朋友。。。),也能迅速形成一个巨大的直接社交圈。而应用程序通过建立规模小点的社区,就能方便地提供丰富,有趣的功能,帮助用户体验完整的社交活动。应用中通常会构建以下三种类社区。

    • 分门别类的社交关系(比如好朋友,家庭成员,同学等)
    • 在直接社交圈中分享价值
    • 在整个社交网络中分享价值

    Solve Real World Tasks 解决实事

    个性表述和网上交流通常被认为仅仅是网络娱乐而已。但OpenSocial却能够通过社交网络圈,帮助我们在遇到现实生活中问题时作出决定,解决问题。譬如,当人们想随意地从书柜上拿起一本书的时候,通常会比较喜欢朋友们的推荐。通过应用,人们在娱乐和分享爱好的时候,会发生各种可能事情,从而帮助用户学会如何开展会议,营销,推荐和资讯管理,以此获得比现实世界更丰富,更持久的社交体验。

  • 计算机毕业生求职应该注意什么

    昨天一次大型面试,耗费了一个下午,面试了50多位学生。感触颇多。

    一个什么都不会的学生,将来会成为一个技术专家,我不会否定这种可能性。因为公司里现在有很多技术顶尖人才就不是计算机专业出身。

    可是如果一个学了计算机4年的同学,到目前coding的程序不到100行,知道的计算机术语,除了书本上,能够知道个asp,vc 6.0就可以炫耀的程度。实在令我很不解。

    首先,你们的专业是计算机。所以你们要有专业特质.

    如果是个对外贸易的学生,是不会不知道现在的汇率问题,G20峰会议题的吧.那么一个计算机的学生,不要懂得太多,至少也应该了解现在行业中一些最新的信息吧。如果只能告诉我,我会上网,我会C,我会英语,你让我如何区别出你是一个计算机系,还不是一个建筑系的学生呢。

    其次,你们是大学生,你们受过高等教育。所以你们要更会去表达个人价值。

    现在你们应该是一个准就业的社会人。你们应该清楚找工作,不仅仅是努力去投简历,参加面试。你们必须先要有价值,而且要会表达出你的价值(潜在的也可以)。这就好像是一块原石,虽未被雕琢,但至少粗磨露出一两点,否则面试官就似在赌石。很多同学的简历都有一句话,我相信金子总会发光的。如果你回首四年,找不到一点亮光来说明自己,我想这都半是自欺欺人的话而已。

    最重要的,你们是年轻人。所以你们要有朝气,要有抱负。

    也许是外部的压力,也许是现实的残酷,你们都刻意的低调,谦虚,安于现实,让我一点都看不到年轻人的初生牛犊不怕虎的气魄。问到你们的价值,不是想听你们谦虚地说,我什么都不会,2000顶多了。。。什么的。其实我们感兴趣的根本不是数字,而是你们得出这些数字的自我价值判断。不过你们还很年轻,你们还有的是时间重塑自己,先好好想想,自己到底想要做什么。想好后,就去行动!

  • 奇虎360引起的蓝屏

    今天笔记本总会莫名的重起。之前也有过,多发生在用奇虎360下载软件或者是查毒的时候。

    不过今天实在是太频繁了,基本开机10分钟内必蓝屏,重起。正版系统,风扇正常,内存正常,几乎没有装额外软件。。。

    实在没有辙了,只好试着把奇虎360给卸载了,结果2个小时运行都很正常。

    Google了一下,奇虎360蓝屏的信息好多,原来不只我呢。说句实话,蛮喜欢这个软件的,贴心实用。为什么会蓝屏呢,是不是过于挖掘XP的底层信息了呢。最近,每次开机,都会告诉我开机3分钟,名列全国倒数3%行列云云,不知道和这个是不是有关系。

    不过我可以肯定的说,这次确实是奇虎造成的蓝屏。

  • RIA的趋势

    记得刚入行的时候,B/S和C/S还在纠结。很多项目初期,都不得去考虑,便利性,通用性,高性能,友好界面几个方面的平衡。就因为当时有些方面是矛盾的。比如你要通用性高,当然Browser是合适的,但是友好界面,复杂功能方面就不得不让步。

    就这样,还是有很多公司开发出基于ActiveX的一套复杂界面系统。但是开发的复杂度,移植难度高等问题,导致这些一般都只应用于公司内部的系统上。因为这时候强加一些前提条件是比较容易的。

    前几年,终于Ajax刮起了旋风,也带了Web 2.0的革命观点。我认为Ajax并不是某种新的发明。而是外部条件改善的使然。个人机器越拉越先进,浏览器能够支持的功能越来越强大(HTML 5.0也快来了),网络也越来越快。所有之前制约JS更一步发挥的障碍都迎刃而解。之前就是半死不活的,Java Applet什么的也彻底死去。除了Ajax的新瓶装旧酒,本来一直独秀的Flash也开始躁动不安,连续推出Flex的开发平台,Microsoft的SilverLight也开始分食RIA的一块蛋糕。最近看到Oracle Java Fx也在这方面努力。

    于是,我们的网络变得异彩纷呈,以前我们认为浏览器绝对实现不了的,都成为了绚烂的现实。这其中,Google的发挥简直是如鱼得水,而且也为Ajax社区贡献了大量代码。

    而产业界呢。我觉得还是相对滞后的,Ajax固然是在用,但是很多设计方式,还停留在web 1.0的状态。以前的项目,一般是设计者做一个粗糙的Design,然后美工和开发者分头去工作,最后合成一个成品。这种模式之所以能高效的运行,是因为粗糙的HTML(甚至一个通常的草图都足够了),已经能为专业的程序员提供必需的布局,而粗糙的HTML的开发又是如此的迅速和低廉。可是web2.0已经不能把领域分得如此泾渭分明。要么粗糙的HTML已经把实际的UI界面集成,要么加上文字说明,让程序员开发的时候完善UI。这都势必要求,要么设计者成为设计+JS构思,要么程序员成为 后台程序+前台JS设计。如果缺少那些两个领域都熟悉的人才,最后的结果就只能是,想得很美但是实现不了,抑或是有更美更简单的却闭门造车。于是乎,在设计和开发两个领域之外,还需要另外一种专业的,跨领域的视觉设计开发工程师。

    这让我想到一个公司,eico设计公司。他的视觉设计常常会颠覆之前所能想象的极限。他为魅族设计的手机界面,在我看来一点都不必iPhone的差。

    我不认为所有的网络都需要RIA,但是如果是希望通过RIA取胜的网站,除了传统的业务设计,美工,程序开发以外,一个跨领域的视觉设计团队也是至关重要的。

  • OpenSocial的三种典型Design Pattern

    以下引用自Google的教程

    Social设计模式

    这篇文章已经根据开发的风格做了分类。依据你的程序的特点,可以选择其中的一种。

    Social Mashup(混搭模式)

    混搭模式是运行在社区网络的轻量级 OpenSocial应用程序。因为这种程序不需要访问第三方服务器,性能非常好,但是也受限于数据的永久存储。混搭模式通常需要的技术:HTML,JavaScript,CSS,OpenSocialTemplates,或者是Flash

    Social Mashup Tutorial 可以从头到尾教给你一个完整的混搭应用程序

    制作一个你自己的混蛋应用,你需要:

    学习 Gadget Developer’s Guide 了解gadgets的基本开发.
    在profile或者是canvas里面定义 application views 显示页面.
    学习request social data 了解如何从宿主社区网站取得信息.
    学习 requesting data from other sources on the web了解如何取得网络上的其他信息
    学习 OpenSocial Tags and Templates减少自己编写JS
    通过 Localization获得本地信息.

    Social Application(社区应用程序)

    社区应用程序虽然在社区网站内运行,但是会传递一些流程和数据给外部服务器。这种应用程序有更高级的功能,但是当程序很流行而导致性能问题。社区应用程序可以用很多技术来打造,包括HTML,JavaScript,CSS,OpenSocial Templates,Flash,PHP,Python,Java,Perl,.NET和Ruby

    Social Application Tutorial 可以教你如何制作一个简单的社区应用程序.

    制作一个你自己的社区应用程序,你需要:

    学习 Gadget Developer’s Guide 懂得基本的gadgets.
    在profile或者canvas里面定义 application views 显示信息.
    学习 request social data ,懂得如何获得宿主网站的社区信息
    和你 自己的服务器 通讯.
    使用 OpenSocial Client Library2-legged OAuth 实现后台流程。
    使用 Invalidation API实现缓存和优化.
    使用 OAuth 实现和宿主服务器加密通讯
    加入 OpenSocial Tags and Templates 快速方便显示你的数据.

    Social Website / Social Mobile Application (社区网站应用/社区手机网站应用)

    社区网站和手机网站应用程序在社区网站以外运行,但要通过REST或者是RPC APIs和社区网站做相关数据通讯.这种非社区网站内部程序需要用户授权,以能够顺利访问用户的个人信息。这种模式非常的灵活,几乎所有的语言和平台都可以操作这些数据。

    Social Website Tutorial 可以教给你一个完整的社区网站应用程序的制作过程.

    制作一个你自己的社区网站应用程序,你需要:

    阅读 OpenSocial REST Developer’s Guide 学习如何在自己的网站访问社区网站.
    使用 OpenSocial Client Library 提高你的开发效率
    理解 2 and 3-legged OAuth 的区别,并清楚使用的场合

    将要制作的RPG游戏应该属于哪一类呢。第一种显然不是,第二种,光光提供数据的外部管理还不能满足要求,所以只能是第三种啦。不过性能确实是个大问题。得要好好考虑一下的

  • windows下安装 memcache + php

    1.memcache是什么

    Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

    Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.

    Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.

    和其他的Cache一样(我用过 Java的OSCache PHP的Smaty Cache和Symfony Cache),思路都是把动态网站经常被访问的资源,或者数据量很大的资源保存到内存中去,从而达到服务器负荷降低,响应加快的目的。不过Memcache似乎更加通用,他不是莫一种BS架构的插件,而是以Windows 服务或者是Linux 守护进程那样,以平行的方式提供API给服务器的其他应用程序。Cache对象以key-value这种Map结构保存在内存,memocache有一套特有的内存对象管理方式。详细运作原理可以参考Sina的Memcached深度分析(原创)

    2.Memcache主要用来做什么

    用的最多的还是数据检索结果的缓存。因为现在服务器出现负荷过高的时候,多半和数据库瓶颈有关。对于那些80/20中的20%的特殊检索(特殊包括:查询特别频繁,检索特别复杂,返回结果特别大),如果如何怎么tuning,怎么优化,在走投无路升级硬件之前,可以考虑考虑memcache这一类的cache工具了。当然咯, 信息的刷新间隔和效率优化时反比的。对于那些一定要实时刷新的数据,使用Cache只会是搬起石头砸自己的脚。

    另外,还有一个DB服务器侧的技术,就是SQL的Cache,比如Mysql Query Cache。这种技术对于那种频繁访问,且发行SQL是一样的query,是个很不错的选择。可以综合起来使用。

    3.Windows下如何安装

    PHP的官方网站有详细的说明,一个 pecl install memcache就可以一键搞定。可惜的是,Windows下不行,总会报

    ERROR: Did not understand the completion status returned from msdev.exe.

    这个错。

    估计原因主要发生在编译系统上。Linux上的gcc是默认的,windows下没有相应的编译器所以出错。

    还是有好人的,辛辛苦苦地把memcache编译成exe贡献给大家。

    安装流程

    3.1 下载windows版的memcache

    http://code.jellycan.com/memcached/ 直接下载windows版本

    上面已经是最新的稳定版啦,如果想要自己编译的,也可以看看他是怎么一步一步做的。

    3.2 安装服务

    • 下载的zip解压缩到一个目录(G:\lib\memcached-1.2.6)
    • 如果是win7,请把memcached.exe的执行权限设为管理员
    • 安装服务  G:\lib\memcached-1.2.6>memcached.exe -d install
    • 启动服务 G:\lib\memcached-1.2.6>memcached.exe -d start

    这个时候可以看看系统的服务,应该增加了一个memcached的服务

    3.3 设定PHP的extention

    [PHP_MEMCACHE]
    extension=php_memcache.dll

    • 重启apache

    3.4 测试程序

    [sourcecode language=’php’]

    connect(“localhost”,11211); #根据情况要把”localhost” 改为 “127.0.0.1”

    echo “Server’s version: ” . $memcache->getVersion() . “
    \n”;

    $tmp_object = new stdClass;
    $tmp_object->str_attr = “test”;
    $tmp_object->int_attr = 123;

    $memcache->set(“key”,$tmp_object,false,10);
    echo “Store data in the cache (data will expire in 10 seconds)
    \n”;

    echo “Data from the cache:
    \n”;
    var_dump($memcache->get(“key”));
    ?>

    [/sourcecode]

    不出错,就说明大功告成了。