Memcached介绍
下面就来介绍一下Memcached。
1、什么是Memcached
Memcached是一个开源的高性能,分布式的内存对象缓存系统,通过键值队的形式来对数据进行存取,Memcached是简单而强大,它的简单设计促进快速部署,易于开发,解决了大数据缓存面临的许多问题。
官方网址是:http://memcached.org/,目前已经有很多知名的互联网应用使用到了Memcached,比如Wikipedia、Flickr、Youtube、Wordpress等等。
2、下载Windows平台下的MemCached,地址为:
http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
对应的源码地址为:
http://code.jellycan.com/files/memcached-1.2.6-win32-src.zip
然后,解压开来,会看到一个memcached.exe文件,进行如下图的安装,将以系统服务的形式安装到机上
然后查看系统服务,会发现已经可以看到memcached服务了
然后,选中此服务点鼠标右键,启动此服务。
在DOS界面中输入:telnet 127.0.0.1 11211来确认服务是否启动无误,如果无误,则会显示如下窗口:
上面图中显示的ERROR是我随便输入字符后按回车显示的,这是因为你需要安装memcached规定的协议来进行输入,否则就显示如上所示错误。
3、 memcached的协议与数据存取
所谓协议,可以理解为对其操作(数据存取)的语法规则,存取数据的常用命令和参数如下:
set:存入一条记录
key:记录的键值
flags:十进制的int,标识存储记录时的客户端标志,在记录取出时会返回。
exptim:数据的过期时间,0表示不过期,其他数值则表示有效的毫秒数,在过期后,客户端将取不到这条记录,memcached中的过期记录会被清空或删除。
get:表示从memcached取出key对应的值,如果没有对应的值则返回结束标志END
append:表示对key所对应的值在最后再加入输入的内容
delete:删除key对应的值
更多协议可参考:memcached包中所带的protocol.txt
具体例子如:
需要注意的是:在set时如果指定的字符长度为5,而输入的内容超过了这个长度,那么就会报错:CLIENT_ERROR bad data chunk
4、 编写代码对memcached进行数据存取操作
一般而言,可以使用开源已封装好的memcached客户端来对memcached进行操作,当然你也可以根据memcached的协议在代码中通过编写socket通信程序实现。
Memcached-Java-Client的下载页面:
http://github.com/gwhalin/Memcached-Java-Client/downloads,然后选择下载:
java_memcached-release_2.5.1.zip
在解压开的Test目录中可以看到有些写好的例子,可以通过运行com.danga.MemCached.test. TestMemcached来查看数据存入和取出情况,这里也贴出其代码:
package com.danga.MemCached.test; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; import org.apache.log4j.*; public class TestMemcached { public static void main(String[] args) { // memcached should be running on port 11211 but NOT on 11212 BasicConfigurator.configure(); //缓存服务器地址,多台服务器则以逗号隔开,11211为memcached使用的端口号 String[] servers = { “localhost: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 mcc = new MemCachedClient(); // turn off most memcached client logging: //Logger.getLogger( MemCachedClient.class.getName() ).setLevel( com.schooner.MemCached.Logger. ); //以下是数据写入和取出操作例子 for ( int i = 0; i < 10; i++ ) { boolean success = mcc.set( “” + i, “Hello!” ); String result = (String)mcc.get( “” + i ); System.out.println( String.format( “set( %d ): %s”, i, success ) ); System.out.println( String.format( “get( %d ): %s”, i, result ) ); } System.out.println( “\n\t — sleeping –\n” ); try { Thread.sleep( 10000 ); } catch ( Exception ex ) { } for ( int i = 0; i < 10; i++ ) { boolean success = mcc.set( “” + i, “Hello!” ); String result = (String)mcc.get( “” + i ); System.out.println( String.format( “set( %d ): %s”, i, success ) ); System.out.println( String.format( “get( %d ): %s”, i, result ) ); } } }
MemCached的java客户端实例
package com.danga.MemCached.test; import com.danga.MemCached.*; public class TestMemcached { public static void main(String[] args) { /*初始化SockIOPool,管理memcached的连接池*/ String[] servers = { "192.168.105.217: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)); } } }
1.解压(本例中解压到c:\memcached)。
2、在命令行状态下输入: c:\memcached\memcached.exe -d install 。至此memcached已经安装成windows服务
3、在命令行下输入: c:\memcached\memcached.exe -d start 以启动memcached服务。当然也可以选择在windows服务中启动
问题内容: 哪个是最好的Java Memcached客户端,为什么? 问题答案: 作为spymemcached的作者,我有些偏颇,但是我说这是我的,原因如下: 从头开始设计,以尽可能地不受阻碍。 当您请求数据,发布数据集等时,会有一个微小的并发队列插入,并且您会得到一个Future来阻止结果(使用一些便捷方法来处理诸如get之类的常见情况)。 积极优化 您可以在我的优化页面上阅读更多信息,但是我会
本文向大家介绍C# Memcached缓存用法实例详解,包括了C# Memcached缓存用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中Memcached缓存的用法,分享给大家供大家参考。具体方法如下: ICacheStrategy.cs文件如下: MemcachedStrategy.cs文件如下: 希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍Asp.Mvc 2.0用户客户端验证实例讲解(3),包括了Asp.Mvc 2.0用户客户端验证实例讲解(3)的使用技巧和注意事项,需要的朋友参考一下 今天给大家讲解下ASP.NET mvc的客户端验证.通常情况下,我们在页面中对输入的内容多要进行客户端验证,客户端验证一般使用JS进行,这里咱们讲解下使用jquery.validate插件进行客户端验证。 首先咱们看下注册页面的验证效果
Web 应用程序可能需要为成百上千甚至更多的用户同时提供服务。如果你没有采取必要的措施,在这种负载下,你的网站可能会崩溃或变得没有响应。 假设在主页显示最后 10 条新闻,并且平均每分钟有上千名用户访问此页面。你可能为每个用户通过查询数据库来显示页面视图信息: SELECT TOP 10 Title, NewsDate, Subject, Body FROM News ORDER BY NewsD
我需要一些帮助来理解为什么在Eureka注册的服务会想要彼此通信,尽管没有实际运行。例如,我在尤里卡注册了服务A和服务B。如果我搞垮了服务B,那么即使服务A没有运行,它仍然会尝试与服务B进行30秒到3分钟的通信。这样做的目的是什么?有什么办法可以绕过它吗?谢谢你!
问题内容: 我正在寻找Java分布式缓存解决方案。我们希望功能喜欢: 我们已经分析了Terracotta这样的框架,它似乎是缓存框架中我们想要的一切……但是,似乎需要一个中央缓存节点,这成为我们的单点故障。 除了推出我们自己的解决方案之外,还有其他想法吗? 问题答案: 我建议使用JBossCache或EhCache(使用分布式缓存侦听器)。我都用过,我都喜欢,它们都适合您的要求。