Java开发中的Memcache原理及实现

Java开发中的Memcache原理及实现

七、            Memcached 客户端程序

Memcached的java客户端已经存在三种了:

?  官方提供的基于传统阻塞io由Greg Whalin维护的客户端

?  Dustin Sallings实现的基于java nio的Spymemcached

?  XMemcached

1. 三种API比较
1)      memcached client for java

较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。

2)      spymemcached

A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。

3)      xmemcached

XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接 池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此 XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比 Spymemcached的表现更为优秀,具体可以看这个Java Memcached Clients Benchmark。

2.  建议

由于memcached client for java发布了新版本,性能上有所提高,并且运行稳定,所以建议使用memcached client for java。

XMemcached也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性 能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的集 成、客户端连接池、可扩展性好等。

下面给出这三种客户端的示例程序。

3.  示例程序
1)      memcached client for java

从前面介绍的Java环境的Memcached客户端程序项目网址里,下载最新版的客户端程 序包:java_memcached-release_2.5.1.zip,解压后,文件夹里找到java_memcached- release_2.5.1.jar,这个就是客户端的JAR包。将此JAR包添加到项目的构建路径里,则项目中,就可以使用Memcached了。

示例代码如下:

package temp;

 

import com.danga.MemCached.*;

import org.apache.log4j.*;

 

public class CacheTest {

    public static void main(String[] args) {

       /**

        * 初始化SockIOPool,管理memcached的连接池

        * */

       String[] servers = { “10.11.15.222:10000” };

       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 < 1000; 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

spymemcached当前版本是2.5版本,官方网址是:http://code.google.com/p/spymemcached/。可以从地址:http://spymemcached.googlecode.com/files/memcached-2.5.jar 下载最新版本来使用。

示例代码如下:

package temp;

 

import java.net.InetSocketAddress;

import java.util.concurrent.Future;

 

import net.spy.memcached.MemcachedClient;

 

public class TestSpyMemcache {

    public static void main(String[] args) {

       // 保存对象

       try {

           /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress(“10.11.15.222”, 10000));

           Future<Boolean> b = null;

           /* 将key值,过期时间(秒)和要缓存的对象set到memcached中 */

           b = mc.set(“neea:testDaF:ksIdno”, 900, “someObject”);

           if (b.get().booleanValue() == true) {

              mc.shutdown();

           }

       } catch (Exception ex) {

           ex.printStackTrace();

       }

       // 取得对象

        try {

           /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress(“10.11.15.222”, 10000));

           /* 按照key值从memcached中查找缓存,不存在则返回null */

           Object b = mc.get(“neea:testDaF:ksIdno”);

           System.out.println(b.toString());

           mc.shutdown();

       } catch (Exception ex) {

           ex.printStackTrace();

       }

    }

}

3)      xmemcached

Xmemcached的官方网址是:http://code.google.com/p/xmemcached/,可以从其官网上下载最新版本的1.2.4 来使用。地址是:http://xmemcached.googlecode.com/files/xmemcached-1.2.4-src.tar.gz

示例代码如下:

package temp;

 

import java.io.IOException;

import java.util.concurrent.TimeoutException;

 

import net.rubyeye.xmemcached.utils.AddrUtil;

import net.rubyeye.xmemcached.MemcachedClient;

import net.rubyeye.xmemcached.MemcachedClientBuilder;

import net.rubyeye.xmemcached.XMemcachedClientBuilder;

import net.rubyeye.xmemcached.exception.MemcachedException;

 

public class TestXMemcache {

    public static void main(String[] args) {

       MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil

              .getAddresses(“10.11.15.222:10000”));

       MemcachedClient memcachedClient;

