GVKun编程网logo

memcached(java)

1

此处将为大家介绍关于memcached的详细内容,并且为您解答有关java的相关问题,此外,我们还将为您介绍关于docker构建了一个安装了httpd和memcached的镜像,但是当使用这个镜像运行

此处将为大家介绍关于memcached的详细内容,并且为您解答有关java的相关问题,此外,我们还将为您介绍关于docker 构建了一个安装了 httpd 和 memcached 的镜像,但是当使用这个镜像运行容器时,memcached 没有启动、java 中使用 memcached、JAVA 客户端调用 memcached、Memcache/Memcached的PHP操作手册(纯手稿版) memcached java memcached官网 redis memcached 比较的有用信息。

本文目录一览:

memcached(java)

memcached(java)

package com.cached;


import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;


public class MemcachedCache implements ICache {

//创建全局的唯一实例
    protected static MemCachedClient mcc = new MemCachedClient();
    protected static MemcachedCache memCached = new MemcachedCache();
    

    static{

//这里是magent代理服务器IP

    String[] servers = {"192.168.1.160:12000"};
//Integer[] weights = {3};

SockIOPool pool = SockIOPool.getInstance();
pool.setServers(servers);
//pool.setWeights(weights);
        pool.setInitConn(5);  
        pool.setMinConn(5);  
        pool.setMaxConn(200);  
        pool.setMaxIdle(1000*30*30);  
        pool.setMaintSleep(30);  
        pool.setNagle(false);  
        pool.setSocketTO(30);  
        pool.setSocketConnectTO(0);  
        pool.initialize();  
        
//mcc.setCompressEnable( true );
//mcc.setCompressThreshold( 64 * 1024 );
}
    
@Override
public boolean set(String key, Object value, Date date) {
return mcc.set(key, value, date);
}


@Override
public Object get(String key) {
return mcc.get(key);
}

/**
* 获取唯一实例
* @return
*/
public static MemcachedCache getInstance(){
   return memCached;
}


}

docker 构建了一个安装了 httpd 和 memcached 的镜像,但是当使用这个镜像运行容器时,memcached 没有启动

docker 构建了一个安装了 httpd 和 memcached 的镜像,但是当使用这个镜像运行容器时,memcached 没有启动

如何解决docker 构建了一个安装了 httpd 和 memcached 的镜像,但是当使用这个镜像运行容器时,memcached 没有启动

我构建了一个安装了 httpd 和 memcached 的镜像,我希望当我用这个镜像启动一个容器时,memcached 和 httpd 都启动了。

这是我的 dockerfile

  1. FROM amazonlinux:2
  2. MAINTAINER tian
  3. # Install necessary commands
  4. RUN yum update -y
  5. RUN yum install tar -y
  6. RUN yum install unzip -y
  7. RUN yum install wget -y
  8. RUN yum install -y procps
  9. RUN yum install telnet -y
  10. #install apache httpd
  11. RUN yum install httpd -y
  12. # Install memcached and libmemcached in Amazon Linux 2
  13. RUN yum install -y libevent libevent-devel
  14. RUN yum install -y gcc make
  15. RUN wget http://www.memcached.org/files/memcached-1.4.24.tar.gz
  16. RUN tar xvzf memcached-1.4.24.tar.gz
  17. RUN /memcached-1.4.24/configure --enable-64bit
  18. RUN make && make install
  19. CMD ["-D","FOREGROUND"]
  20. #start httpd,work
  21. ENTRYPOINT ["/usr/sbin/httpd"]
  22. #start memcached,not work
  23. ENTRYPOINT ["memcached","-u","nobody","-m","512","-p","11211","127.0.0.1","start"]
  24. EXPOSE 80

构建镜像

  1. docker build -t demo ./ --ulimit nofile=20480:40960 --ulimit nproc=1024:2048

