本文目录:
- 1、C# 操作Memcached
- 2、win10怎么安装memcache缓存服务
- 3、如何配置Memcached服务器
C# 操作Memcached
要在nuget里引用(安装) EnyimMemcached ,下面是以调用阿里云的ocs(memcached)服务为例
using System;
using Enyim.Caching;
namespace MemcacheTest
{
///
/// MemcachedClient 帮组类 对外提供接口方法
///
public class MemcachedHelper {
///
/// 定义一个静态MemcachedClient客户端,它随类一起加载,所有对象共用
///
private static MemcachedClient mclient;
///
/// 静态构造函数,初始化Memcached客户端
///
static MemcachedHelper()
{
mclient = MemCached.getInstance();
}
///
/// 向Memcached缓存中添加一条数据
///
///返回是否添加成功
public static bool SetValue(string groupName,string key, object value, DateTime expiry)
{
key = groupName + "-" + key;
return mclient.Store(Enyim.Caching.Memcached.StoreMode.Set,key, value, expiry);
}
///
/// 向Memcached缓存中添加一条数据 默认超时24小时
////
public static bool SetValue(string groupName, string key, object value)
{
key = groupName + "-" + key;
eturn mclient.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value, DateTime.Now.AddHours(24));
}
///
/// 通过key 来得到一个对象
///
public static object GetValue(string groupName, string key)
{
key = groupName + "-" + key;
return mclient.Get(key);
}
///
/// 通过key 来得到一个对象(前类型)
///
public static T GetValue(string groupName, string key)
{
key = groupName + "-" + key;
return mclient.Get(key);
}
///
/// 清除指定key的cache
///
public static bool Remove(string groupName, string key)
{
key = groupName + "-" + key;
return mclient.Remove(key);
}
///
/// 清除所有cache
///
public static void RemoveAll()
{
mclient.FlushAll();
}
}
}
usingSystem.Net;
usingEnyim.Caching;
usingEnyim.Caching.Configuration;
usingEnyim.Caching.Memcached;
namespaceMemcacheTest
{
///
///MemcachedClient 配置类
///
publicsealedclassMemCached
{
privatestaticMemcachedClient MemClient;
staticreadonlyobjectpadlock =newobject();
//线程安全的单例模式
publicstaticMemcachedClientgetInstance()
{
if(MemClient ==null)
{
lock(padlock)
{
if(MemClient ==null)
{
MemClientInit();
}
}
}
returnMemClient;
}
staticvoidMemClientInit()
{
//初始化缓存
MemcachedClientConfiguration memConfig =newMemcachedClientConfiguration();
IPAddress newaddress = IPAddress.Parse(Dns.GetHostEntry("XXXXXXXXXX.m.cnhzalicm10pub001.ocs.aliyuncs.com").AddressList[0].ToString());//xxxx替换为ocs控制台上的“内网地址”
IPEndPoint ipEndPoint =newIPEndPoint(newaddress,11211);// 配置文件 - ip
memConfig.Servers.Add(ipEndPoint);// 配置文件 - 协议
memConfig.Protocol = MemcachedProtocol.Binary;
// 配置文件-权限,如果使用了免密码功能,则无需设置userName和password
memConfig.Authentication.Type =typeof(PlainTextAuthenticator);
memConfig.Authentication.Parameters["zone"] ="";
memConfig.Authentication.Parameters["userName"] ="XXXXXXXXXXXXXXXXX";
memConfig.Authentication.Parameters["password"] ="XXXXXXXXXX";
//下面请根据实例的最大连接数进行设置
memConfig.SocketPool.MinPoolSize =5;
memConfig.SocketPool.MaxPoolSize =200;
MemClient =newMemcachedClient(memConfig);
}
}
}
程序调用
MemcachedHelper.SetValue(groupName,strKey, strValue, DateTime.Now.AddMinutes(5));
varrestr = MemcachedHelper.GetValue(groupName,strKey);
varobj = MemcachedHelper.GetValue(groupName,"p001");
win10怎么安装memcache缓存服务
win10安装memcache缓存服务步骤如下:1、把下载好的memcache安装包放在C盘,按win+R键,输入cmd,进入dos命令行,输入cd c:/memcached进入C盘下的memcache安装包目录,如图2、再输入memcached.exe -d install进行安装,如图3、输入memcached.exe -d start开启memcache服务4、最后如果需要php支持memcache,需要将php_memcache.dll拷入php目录下的ext目录,然后再在php.ini里加入,最后重启apache或iis生效。如图
如何配置Memcached服务器
Windows下的Memcache安装
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在终端(也即cmd命令界面)下输入 c:\memcached\memcached.exe -d install --安装memcached成为服务,这样才能正常运行,否则运行失败!
3. 再输入: c:\memcached\memcached.exe -d start --启动memcached的。
以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
Linux下的安装:
1.下载memcached和libevent,放到 /tmp 目录下
# cd /tmp
# wget
# wget
2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install
3.测试libevent是否安装成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 - libevent-1.2.so.1.0.3
-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so - libevent-1.2.so.1.0.3
4.安装memcached,同时需要安装中指定libevent的安装位置:
# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached ,
5.测试是否成功安装memcached:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug
memcached的基本设置:
1.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,这里是10MB,
-u是运行Memcache的用户,这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid,
2.如果要结束Memcache进程,执行:
# kill `cat /tmp/memcached.pid`
也可以启动多个守护进程,不过端口不能重复。
3.重启apache,service httpd restart
java的客户端连接程序:
将java_memcached-release_1.6.zip解压后的目录中的java_memcached-release_2.0.jar文件复制到java项目的lib目录下。
package utils.cache;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
* 使用memcached的缓存实用类.
*/
public class MemCached
{
// 创建全局的唯一实例
protected static MemCachedClient mcc = new MemCachedClient();
protected static MemCached memCached = new MemCached();
// 设置与缓存服务器的连接池
static {
// 服务器列表和其权重
String[] servers = {"127.0.0.1:11211"};
Integer[] weights = {3};
// 获取socke连接池的实例对象
SockIOPool sockIOPool = SockIOPool.getInstance();
// 设置服务器信息
sockIOPool.setServers( servers );
sockIOPool.setWeights( weights );
// 设置初始连接数、最小和最大连接数以及最大处理时间
sockIOPool.setInitConn( 5 );
sockIOPool.setMinConn( 5 );
sockIOPool.setMaxConn( 250 );
sockIOPool.setMaxIdle( 1000 * 60 * 60 * 6 );
// 设置主线程的睡眠时间
sockIOPool.setMaintSleep( 30 );
// 设置TCP的参数,连接超时等
sockIOPool.setNagle( false );
sockIOPool.setSocketTO( 3000 );
sockIOPool.setSocketConnectTO( 0 );
//sockIOPool.setFailover(bFailover);
//sockIOPool.setAliveCheck(bAliveCheck);
// 初始化连接池
sockIOPool.initialize();
// 压缩设置,超过指定大小(单位为K)的数据都会被压缩
if (memCachedClient == null)
{
mcc = new MemCachedClient(sPoolName);
mcc.setCompressEnable(true);
mcc.setCompressThreshold(4096);
mcc.setPrimitiveAsString(true);
}
}
/*
h3基于Spring的配置,如下:/h3
pre
bean id="memCachedService" class="cha-782f-82dd-3351-f198 com.ms.memcached.MemCachedServiceImpl"
constructor-arg index="0" value="${memcached.pool.name}" /
constructor-arg index="1" value="${memcached.pool.servers}" /
constructor-arg index="2" value="${memcached.pool.initConn}" /
constructor-arg index="3" value="${memcached.pool.maxConn}" /
constructor-arg index="4" value="${memcached.pool.minConn}" /
constructor-arg index="5" value="${memcached.pool.socketTO}" /
constructor-arg index="6" value="${memcached.pool.maintSleep}" /
constructor-arg index="7" value="${memcached.pool.nagle}" /
constructor-arg index="8" value="${memcached.pool.failover}" /
constructor-arg index="9" value="${memcached.pool.aliveCheck}" /
/bean
/pre
h3利用com.MS.cache.properties来设置参数,如下:/h3
pre
memcached.pool.name = MS
memcached.pool.servers = 192.168.9.132:12000,192.168.9.133:12000
memcached.pool.initConn = 128
memcached.pool.maxConn = 1024
memcached.pool.minConn = 20
memcached.pool.socketTO = 3000
memcached.pool.maintSleep = 30
memcached.pool.nagle = false
memcached.pool.failover = true
memcached.pool.aliveCheck = true
/pre
*/
/**
* 保护型构造方法,不允许实例化!
*/
protected MemCached()
{
}
/**
* 获取唯一实例.
*/
public static MemCached getInstance()
{
return memCached;
}
/**
* 添加一个指定的值到缓存中.
* @param key
* @param value
*/
//新增指定key的缓存内容,但不覆盖已存在的内容。
public boolean add(String key, Object value)
{
return mcc.add(key, value);
}
//expiry过期时间
public boolean add(String key, Object value, Date expiry)
{
return mcc.add(key, value, expiry);
}
//新增或覆盖指定Key的缓存内容
public boolean set(String key, Object value)
{
return mcc.set(key, value);
}
//lExpiry过期时间
public boolean set(String key, Object value, long lExpiry)
{
return mcc.set(key, value, new Date(lExpiry));
}
//根据指定的Key获取缓存内容
public boolean get(String key)
{
return mcc.get(key);
}
//根据指定Key更新缓存内容
public boolean replace(String key, Object value)
{
return mcc.replace(key, value);
}
//lExpiry 指定的时间
public boolean replace(String key, Object value, long lExpiry)
{
return mcc.replace(key, value, new Date(lExpiry));
}
//根据指定Key删除缓存内容
public boolean delete(String key, Object value)
{
return mcc.delete(key, value);
}
//根据指定Key在指定时间后删除缓存内容
public boolean delete(String key, Object value, long lExpiry)
{
return mcc.delete(key, value, new Date(lExpiry));
}
//检测Cache中当前Key是否存在
public boolean exists(String key)
{
return mcc.exists(key);
}
//根据指定一批Key批量获取缓存内容。
/*
* @param sKeys 指定的一批Key。
* @return Object[oValue]
*/
public Object[] getMultiArray(String[] sKeys) throws ServiceException
{
return memCachedClient.getMultiArray(sKeys);
}
/**
* 根据指定一批Key批量获取缓存内容。
*
* @param sKeys 指定的一批Key。
* @return MapsKey, oValue
*/
public MapString, Object getMulti(String[] sKeys) throws ServiceException
{
return memCachedClient.getMulti(sKeys);
}
public static void main(String[] args)
{
MemCached memCached= MemCached.getInstance();
memCached.add("hello", 234);
System.out.print("get value : " + memCached.get("hello"));
}
}
那么我们就可以通过简单的像main方法中操作的一样存入一个变量,然后再取出进行查看,我们可以看到先调用了add,然后再进行get,我们运行一次 后,234这个值已经被我们存入了memcached的缓存中的了,我们将main方法中红色的那一行注释掉后,我们再运行还是可以看到get到的 value也是234,即缓存中我们已经存在了数据了。
对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为 memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须实现该接口,否则会报错的。
Entity
/**
* 获取当前实体的缓存Id
*
* @return
*/
public String getCacheId()
{
return getCacheId(this.getClass(), sBreedId);
}
get
public Breed getBreedById(String sBreedId) throws ServiceException
{
Breed breed = (Breed)memCachedService.get(getCacheId(Breed.class, sBreedId));
if(breed == null)
{
breed = service.get("breed.getBreedById", sBreedId);
if(breed != null)
{
memCachedService.set(breed.getBreedId(), breed);
}
}
return breed;
}
save
memCachedService.set(spider.getCacheId(), breed);
update
memCachedService.replace(spider.getCacheId(), breed);
remove
memCachedService.delete(getCacheId(Spider.class, IbreedId));
或
memCachedService.delete(breed.getCacheId());
listAll
public List listAll() throws ServiceException
{
List breeds = new ArrayList ();
List breedIds = (List)memCachedService.get(getKeyByMap("Breed", null));
if(ObjectUtils.isEmpty(breedIds))
{
breeds = service.list("breed.getAllBreed", null);
if (!ObjectUtils.isEmpty(breeds))
{
breedIds = new ArrayList();
for (Breed breed : breeds)
{
breedIds.add(breed.getBreedId());
}
memCachedService.set(getKeyByMap("Breed", null), breedIds);
}
}
else
{
for (String sBreedId : breedIds)
{
Breed breed = getBreedById(sBreedId);
if (breed != null)
{
breeds.add(breed);
}
}
}
return breeds;
}
【memcached缓存服务】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: