您的位置:首页 > 数据库 > Memcache

Memcached的简单使用

2017-01-08 14:01 274 查看
Memcached的使用

启动和关闭memcached

/usr/local/memcached/bin/memcached -d -m 1024 -u root -p 11211 -c 128 -P /tmp/memcached.pid


关闭Memcached

kill -9 `cat /tmp/memcached.pid`


telnet Memcached

(1)开放11211端口

sudo vi /etc/sysconfig/iptables
 然后添加下面一行,yy复制一行,p粘贴

-A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT


重启

service iptables restart
iptables -L


1. telnet 127.0.0.1 11211
2. stats
3. quit
那么你可以在1之后进行数据的操作,3.quit是退出



 

C++中想要调用memcached库

这是生成memcached的库,其中这里面封装了memcached的接口,我们只需要调用就行了

在memcached文件夹中

BUILD文件:
cc_library(
name =  'memcachedMgr',
srcs = [
'MemcachedFactory.cpp',
'MemcachedDriver.cpp',
],
optimize = [
'O0',
],
incs = [
'.',
'..',
],
extra_cppflags = [
'-g',
'-fPIC',
'-std=gnu++11',
],
deps = [
'//src/util:util',
'//src/comm:comm',
'//thirdparty/boost:boost_thread',
'//thirdparty/boost:boost_system',
'//thirdparty/libmemcached-1.0.18:memcached',
],
extra_linkflags = ['-L/usr/lib64/', ],
export_incs = ['.','..', ],
link_all_symbols=False,
)


所以你需要把自己的服务的BUIlD文件中的二进制文件导入这个库

 

这样你可以使用库里面的函数了,记得包含相关的头文件

 

读取配置文件

你可以将里面的内容添加到你定义的服务的配置文件中,其实就是你读取连接信息(这里需要注意服务端的配置文件要放在服务端运行的目录中)

[MemcachedGeneral]

MemcachedCount=1

[Memcached1]

MemcachedName=test

Host=127.0.0.1

Port=11211//主要端口是你开放的端口

Block=0

 

读取是在verifycodemain.cpp中实现的,你要添加一下语句加载

// 连接管理

server::mc::MEMCACHED_FACTORY::instance().loadConfig(sConfFile);

之后我们看看数据的读写
int VerifyCodeServiceImpl_PB :: AddVerifyCode( const unsigned int  uid ,const verifycode::VerifyC
4000
odeReq &  objReq ,verifycode::VerifyCodeResp & objResp  )
{
objResp.set_uid(uid);
stringstream stream;//将int转为string
stream << objReq.uid();
string strKey = stream.str();
string strSetValue = objReq.code();
printf("the key is %s,the value is %s\n", strKey.c_str(),strSetValue.c_str());

static string memName = "test";
// 配置文件中的memcache实例对应的名字一致
// 获取mc 操作接口
server::mc::Memcached* pMem = server::mc::MEMCACHED_FACTORY::instance().getMemcached(memName);
if (pMem == NULL)
{
logErr("get mc wrong");
}
bool bOk = pMem->mcSet(strKey, strSetValue,60);//设置数据
if (!bOk)
{
objResp.set_result(false);
printf("Set:%s Value:%s fail\n", strKey.c_str(), strSetValue.c_str());
}
else
{
objResp.set_result(true);
printf("Set:%s Value:%s success\n", strKey.c_str(), strSetValue.c_str());
}
return 0;
}

int VerifyCodeServiceImpl_PB::CheckVerifyCode(const unsigned int  uid,const verifycode::InputCode &  objReq,verifycode::InputCheck &  objResp)
{
objResp.set_uid(uid);

static string memName = "test";
// 获取mc 操作接口
server::mc::Memcached* pMem = server::mc::MEMCACHED_FACTORY::instance().getMemcached(memName);
if (pMem == NULL)
{
logErr("get mc wrong");
}
stringstream stream;
stream << objReq.uid();
std::string strKey = stream.str();

std::string strGetValue;
bool bOk = pMem->mcGet(strKey, strGetValue);//获取数据
if (bOk)
{
printf(" Get:%s Value:%s success\n", strKey.c_str(), strGetValue.c_str());
}
else
{
printf("Get:%s fail \n", strKey.c_str());
objResp.set_ischeck(false);
return -1;
}
if (!strcasecmp(objReq.incode().c_str(), strGetValue.c_str()))
{
objResp.set_ischeck(true);
return 0;
}
else
objResp.set_ischeck(false);
objResp.set_uid(uid);
return 0;
}

使用序列化和反序列化

verifycode::AddVerifyCode addcode;
int tNow = time(NULL);
addcode.set_code(strSetValue);
addcode.set_ts(tNow);
std::string codewithtime;
addcode.SerializeToString(&codewithtime);

std::string strGetValue;
bool bOk = pMem->mcGet(strKey,strGetValue);
verifycode::AddVerifyCode getcode;
getcode.ParseFromString(strGetValue);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: