此处将为大家介绍关于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)
- docker 构建了一个安装了 httpd 和 memcached 的镜像,但是当使用这个镜像运行容器时,memcached 没有启动
- java 中使用 memcached
- JAVA 客户端调用 memcached
- Memcache/Memcached的PHP操作手册(纯手稿版) memcached java memcached官网 redis memcached 比较
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 没有启动
我构建了一个安装了 httpd 和 memcached 的镜像,我希望当我用这个镜像启动一个容器时,memcached 和 httpd 都启动了。
这是我的 dockerfile
FROM amazonlinux:2
MAINTAINER tian
# Install necessary commands
RUN yum update -y
RUN yum install tar -y
RUN yum install unzip -y
RUN yum install wget -y
RUN yum install -y procps
RUN yum install telnet -y
#install apache httpd
RUN yum install httpd -y
# Install memcached and libmemcached in Amazon Linux 2
RUN yum install -y libevent libevent-devel
RUN yum install -y gcc make
RUN wget http://www.memcached.org/files/memcached-1.4.24.tar.gz
RUN tar xvzf memcached-1.4.24.tar.gz
RUN /memcached-1.4.24/configure --enable-64bit
RUN make && make install
CMD ["-D","FOREGROUND"]
#start httpd,work
ENTRYPOINT ["/usr/sbin/httpd"]
#start memcached,not work
ENTRYPOINT ["memcached","-u","nobody","-m","512","-p","11211","127.0.0.1","start"]
EXPOSE 80
构建镜像
docker build -t demo ./ --ulimit nofile=20480:40960 --ulimit nproc=1024:2048
用这个镜像启动一个容器,进入shell
PS D:\\Docker> docker run -d -p 80:80 demo
8619a58a948893916d4a70fcdb89ca2f6c1384a17e29b50a45a4f358fae38afb
PS D:\\Docker> docker exec -it 8619a58a948893916 /bin/bash
bash-4.2# ps -ef|grep httpd
root 1 0 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 6 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 7 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 9 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 14 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 15 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
root 60 52 0 14:00 pts/0 00:00:00 grep httpd
bash-4.2# ps -ef|grep memcached
root 62 52 0 14:00 pts/0 00:00:00 grep memcached
bash-4.2# memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
bash-4.2# ps -ef|grep memcached
nobody 72 1 0 14:06 ? 00:00:00 memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
root 79 52 0 14:06 pts/0 00:00:00 grep memcached
bash-4.2#
可以看到httpd自动启动了,但是memcached直到我手动运行memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
我也试过redhat7,也不行
FROM registry.access.redhat.com/ubi7/ubi:latest
MAINTAINER tian
# Install necessary commands
RUN yum update -y
RUN yum install unzip -y
RUN yum install httpd -y
RUN yum install wget -y
RUN yum install telnet -y
# Install memcached and libmemcached in RHEL 7
RUN yum install memcached libmemcached -y
# can not start memcached
#RUN systemctl enable memcached.service
#RUN systemctl start memcached.service
CMD ["-D","FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"]
EXPOSE 80
如何让 memcached 也自动启动?
谢谢
解决方法
Docker 仅用于运行 1 个服务。因此,通常您需要为 2 个服务 (httpd + memcached) 中的每一个服务一个容器。
如果您确实需要它,您可以使用一个服务管理器脚本来控制单个容器中的多个服务(请参阅https://docs.docker.com/config/containers/multi-service_container/)。
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
1.memcached client for java 客户端 API:memcached client for java
网址:http://www.whalin.com/memcached
最新版本:java_memcached-release_2.0.1
操作示例:
- import com.danga.MemCached.*;
- import org.apache.log4j.*;
- public class TestMemcached {
- public static void main(String[] args) {
- /* 初始化 SockIOPool,管理 memcached 的连接池 */
- String[] servers = { "192.168.1.20:12111" };
- 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));
- }
- }
- }
2.spymemcached 客户端 API:spymemcached client
网址:http://code.google.com/p/spymemcached/
最新版本:memcached-2.1.jar
操作示例:
用 spymemcached 将对象存入缓存
- import java.net.InetSocketAddress;
- import java.util.concurrent.Future;
- import net.spy.memcached.MemcachedClient;
- public class MClient {
- public static void main(String[] args){
- try{
- /* 建立 MemcachedClient 实例,并指定 memcached 服务的 IP 地址和端口号 */
- MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.1.20", 12111));
- 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();
- }
- }
- }
用 spymemcached 从缓存中取得对象
- import java.net.InetSocketAddress;
- import java.util.concurrent.Future;
- import net.spy.memcached.MemcachedClient;
- public class MClient {
- public static void main(String[] args){
- try{
- /* 建立 MemcachedClient 实例,并指定 memcached 服务的 IP 地址和端口号 */
- MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.1.20", 12111));
- /* 按照 key 值从 memcached 中查找缓存,不存在则返回 null */
- Object b = mc.get("neea:testDaF:ksIdno ");
- mc.shutdown();
- }
- catch(Exception ex){
- ex.printStackTrace();
- }
- }
- }
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 比较
data-id="1190000005001849" data-licence="">
memcache和memcached 其实是一个东西,只是php中要是用的扩展不一样一个是 php_memcache.dll 和 php_memcached.dll , 2009年左右有人丰富memcache的用法和性能,才有了memcached ,用法也有了很大的改进比如添加了 getmulti() 批量获取键值
Memcache 类
$memcache = new Memcache;
$memcache->connect(''127.0.0.1'', 11211);
$memcache->pconnec(''127.0.0.1'', 11211); // 打开一个到服务器的持久化连接 , 连接不会在脚本执行结束后或者close()被调用后关闭
$memcache->addServer(''123.57.210.55'', 11211,$persistent,$weight); // 向连接池中添加一个memcache服务器 $persistent 是否持久化连接 $weight 控制桶的数量提升被选中的权重 $timeout 表示连续持续时间
$memcache->set(''name'', ''TK''); // 默认存储不压缩 不过期 , 其中字符串和数值直接存储,其他类型序列化后存储 set其实是add方法和replace方法集合
$memcache->set(''email'', ''julylovin@163.com'',MEMCACHE_COMPRESSED,5); // MEMCACHE_COMPRESSED设置存储是否压缩 , 5表示5秒后过期但是最大只能设置2592000秒(30天) 如果设置为0 表示永不过期, 可以设置将来的时间戳
$memcache->set(''info'',array(''age''=>''26'',''salary''=>''1000'')); // 可以直接存储数组,redis中存储需要手动serialize()序列化
$memcache->add(''counter'', ''10'', MEMCACHE_COMPRESSED, 0); //如果键值存在会返回false , 如果不存在, 和set方法一样,生成一个counter的key并赋值10
$memcache->replace (''counter'', ''10''); //如果键值不存在会返回false , 如果存在, 替换counter的值为10
$memcache->increment(''counter'', 3); // 首先将元素当前值转换成数值然后减去value 操作counter键值+3 若键不存在 则返回false 不能用于压缩的键值操作,否则get键会失败
$memcache->decrement(''counter'', 3); // 操作counter键值-3 , 若键不存在 则返回false
$memcache->delete(''counter'', 3); // 操作删除键counter , 3表示3秒内删除,默认是0即立即删除
$memcache->flush(); //flush()立即使所有已经存在的元素失效
$memcache->getExtendedStats (); // 返回一个二维关联数据的服务器统计信息。数组的key由host:port方式组成
$memcache->getServerStatus (''127.0.0.1''); // 获取返回一个服务器的在线/离线状态 0表示离线 非0在线
$memcache->getStats(); // 获取服务器统计信息
$memcache->getVersion(); // 返回服务器版本信息
$memcache->setCompressThreshold ($threshold, $min_saving); // 开启大值自动压缩 $threshold设置压缩阀值 2000字节 ,即字节数大于2K 就压缩 $min_saving 0--1之间 0.2表示压缩20%
$memcache->setServerParams(''memcache_host'', 11211, 1, 15, true, ''_callback_memcache_failure''); // $memcache->addServer(''memcache_host'', 11211, false, 1, 1, -1, false); 已经通过addServer 配置过服务器 使用setServerParams 重新设置配置信息
以上就介绍了Memcache/Memcached的PHP操作手册(纯手稿版),包括了Memcached方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
今天关于memcached和java的介绍到此结束,谢谢您的阅读,有关docker 构建了一个安装了 httpd 和 memcached 的镜像,但是当使用这个镜像运行容器时,memcached 没有启动、java 中使用 memcached、JAVA 客户端调用 memcached、Memcache/Memcached的PHP操作手册(纯手稿版) memcached java memcached官网 redis memcached 比较等更多相关知识的信息可以在本站进行查询。
本文标签: