Memcached的简单使用

来源:互联网 发布:宁波最新房价走势知乎 编辑:程序博客网 时间:2024/05/22 13:39

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::VerifyCodeReq &  objReq ,verifycode::VerifyCodeResp & objResp  ){objResp.set_uid(uid); stringstream stream;//将int转为stringstream << 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);


0 0
原创粉丝点击