       try {

           memcachedClient = builder.build();

 

           memcachedClient.set(“hello”, 0, “Hello,xmemcached”);

           String value = memcachedClient.get(“hello”);

           System.out.println(“hello=” + value);

           memcachedClient.delete(“hello”);

           value = memcachedClient.get(“hello”);

           System.out.println(“hello=” + value);

           // close memcached client

           memcachedClient.shutdown();

       } catch (MemcachedException e) {

           System.err.println(“MemcachedClient operation fail”);

           e.printStackTrace();

       } catch (TimeoutException e) {

           System.err.println(“MemcachedClient operation timeout”);

           e.printStackTrace();

       } catch (InterruptedException e) {

           // ignore

       }catch (IOException e) {

           System.err.println(“Shutdown MemcachedClient fail”);

           e.printStackTrace();

       }

    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109536.html原文链接:https://javaforall.net

(0)
上一篇 2021年9月4日 下午12:00
下一篇 2021年9月4日 下午12:00


相关推荐

  • javascript nextSibling属性「建议收藏」

    javascript nextSibling属性「建议收藏」对于nextSibling属性,在W3school中的定义为:nextSibling属性返回指定节点之后紧跟的节点,在相同的树层级中。注意所返回的节点必须是与上一个节点是同级关系,且彼此之间不能有空格,否则将会返回:undefinedTitl</p> </div> <div class="item-meta"> <div class="item-meta-li author"> <a data-user="1" target="_blank" href="https://javaforall.net/user-2/1" class="avatar j-user-card"> <img alt='全栈程序员-站长的头像' src='https://javaforall.net/wp-content/uploads/2025/04/2025042212521933-300x300.jpg' class='avatar avatar-60 photo' height='60' width='60' decoding='async'/> <span>全栈程序员-站长</span> </a> </div> <span class="item-meta-li date">2022年7月13日</span> <div class="item-meta-right"> <span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-eye"></use></svg></i>344</span> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/270832.html" title="Kimi Claw:月之暗面推出的云端AI智能体服务,基于 开源框架 OpenClaw 搭建" target="_blank" rel="bookmark"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="Kimi Claw:月之暗面推出的云端AI智能体服务,基于 开源框架 OpenClaw 搭建"> </a> <a class="item-category" href="https://javaforall.net/category/%e5%85%a8%e6%a0%88%e7%a8%8b%e5%ba%8f%e5%91%98/ai%e7%a8%8b%e5%ba%8f%e5%91%98/kim" target="_blank">月之暗面</a> </div> <div class="item-content"> <h3 class="item-title"> <a href="https://javaforall.net/270832.html" target="_blank" rel="bookmark"> Kimi Claw:月之暗面推出的云端AI智能体服务,基于 开源框架 OpenClaw 搭建 </a> </h3> <div class="item-excerpt"> <p>Kimi Claw:月之暗面推出的云端AI智能体服务,基于 开源框架 OpenClaw 搭建</p> </div> <div class="item-meta"> <div class="item-meta-li author"> <a data-user="1" target="_blank" href="https://javaforall.net/user-2/1" class="avatar j-user-card"> <img alt='全栈程序员-站长的头像' src='https://javaforall.net/wp-content/uploads/2025/04/2025042212521933-300x300.jpg' class='avatar avatar-60 photo' height='60' width='60' decoding='async'/> <span>全栈程序员-站长</span> </a> </div> <span class="item-meta-li date">2026年3月12日</span> <div class="item-meta-right"> <span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-eye"></use></svg></i>2</span> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/177129.html" title="c语言多线程的使用场合,c语言多线程编程使用示例" target="_blank" rel="bookmark"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="c语言多线程的使用场合,c语言多线程编程使用示例"> </a> </div> <div class="item-content"> <h3 class="item-title"> <a href="https://javaforall.net/177129.html" target="_blank" rel="bookmark"> c语言多线程的使用场合,c语言多线程编程使用示例 </a> </h3> <div class="item-excerpt"> <p>c语言多线程的使用场合,c语言多线程编程使用示例2014 include include include defineTHREAD NUM10void test void args printf tid d isay Hello n args returnNULL intmain inti err pthread tchild THREAD NUM for i 0 i</p> </div> <div class="item-meta"> <div class="item-meta-li author"> <a data-user="1" target="_blank" href="https://javaforall.net/user-2/1" class="avatar j-user-card"> <img alt='全栈程序员-站长的头像' src='https://javaforall.net/wp-content/uploads/2025/04/2025042212521933-300x300.jpg' class='avatar avatar-60 photo' height='60' width='60' decoding='async'/> <span>全栈程序员-站长</span> </a> </div> <span class="item-meta-li date">2026年3月26日</span> <div class="item-meta-right"> <span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-eye"></use></svg></i>2</span> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/156703.html" title="C++和Java哪个比较好入门?初学者该如何选择?" target="_blank" rel="bookmark"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="C++和Java哪个比较好入门?初学者该如何选择?"> </a> </div> <div class="item-content"> <h3 class="item-title"> <a href="https://javaforall.net/156703.html" target="_blank" rel="bookmark"> C++和Java哪个比较好入门?初学者该如何选择? </a> </h3> <div class="item-excerpt"> <p>C++和Java哪个比较好入门?初学者该如何选择?选择好的方向比努力更重要,对于初学编程的人来说选择一门合适的编程语言关系到自己以后的职业发展。c++和Java那个更适合作为入门语言?给大家简单科普一下~C++语言它是正宗的C语言的嫡系,由C语言发展而来。C++支持多种编程范式–面向对象编程、泛型编程和过程化编程,支持类:类、封装、重载等特性。C++语言的主要特点表现在两个方面:尽量兼容C 支持面向对象的方法。它操持了C的简洁、高效的接近汇编语言等特点,对C的类型系统进行了改革的扩充,因此C++比C更安全,C++的编译系统.</p> </div> <div class="item-meta"> <div class="item-meta-li author"> <a data-user="1" target="_blank" href="https://javaforall.net/user-2/1" class="avatar j-user-card"> <img alt='全栈程序员-站长的头像' src='https://javaforall.net/wp-content/uploads/2025/04/2025042212521933-300x300.jpg' class='avatar avatar-60 photo' height='60' width='60' decoding='async'/> <span>全栈程序员-站长</span> </a> </div> <span class="item-meta-li date">2022年7月9日</span> <div class="item-meta-right"> <span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-eye"></use></svg></i>23</span> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/152388.html" title="s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征…" target="_blank" rel="bookmark"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征…"> </a> </div> <div class="item-content"> <h3 class="item-title"> <a href="https://javaforall.net/152388.html" target="_blank" rel="bookmark"> s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征… </a> </h3> <div class="item-excerpt"> <p>s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征…肾脏是身体的“净化器”,经过肾脏代谢排毒之后,废物顺着尿液排出体外,使内环境得到净化。可见,拥有一颗健康的肾脏是非常重要的,而我们日常生活中也要注意对肾脏健康的自我检查。那么,我该如何粗略自我判断自己肾脏是否健康呢?接下来就让我们一起来了解一下肾脏健康情况下,身体会有哪些表现。肾脏健康有哪些表现?1、小便没有泡沫:日常生活中小便时在尿液中没有出现泡沫且颜色清澈正常,那么往往说明肾脏也是比较健康的。…</p> </div> <div class="item-meta"> <div class="item-meta-li author"> <a data-user="1" target="_blank" href="https://javaforall.net/user-2/1" class="avatar j-user-card"> <img alt='全栈程序员-站长的头像' src='https://javaforall.net/wp-content/uploads/2025/04/2025042212521933-300x300.jpg' class='avatar avatar-60 photo' height='60' width='60' decoding='async'/> <span>全栈程序员-站长</span> </a> </div> <span class="item-meta-li date">2022年6月23日</span> <div class="item-meta-right"> <span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-eye"></use></svg></i>32</span> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/119829.html" title="域渗透之Zerologon域提权漏洞" target="_blank" rel="bookmark"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="域渗透之Zerologon域提权漏洞"> </a> </div> <div class="item-content"> <h3 class="item-title"> <a href="https://javaforall.net/119829.html" target="_blank" rel="bookmark"> 域渗透之Zerologon域提权漏洞 </a> </h3> <div class="item-excerpt"> <p>域渗透之Zerologon域提权漏洞组件概述Netlogon远程协议是一个远程过程调用(RPC)接口,用于基于域的网络上的用户和计算机身份验证。Netlogon远程协议RPC接口还用于为备份域控制</p> </div> <div class="item-meta"> <div class="item-meta-li author"> <a data-user="1" target="_blank" href="https://javaforall.net/user-2/1" class="avatar j-user-card"> <img alt='全栈程序员-站长的头像' src='https://javaforall.net/wp-content/uploads/2025/04/2025042212521933-300x300.jpg' class='avatar avatar-60 photo' height='60' width='60' decoding='async'/> <span>全栈程序员-站长</span> </a> </div> <span class="item-meta-li date">2021年12月13日</span> <div class="item-meta-right"> <span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-eye"></use></svg></i>64</span> </div> </div> </div> </li> </ul> </div> <div id="comments" class="entry-comments"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">发表回复</h3><form action="https://javaforall.net/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-notes"><span id="email-notes">您的邮箱地址不会被公开。</span> <span class="required-field-message">必填项已用 <span class="required">*</span> 标注</span></p><div class="comment-form-comment"><textarea autocomplete="new-password" id="j265fd99e5" name="j265fd99e5" class="required" rows="4" placeholder="写下你的评论…"></textarea><textarea id="comment" aria-label="hp-comment" aria-hidden="true" name="comment" autocomplete="new-password" style="padding:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;position:absolute !important;white-space:nowrap !important;height:1px !important;width:1px !important;overflow:hidden !important;" tabindex="-1"></textarea><script data-noptimize>document.getElementById("comment").setAttribute( "id", "a26b9808c31d02699d88c9838e76077c" );document.getElementById("j265fd99e5").setAttribute( "id", "comment" );</script><div class="comment-form-smile j-smilies" data-target="#comment"><i class="wpcom-icon wi smile-icon"><svg aria-hidden="true"><use xlink:href="#wi-emotion"></use></svg></i></div></div><div class="comment-form-author"><label for="author">昵称:</label><input id="author" name="author" type="text" value="" size="30"></div> <div class="comment-form-email"><label for="email">邮箱:</label><input id="email" name="email" type="text" value=""></div> <div class="comment-form-url"><label for="url">网址:</label><input id="url" name="url" type="text" value="" size="30"></div> <label class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"> 记住昵称、邮箱和网址,下次评论免输入</label> <div class="form-submit"><button name="submit" type="submit" id="submit" class="wpcom-btn btn-primary btn-xs submit">提交</button> <input type='hidden' name='comment_post_ID' value='109536' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </div></form> </div><!-- #respond --> </div><!-- .comments-area --> </article> </main> <aside class="sidebar"> <div class="widget widget_profile"><div class="profile-cover"><img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg" data-original="//javaforall.net/wp-content/uploads/2025/04/anthony-delanoix-urUdKCxsTUI-unsplash-1.webp" alt="全栈程序员-站长"></div> <div class="avatar-wrap"> <a target="_blank" href="https://javaforall.net/user-2/1" class="avatar-link"><img alt='全栈程序员-站长的头像' src='https://javaforall.net/wp-content/uploads/2025/04/2025042212521933-300x300.jpg' class='avatar avatar-120 photo' height='120' width='120' decoding='async'/></a></div> <div class="profile-info"> <a target="_blank" href="https://javaforall.net/user-2/1" class="profile-name"><span class="author-name">全栈程序员-站长</span></a> <p class="author-description">本网站汇聚当前互联网主流语音,持续更新,欢迎关注公众号“全栈程序员社区”</p> <div class="profile-stats"> <div class="profile-stats-inner"> <div class="user-stats-item"> <b>133.5K</b> <span>文章</span> </div> <div class="user-stats-item"> <b>3</b> <span>粉丝</span> </div> </div> </div> <button type="button" class="wpcom-btn btn-xs btn-follow j-follow btn-primary" data-user="1"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-add"></use></svg></i>关注</button> </div> <div class="profile-posts"> <h3 class="widget-title"><span>最近文章</span></h3> <ul> <li><a href="https://javaforall.net/187653.html" title="转罗马字符_罗马字符是什么意思">转罗马字符_罗马字符是什么意思</a></li> <li><a href="https://javaforall.net/187654.html" title="vim 配置python3环境_vim怎么运行python">vim 配置python3环境_vim怎么运行python</a></li> <li><a href="https://javaforall.net/187655.html" title="myeclipse 8.5注册码_激活码有效期">myeclipse 8.5注册码_激活码有效期</a></li> <li><a href="https://javaforall.net/187656.html" title="IntelliJ IDEA 创建Java项目[通俗易懂]">IntelliJ IDEA 创建Java项目[通俗易懂]</a></li> <li><a href="https://javaforall.net/187657.html" title="idea打开工程无法运行java程序_如何运行一个java程序">idea打开工程无法运行java程序_如何运行一个java程序</a></li> <li><a href="https://javaforall.net/187658.html" title="收藏!!「自然语言处理(NLP)」全球学术界知名学者教授信息大盘点(全)!">收藏!!「自然语言处理(NLP)」全球学术界知名学者教授信息大盘点(全)!</a></li> <li><a href="https://javaforall.net/187659.html" title="Could not find artifact com.sun:tools:jar:1.5.0">Could not find artifact com.sun:tools:jar:1.5.0</a></li> <li><a href="https://javaforall.net/187660.html" title="kali mysql 卸载,linux mysql卸载命令">kali mysql 卸载,linux mysql卸载命令</a></li> <li><a href="https://javaforall.net/187661.html" title="程序员一般都如何接私活,我也想接,有什么可行的方法吗?[通俗易懂]">程序员一般都如何接私活,我也想接,有什么可行的方法吗?[通俗易懂]</a></li> <li><a href="https://javaforall.net/187662.html" title="hql查询语句用法详解_sql add语句">hql查询语句用法详解_sql add语句</a></li> </ul> </div> </div><div class="widget widget_post_thumb"><h3 class="widget-title"><span>最新发布</span></h3> <ul> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/187656.html" title="IntelliJ IDEA 创建Java项目[通俗易懂]"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="IntelliJ IDEA 创建Java项目[通俗易懂]"> </a> </div> <div class="item-content"> <p class="item-title"><a href="https://javaforall.net/187656.html" title="IntelliJ IDEA 创建Java项目[通俗易懂]">IntelliJ IDEA 创建Java项目[通俗易懂]</a></p> <p class="item-date">2026年4月18日</p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/187657.html" title="idea打开工程无法运行java程序_如何运行一个java程序"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="idea打开工程无法运行java程序_如何运行一个java程序"> </a> </div> <div class="item-content"> <p class="item-title"><a href="https://javaforall.net/187657.html" title="idea打开工程无法运行java程序_如何运行一个java程序">idea打开工程无法运行java程序_如何运行一个java程序</a></p> <p class="item-date">2026年4月18日</p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/187738.html" title="idea注释的快捷键三种方式"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="idea注释的快捷键三种方式"> </a> </div> <div class="item-content"> <p class="item-title"><a href="https://javaforall.net/187738.html" title="idea注释的快捷键三种方式">idea注释的快捷键三种方式</a></p> <p class="item-date">2026年4月18日</p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://javaforall.net/187831.html" title="idea 查找与替换「建议收藏」"> <img class="j-lazy" src="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" data-original="https://javaforall.net/wp-content/uploads/2020/11/2020110817443450-480x300.jpg" width="480" height="300" alt="idea 查找与替换「建议收藏」"> </a> </div> <div class="item-content"> <p class="item-title"><a href="https://javaforall.net/187831.html" title="idea 查找与替换「建议收藏」">idea 查找与替换「建议收藏」</a></p> <p class="item-date">2026年4月18日</p> </div> </li> </ul> </div> </aside> </div> </div> <footer class="footer"> <div class="container"> <div class="footer-col-wrap footer-with-logo-icon"> <div class="footer-col footer-col-logo"> <img src="http://javaforall.net/wp-content/uploads/2020/10/4545-头像.jpg" alt="全栈程序员必看"> </div> <div class="footer-col footer-col-copy"> <ul class="footer-nav hidden-xs"><li id="menu-item-152" class="menu-item menu-item-152"><a href="https://javaforall.net/contact">联系我们</a></li> </ul> <div class="copyright"> <p>Copyright ©2018-2025 版权所有 <a href="http://beian.miit.gov.cn" target="_blank" rel="nofollow noopener noreferrer">晋ICP备19011774号</a> Powered by 全栈程序员必看 <a href="/sitemap.xml" target="_blank" rel="noopener">网站地图</a></p> </div> </div> <div class="footer-col footer-col-sns"> <div class="footer-sns"> <a class="sns-wx" href="javascript:;" aria-label="icon"> <i class="wpcom-icon fa fa-wechat sns-icon"></i> <span style="background-image:url('//javaforall.net/wp-content/uploads/2020/11/2020110814274114.jpg');"></span> </a> </div> </div> </div> </div> </footer> <div class="action action-style-0 action-color-1 action-pos-0" style="bottom:15%;"> <div class="action-item"> <i class="wpcom-icon fa fa-wechat action-item-icon"></i> <div class="action-item-inner action-item-type-1"> <img class="action-item-img" src="http://javaforall.net/wp-content/uploads/2020/11/2020110814274114.jpg" alt="关注全栈程序员社区公众号"> </div> </div> <div class="action-item gotop j-top"> <i class="wpcom-icon wi action-item-icon"><svg aria-hidden="true"><use xlink:href="#wi-arrow-up-2"></use></svg></i> </div> </div> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/justnews/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script type="text/javascript" id="main-js-extra"> /* <![CDATA[ */ var _wpcom_js = {"webp":"","ajaxurl":"https://javaforall.net/wp-admin/admin-ajax.php","theme_url":"https://javaforall.net/wp-content/themes/justnews","slide_speed":"5000","is_admin":"0","lang":"zh_CN","js_lang":{"share_to":"\u5206\u4eab\u5230:","copy_done":"\u590d\u5236\u6210\u529f\uff01","copy_fail":"\u6d4f\u89c8\u5668\u6682\u4e0d\u652f\u6301\u62f7\u8d1d\u529f\u80fd","confirm":"\u786e\u5b9a","qrcode":"\u4e8c\u7ef4\u7801","page_loaded":"\u5df2\u7ecf\u5230\u5e95\u4e86","no_content":"\u6682\u65e0\u5185\u5bb9","load_failed":"\u52a0\u8f7d\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01","expand_more":"\u9605\u8bfb\u5269\u4f59 %s"},"lightbox":"1","post_id":"109536","user_card_height":"356","poster":{"notice":"\u8bf7\u300c\u70b9\u51fb\u4e0b\u8f7d\u300d\u6216\u300c\u957f\u6309\u4fdd\u5b58\u56fe\u7247\u300d\u540e\u5206\u4eab\u7ed9\u66f4\u591a\u597d\u53cb","generating":"\u6b63\u5728\u751f\u6210\u6d77\u62a5\u56fe\u7247...","failed":"\u6d77\u62a5\u56fe\u7247\u751f\u6210\u5931\u8d25"},"video_height":"482","fixed_sidebar":"1","dark_style":"0","font_url":"//fonts.proxy.ustclug.org/css2?family=Noto+Sans+SC:wght@400;500&display=swap","follow_btn":"\u003Ci class=\"wpcom-icon wi\"\u003E\u003Csvg aria-hidden=\"true\"\u003E\u003Cuse xlink:href=\"#wi-add\"\u003E\u003C/use\u003E\u003C/svg\u003E\u003C/i\u003E\u5173\u6ce8","followed_btn":"\u5df2\u5173\u6ce8","user_card":"1"}; //# sourceURL=main-js-extra /* ]]> */ </script> <script type="text/javascript" src="https://javaforall.net/wp-content/themes/justnews/js/main.js?ver=6.20.0" id="main-js"></script> <script type="text/javascript" src="https://javaforall.net/wp-content/themes/justnews/themer/assets/js/icons-2.8.9.js?ver=2.8.9" id="wpcom-icons-js"></script> <script type="text/javascript" id="wp-postviews-cache-js-extra"> /* <![CDATA[ */ var viewsCacheL10n = {"admin_ajax_url":"https://javaforall.net/wp-admin/admin-ajax.php","nonce":"1174db04e4","post_id":"109536"}; //# sourceURL=wp-postviews-cache-js-extra /* ]]> */ </script> <script type="text/javascript" src="https://javaforall.net/wp-content/plugins/wp-postviews/postviews-cache.js?ver=1.78" id="wp-postviews-cache-js"></script> <script type="text/javascript" id="wpcom-member-js-extra"> /* <![CDATA[ */ var _wpmx_js = {"ajaxurl":"https://javaforall.net/wp-admin/admin-ajax.php","plugin_url":"https://javaforall.net/wp-content/plugins/wpcom-member/","max_upload_size":"52428800","post_id":"109536","js_lang":{"login_desc":"\u60a8\u8fd8\u672a\u767b\u5f55\uff0c\u8bf7\u767b\u5f55\u540e\u518d\u8fdb\u884c\u76f8\u5173\u64cd\u4f5c\uff01","login_title":"\u8bf7\u767b\u5f55","login_btn":"\u767b\u5f55","reg_btn":"\u6ce8\u518c"},"login_url":"https://javaforall.net/login?modal-type=login","register_url":"https://javaforall.net/register?modal-type=register","errors":{"require":"\u4e0d\u80fd\u4e3a\u7a7a","email":"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u7535\u5b50\u90ae\u7bb1","pls_enter":"\u8bf7\u8f93\u5165","password":"\u5bc6\u7801\u5fc5\u987b\u4e3a6~32\u4e2a\u5b57\u7b26","passcheck":"\u4e24\u6b21\u5bc6\u7801\u8f93\u5165\u4e0d\u4e00\u81f4","phone":"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7\u7801","terms":"\u8bf7\u9605\u8bfb\u5e76\u540c\u610f\u6761\u6b3e","sms_code":"\u9a8c\u8bc1\u7801\u9519\u8bef","captcha_verify":"\u8bf7\u70b9\u51fb\u6309\u94ae\u8fdb\u884c\u9a8c\u8bc1","captcha_fail":"\u4eba\u673a\u9a8c\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5","nonce":"\u968f\u673a\u6570\u6821\u9a8c\u5931\u8d25","req_error":"\u8bf7\u6c42\u5931\u8d25"}}; //# sourceURL=wpcom-member-js-extra /* ]]> */ </script> <script type="text/javascript" src="https://javaforall.net/wp-content/plugins/wpcom-member/js/index.js?ver=1.7.19" id="wpcom-member-js"></script> <script type="text/javascript" id="QAPress-js-js-extra"> /* <![CDATA[ */ var QAPress_js = {"ajaxurl":"https://javaforall.net/wp-admin/admin-ajax.php","ajaxloading":"https://javaforall.net/wp-content/plugins/qapress/images/loading.gif","max_upload_size":"2097152","compress_img_size":"0","lang":{"delete":"\u5220\u9664","nocomment":"\u6682\u65e0\u56de\u590d","nocomment2":"\u6682\u65e0\u8bc4\u8bba","addcomment":"\u6211\u6765\u56de\u590d","submit":"\u53d1\u5e03","loading":"\u6b63\u5728\u52a0\u8f7d...","error1":"\u53c2\u6570\u9519\u8bef\uff0c\u8bf7\u91cd\u8bd5","error2":"\u8bf7\u6c42\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01","confirm":"\u5220\u9664\u64cd\u4f5c\u65e0\u6cd5\u6062\u590d\uff0c\u5e76\u5c06\u540c\u65f6\u5220\u9664\u5f53\u524d\u56de\u590d\u7684\u8bc4\u8bba\u4fe1\u606f\uff0c\u60a8\u786e\u5b9a\u8981\u5220\u9664\u5417\uff1f","confirm2":"\u5220\u9664\u64cd\u4f5c\u65e0\u6cd5\u6062\u590d\uff0c\u60a8\u786e\u5b9a\u8981\u5220\u9664\u5417\uff1f","confirm3":"\u5220\u9664\u64cd\u4f5c\u65e0\u6cd5\u6062\u590d\uff0c\u5e76\u5c06\u540c\u65f6\u5220\u9664\u5f53\u524d\u95ee\u9898\u7684\u56de\u590d\u8bc4\u8bba\u4fe1\u606f\uff0c\u60a8\u786e\u5b9a\u8981\u5220\u9664\u5417\uff1f","deleting":"\u6b63\u5728\u5220\u9664...","success":"\u64cd\u4f5c\u6210\u529f\uff01","denied":"\u65e0\u64cd\u4f5c\u6743\u9650\uff01","error3":"\u64cd\u4f5c\u5f02\u5e38\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01","empty":"\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a","submitting":"\u6b63\u5728\u63d0\u4ea4...","success2":"\u63d0\u4ea4\u6210\u529f\uff01","ncomment":"0\u6761\u8bc4\u8bba","login":"\u62b1\u6b49\uff0c\u60a8\u9700\u8981\u767b\u5f55\u624d\u80fd\u8fdb\u884c\u56de\u590d","error4":"\u63d0\u4ea4\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01","need_title":"\u8bf7\u8f93\u5165\u6807\u9898","need_cat":"\u8bf7\u9009\u62e9\u5206\u7c7b","need_content":"\u8bf7\u8f93\u5165\u5185\u5bb9","success3":"\u66f4\u65b0\u6210\u529f\uff01","success4":"\u53d1\u5e03\u6210\u529f\uff01","need_all":"\u6807\u9898\u3001\u5206\u7c7b\u548c\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a","length":"\u5185\u5bb9\u957f\u5ea6\u4e0d\u80fd\u5c11\u4e8e10\u4e2a\u5b57\u7b26","load_done":"\u56de\u590d\u5df2\u7ecf\u5168\u90e8\u52a0\u8f7d","load_fail":"\u52a0\u8f7d\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01","load_more":"\u70b9\u51fb\u52a0\u8f7d\u66f4\u591a","approve":"\u786e\u5b9a\u8981\u5c06\u5f53\u524d\u95ee\u9898\u8bbe\u7f6e\u4e3a\u5ba1\u6838\u901a\u8fc7\u5417\uff1f","end":"\u5df2\u7ecf\u5230\u5e95\u4e86","upload_fail":"\u56fe\u7247\u4e0a\u4f20\u51fa\u9519\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01","file_types":"\u4ec5\u652f\u6301\u4e0a\u4f20jpg\u3001png\u3001gif\u683c\u5f0f\u7684\u56fe\u7247\u6587\u4ef6","file_size":"\u56fe\u7247\u5927\u5c0f\u4e0d\u80fd\u8d85\u8fc72M","uploading":"\u6b63\u5728\u4e0a\u4f20...","upload":"\u63d2\u5165\u56fe\u7247"}}; //# sourceURL=QAPress-js-js-extra /* ]]> */ </script> <script type="text/javascript" src="https://javaforall.net/wp-content/plugins/qapress/js/qa.js?ver=4.10.2" id="QAPress-js-js"></script> <script type="text/javascript" src="https://javaforall.net/wp-content/themes/justnews/js/wp-embed.js?ver=6.20.0" id="wp-embed-js"></script> <script type="text/javascript" src="https://javaforall.net/wp-content/plugins/baidu-submit/assets/baidu_push.js" id="wb-baidu-push-js"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2f4d2b9bcf94270f8bf99ccde97cb4b9"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "@id": "https://javaforall.net/109536.html", "url": "https://javaforall.net/109536.html", "headline": "Java开发中的Memcache原理及实现", "description": "Java开发中的Memcache原理及实现", "datePublished": "2021-09-04T12:00:00+08:00", "dateModified": "2021-09-04T12:00:00+08:00", "author": {"@type":"Person","name":"全栈程序员-站长","url":"https://javaforall.net/user-2/1","image":"//javaforall.net/wp-content/uploads/2025/04/2025042212371781.jpeg"} } </script> </body> </html>