用这个镜像启动一个容器,进入shell

  1. PS D:\\Docker> docker run -d -p 80:80 demo
  2. 8619a58a948893916d4a70fcdb89ca2f6c1384a17e29b50a45a4f358fae38afb
  3. PS D:\\Docker> docker exec -it 8619a58a948893916 /bin/bash
  4. bash-4.2# ps -ef|grep httpd
  5. root 1 0 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
  6. apache 6 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
  7. apache 7 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
  8. apache 9 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
  9. apache 14 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
  10. apache 15 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
  11. root 60 52 0 14:00 pts/0 00:00:00 grep httpd
  12. bash-4.2# ps -ef|grep memcached
  13. root 62 52 0 14:00 pts/0 00:00:00 grep memcached
  14. bash-4.2# memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
  15. bash-4.2# ps -ef|grep memcached
  16. nobody 72 1 0 14:06 ? 00:00:00 memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
  17. root 79 52 0 14:06 pts/0 00:00:00 grep memcached
  18. bash-4.2#

可以看到httpd自动启动了,但是memcached直到我手动运行memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start

我也试过redhat7,也不行

  1. FROM registry.access.redhat.com/ubi7/ubi:latest
  2. MAINTAINER tian
  3. # Install necessary commands
  4. RUN yum update -y
  5. RUN yum install unzip -y
  6. RUN yum install httpd -y
  7. RUN yum install wget -y
  8. RUN yum install telnet -y
  9. # Install memcached and libmemcached in RHEL 7
  10. RUN yum install memcached libmemcached -y
  11. # can not start memcached
  12. #RUN systemctl enable memcached.service
  13. #RUN systemctl start memcached.service
  14. CMD ["-D","FOREGROUND"]
  15. ENTRYPOINT ["/usr/sbin/httpd"]
  16. EXPOSE 80

如何让 memcached 也自动启动?

谢谢

解决方法

Docker 仅用于运行 1 个服务。因此,通常您需要为 2 个服务 (httpd + memcached) 中的每一个服务一个容器。

如果您确实需要它,您可以使用一个服务管理器脚本来控制单个容器中的多个服务(请参阅https://docs.docker.com/config/containers/multi-service_container/)。

java 中使用 memcached

java 中使用 memcached

一、 概念

Memcached 是 danga.com(运营 LiveJournal 的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。

二、 适用场合

1. 分布式应用。由于 memcached 本身基于分布式的系统,所以尤其适合大型的分布式系统。

2. 数据库前段缓存。数据库常常是网站系统的瓶颈。数据库的大并发量访问,常常造成网站内存溢出。当然我们也可以使用 Hibernate 的缓存机制。但 memcached 是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的拆分。

3. 服务器间数据共享。举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进行集群,那这个时候用户登录后,登录信息如何从登录系统服务器同步到查询系统服务器呢?这时候,我们便可以使用 memcached,登录系统将登录信息缓存起来,查询系统便可以获得登录信息,就像获取本地信息一样。

三、 不适用场合

那些不需要 “分布” 的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached 不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源

四、 安装

      下载:memcached-1.2.1-win32.zip

这里介绍 windows 环境的安装。

1. 下载 memcache 的 windows 稳定版,解压放某个盘下面,比如在 F:\study\J2EE\memcached\memcached-win32

2. 在 cmd 下输入 ''F:\study\J2EE\memcached\memcached-win32\memcached.exe -d install'' 安装

3. 再输入: ''F:\study\J2EE\memcached\memcached-win32\memcached.exe -d start'' 启动。

3. 再输入: ''F:\study\J2EE\memcached\memcached-win32\memcached.exe -d stop'' 停止。

3. 再输入: ''F:\study\J2EE\memcached\memcached-win32\memcached.exe -d uninstall 卸载。

以后 memcached 将作为 windows 的一个服务每次开机时自动启动。这样服务器端已经安装完毕了


五、 例子

     下载 jar 文件 java_memcached-release_2.6.3.jar 依赖其他 commons-pool-1.5.6.jar、slf4j-api-1.6.1.jar、slf4j-simple-1.6.1.jar


package com.demo.memcached;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class MemCached {
private static MemCachedClient cachedClient = new MemCachedClient (); //memcached 客户端单例
/**
* 初始化连接池
*/
static {
System.out.println ("初始化连接池");
// 获取连接池的实例
SockIOPool pool = SockIOPool.getInstance();
// 服务器列表及其权重
String[] servers = { "172.20.0.196:11211"};
Integer[] weights = { 3 };
// 设置服务器信息
pool.setServers(servers);
pool.setWeights(weights);
// 设置初始连接数、最小连接数、最大连接数、最大处理时间
pool.setInitConn(10);
pool.setMinConn(10);
pool.setMaxConn(1000);
// pool.setMaxIdle(1000 * 60 * 60);
pool.setMaxIdle(1000 * 60 * 60);
// 设置主线程睡眠时间,每 3 秒苏醒一次,维持连接池大小  
//maintSleep 千万不要设置成 30,访问量一大就出问题,单位是毫秒,推荐 30000 毫秒。
pool.setMaintSleep(30000);
// 关闭套接字缓存  
        pool.setNagle(false);  
        // 连接建立后的超时时间  
        pool.setSocketTO(3000);  
        // 连接建立时的超时时间  
        pool.setSocketConnectTO(0); 
// 初始化并启动连接池
pool.initialize();
// 压缩设置,超过指定大小的都压缩
// cachedClient.setCompressEnable(true);
// cachedClient.setCompressThreshold(1024*1024);
}
public static boolean add(String key, Object value) {
return cachedClient.add(key, value);
}
/**
* 新增缓存数据,该 KEY 值如果没有则插入
* @param key
*        键(key)
* @param value
* @param expire
*        过期时间(单位是秒)
*        
* @return
*/
public static boolean add(String key, Object value, Integer expire) {
return cachedClient.add(key, value, expire);
}
public static boolean add(String key, Object value,  Date expireDate) {
return cachedClient.add(key, value, expireDate);
}
public static boolean set(String key, Object value) {
return cachedClient.set(key, value);
}
/**
* 设置缓存中的对象(value),如果没有则插入,如果有则修改。
* @param key
* @param value
* @param expire
* @return
*/
public static boolean set(String key, Object value, Integer expire) {
return cachedClient.set(key, value, expire);
}
/**

* @param key
* @param value
* @param expireDate
*        失效日期
* @return
*/
public static boolean set(String key, Object value, Date expireDate) {
return cachedClient.set(key, value, expireDate);
}
public static boolean replace(String key, Object value) {
return cachedClient.replace(key, value);
}
/**
* 该键的新值(new value),如果有则修改。
* @param key
* @param value
* @param expire
* @return
*/
public static boolean replace(String key, Object value, Integer expire) {
return cachedClient.replace(key, value, expire);
}
public static boolean replace(String key, Object value, Date expireDate) {
return cachedClient.replace(key, value, expireDate);
}
public static Object get(String key) {
return cachedClient.get(key);
}
/**
* 清空所有对象
*/
public static void flushAll(){
cachedClient.flushAll();
}
}


public class MemcachedTest {


public static void main(String[] agr){

// MemCached.set("mem", "12e3232", 1);
// MemCached.set("mem1", "mem1mem1");
// Date date=new Date(4000);
// MemCached.set("mem", "12e3232", date);
try{
// Thread.sleep(3000);
String mem=(String)MemCached.get("mem");
System.out.println("mem="+mem);
}catch(Exception ex){
ex.printStackTrace();
}
}
}



JAVA 客户端调用 memcached

JAVA 客户端调用 memcached

高春辉、王春生、朱峰:关于开源创业的 15 件小事
JAVA 客户端调用 memcached 博客分类: java memcached

1.memcached client for java 客户端 API:memcached client for java 
网址:http://www.whalin.com/memcached 
最新版本:java_memcached-release_2.0.1 

操作示例: 

Java 代码  
  1. import com.danga.MemCached.*;  
  2. import org.apache.log4j.*;  
  3. public class TestMemcached {  
  4.     public static void main(String[] args) {  
  5.         /* 初始化 SockIOPool,管理 memcached 的连接池 */  
  6.         String[] servers = { "192.168.1.20:12111" };  
  7.         SockIOPool pool = SockIOPool.getInstance();  
  8.         pool.setServers(servers);  
  9.         pool.setFailover(true);  
  10.         pool.setInitConn(10);  
  11.         pool.setMinConn(5);  
  12.         pool.setMaxConn(250);  
  13.         pool.setMaintSleep(30);  
  14.         pool.setNagle(false);  
  15.         pool.setSocketTO(3000);  
  16.         pool.setAliveCheck(true);  
  17.         pool.initialize();  
  18.         /* 建立 MemcachedClient 实例 */  
  19.         MemCachedClient memCachedClient = new MemCachedClient();  
  20.         for (int i = 0; i < 10; i++) {  
  21.             /* 将对象加入到 memcached 缓存 */  
  22.             boolean success = memCachedClient.set("" + i, "Hello!");  
  23.             /* 从 memcached 缓存中按 key 值取对象 */  
  24.             String result = (String) memCachedClient.get("" + i);  
  25.             System.out.println(String.format("set( %d ): %s", i, success));  
  26.             System.out.println(String.format("get( %d ): %s", i, result));  
  27.         }  
  28.     }  
  29. }  



2.spymemcached 客户端 API:spymemcached client 
网址:http://code.google.com/p/spymemcached/ 
最新版本:memcached-2.1.jar 

操作示例: 
用 spymemcached 将对象存入缓存 

Java 代码  
  1. import java.net.InetSocketAddress;  
  2. import java.util.concurrent.Future;  
  3.   
  4. import net.spy.memcached.MemcachedClient;  
  5.   
  6. public class MClient {  
  7.       
  8.     public static void main(String[] args){  
  9.         try{  
  10.             /* 建立 MemcachedClient 实例,并指定 memcached 服务的 IP 地址和端口号 */  
  11.             MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.1.20"12111));  
  12.             Future<Boolean> b = null;  
  13.             /* 将 key 值,过期时间 (秒) 和要缓存的对象 set 到 memcached 中 */  
  14.             b = mc.set("neea:testDaF:ksIdno"900"someObject");  
  15.             if(b.get().booleanValue()==true){  
  16.                 mc.shutdown();  
  17.             }  
  18.         }  
  19.         catch(Exception ex){  
  20.             ex.printStackTrace();  
  21.         }  
  22.     }  
  23. }  



用 spymemcached 从缓存中取得对象 

Java 代码  
  1. import java.net.InetSocketAddress;  
  2. import java.util.concurrent.Future;  
  3.   
  4. import net.spy.memcached.MemcachedClient;  
  5.   
  6. public class MClient {  
  7.       
  8.     public static void main(String[] args){  
  9.         try{  
  10.             /* 建立 MemcachedClient 实例,并指定 memcached 服务的 IP 地址和端口号 */  
  11.             MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.1.20"12111));  
  12.             /* 按照 key 值从 memcached 中查找缓存,不存在则返回 null */  
  13. Object b = mc.get("neea:testDaF:ksIdno ");  
  14.             mc.shutdown();  
  15.         }  
  16.         catch(Exception ex){  
  17.             ex.printStackTrace();  
  18.         }  
  19.     }  
  20. }  



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。 

 

http://lveyo.iteye.com/blog/240146

Memcache/Memcached的PHP操作手册(纯手稿版) memcached java memcached官网 redis memcached 比较

Memcache/Memcached的PHP操作手册(纯手稿版) memcached java memcached官网 redis memcached 比较

data-id="1190000005001849" data-licence="">

memcache和memcached 其实是一个东西,只是php中要是用的扩展不一样一个是 php_memcache.dll 和 php_memcached.dll , 2009年左右有人丰富memcache的用法和性能,才有了memcached ,用法也有了很大的改进比如添加了 getmulti() 批量获取键值


Memcache 类

$memcache = new Memcache;
登录后复制
$memcache-&gt;connect(''127.0.0.1'', 11211);
登录后复制
$memcache-&gt;pconnec(''127.0.0.1'', 11211); 
// 打开一个到服务器的持久化连接 , 连接不会在脚本执行结束后或者close()被调用后关闭
登录后复制
$memcache-&gt;addServer(''123.57.210.55'', 11211,$persistent,$weight); 
// 向连接池中添加一个memcache服务器 $persistent 是否持久化连接 $weight 
   控制桶的数量提升被选中的权重 $timeout 表示连续持续时间
登录后复制
$memcache-&gt;set(''name'', ''TK''); 
// 默认存储不压缩 不过期 , 其中字符串和数值直接存储,其他类型序列化后存储 
   set其实是add方法和replace方法集合
登录后复制
$memcache-&gt;set(''email'', ''julylovin@163.com'',MEMCACHE_COMPRESSED,5);
// MEMCACHE_COMPRESSED设置存储是否压缩 , 5表示5秒后过期但是最大只能设置2592000秒(30天)
   如果设置为0 表示永不过期, 可以设置将来的时间戳
登录后复制
$memcache-&gt;set(''info'',array(''age''=&gt;''26'',''salary''=&gt;''1000''));  
// 可以直接存储数组,redis中存储需要手动serialize()序列化
登录后复制
$memcache-&gt;add(''counter'', ''10'', MEMCACHE_COMPRESSED, 0); 
//如果键值存在会返回false , 如果不存在, 和set方法一样,生成一个counter的key并赋值10
登录后复制
$memcache-&gt;replace (''counter'', ''10'');
 //如果键值不存在会返回false , 如果存在, 替换counter的值为10
登录后复制
$memcache-&gt;increment(''counter'', 3); 
// 首先将元素当前值转换成数值然后减去value 操作counter键值+3 
   若键不存在 则返回false 不能用于压缩的键值操作,否则get键会失败
登录后复制
$memcache-&gt;decrement(''counter'', 3); // 操作counter键值-3 , 若键不存在 则返回false
登录后复制
$memcache-&gt;delete(''counter'', 3); // 操作删除键counter , 3表示3秒内删除,默认是0即立即删除
登录后复制
$memcache-&gt;flush(); //flush()立即使所有已经存在的元素失效
登录后复制
$memcache-&gt;getExtendedStats (); 
// 返回一个二维关联数据的服务器统计信息。数组的key由host:port方式组成
登录后复制
$memcache-&gt;getServerStatus (''127.0.0.1''); // 获取返回一个服务器的在线/离线状态  0表示离线 非0在线
登录后复制
$memcache-&gt;getStats(); // 获取服务器统计信息
登录后复制
$memcache-&gt;getVersion(); // 返回服务器版本信息
登录后复制
$memcache-&gt;setCompressThreshold ($threshold, $min_saving); 
//  开启大值自动压缩   $threshold设置压缩阀值 2000字节 ,即字节数大于2K 就压缩
    $min_saving  0--1之间  0.2表示压缩20%
登录后复制
$memcache-&gt;setServerParams(''memcache_host'', 11211, 1, 15, true, ''_callback_memcache_failure''); 
// $memcache-&gt;addServer(''memcache_host'', 11211, false, 1, 1, -1, false);
   已经通过addServer 配置过服务器 使用setServerParams 重新设置配置信息
登录后复制

以上就介绍了Memcache/Memcached的PHP操作手册(纯手稿版),包括了Memcached方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

今天关于memcachedjava的介绍到此结束,谢谢您的阅读,有关docker 构建了一个安装了 httpd 和 memcached 的镜像,但是当使用这个镜像运行容器时,memcached 没有启动、java 中使用 memcached、JAVA 客户端调用 memcached、Memcache/Memcached的PHP操作手册(纯手稿版) memcached java memcached官网 redis memcached 比较等更多相关知识的信息可以在本站进行查询。

本文标签: