使用poco再次封装redis
为方便程序对redis操作,我对poco的redis进行了再次封装,主要是针对自己应用需要的部分。
开发工具:netbean
系统环境:centos7
poco版本: poco-1.9.0-all
其实只用了redis中的list
头文件:
#include <Poco/Redis/Exception.h>
#include <Poco/Redis/Client.h>
#include <Poco/Redis/Command.h>
#include <Poco/Redis/Array.h>
#include <iostream>
#include <list>
using std::string;
using std::wstring;
using namespace std;
using Poco::Redis::Client;
using Poco::Redis::Command;
using Poco::Redis::RedisException;
using Poco::Redis::BulkString;
using Poco::Redis::Array;
class PocoRedis {
public:
PocoRedis();
PocoRedis(string host,int port);
PocoRedis(const PocoRedis& orig);
bool connect();
bool set(string key,string val);
string get(string key);
//列表操作
int llen(string key);
//移出并获取列表的第一个元素
string lpop(string key);
//将一个或多个值插入到列表头部
bool lpush(string key, string value);
//获取列表指定范围内的元素
std::list<string> lrange(string key, int start,int end);
//通过索引获取列表中的元素
string lindex(string key, int index);
string rpop(string key);
bool rpush(string key, string value);
bool lset(string key,int index, string value);
virtual ~PocoRedis();
private:
Client* redis;
string _host;
int _port;
bool _isConnected;
};
cpp文件
#include <valarray>
#include <list>
#include "PocoRedis.h"
PocoRedis::PocoRedis() {
this->_host = "127.0.0.1";
this->_port = 6379;
}
PocoRedis::PocoRedis(string host,int port){
this->_host = host;
this->_port = port;
}
bool PocoRedis::connect(){
this->redis = new Client;
try
{
this->redis->connect(_host,_port);
this->_isConnected = true;
std::cout << "connect to [" << _host << ':' << _port << ']' << "success. " << std::endl;
return true;
}
catch (Poco::Exception& e)
{
std::cout << "Couldn't connect to [" << _host << ':' << _port << ']' << e.message() << ". " << std::endl;
this->_isConnected = false;
return false;
}
}
bool PocoRedis::set(string key, string val){
Command setCommand = Command::set(key, val);
try
{
std::string result = this->redis->execute<std::string>(setCommand);
return (result.compare("OK") == 0);
}
catch (Poco::Exception& e)
{
return false;
}
}
string PocoRedis::get(string key){
Command getCommand = Command::get(key);
try
{
BulkString result = this->redis->execute<BulkString>(getCommand);
return result.value();
}
catch (RedisException& e)
{
return "";
}
}
bool PocoRedis::lpush(string key, string val){
Command lpush = Command::lpush(key, val);
try
{
Poco::Int64 result = this->redis->execute<Poco::Int64>(lpush);
return (result > 1);
}
catch (Poco::Exception& e)
{
return false;
}
}
int PocoRedis::llen(string key){
Command llen = Command::llen("mylist");
try
{
Poco::Int64 n = this->redis->execute<Poco::Int64>(llen);
return n;
}
catch (Poco::Exception& e)
{
return 0;
}
}
string PocoRedis::lindex(string key, int index){
Command lindex = Command::lindex(key, index);
try
{
BulkString result = this->redis->execute<BulkString>(lindex);
return result.value();
}
catch (Poco::Exception& e)
{
return 0;
}
}
std::list<string> PocoRedis::lrange(string key, int start, int end){
Command lrange = Command::lrange(key,start,end);
std::list<string> res;
try
{
Array result = this->redis->execute<Array>(lrange);
for(int i=0;i<result.size();i++){
res.push_back(result.get<BulkString>(i).value());
}
return res;
}
catch (Poco::Exception& e)
{
return res;
}
}
string PocoRedis::lpop(string key){
Command lpop = Command::lpop(key);
try
{
BulkString result = this->redis->execute<BulkString>(lpop);
return result.value();
}
catch (RedisException& e)
{
return "";
}
}
string PocoRedis::rpop(string key){
Command lpop = Command::rpop(key);
try
{
BulkString result = this->redis->execute<BulkString>(lpop);
return result.value();
}
catch (RedisException& e)
{
return "";
}
}
bool PocoRedis::rpush(string key, string val){
Command lpush = Command::rpush(key, val);
try
{
Poco::Int64 result = this->redis->execute<Poco::Int64>(lpush);
return (result > 1);
}
catch (Poco::Exception& e)
{
return false;
}
}
bool PocoRedis::lset(string key,int index, string val){
Command lset = Command::lset(key,index, val);
try
{
std::string result = this->redis->execute<std::string>(lset);
return (result.compare("Hello") == 0);
}
catch (Poco::Exception& e)
{
return false;
}
}
PocoRedis::PocoRedis(const PocoRedis& orig) {
}
PocoRedis::~PocoRedis() {
if(this->redis!=NULL){
delete this->redis;
}
}
调用:
int main_redis2(int argc,char * argv[]){
PocoRedis pr("127.0.0.1",6379);
bool connect = pr.connect();
pr.set("age","40");
pr.lpush("language","jp");
pr.lpush("language","en");
std::list<string> rss = pr.lrange("language",0,2);
std::list<string>::iterator si;
for (si = rss.begin(); si != rss.end(); ++si)
cout << *si << endl;
return 0;
}
使用poco再次封装redis的更多相关文章
- openresty开发系列27--openresty中封装redis操作
openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...
- JS弹出框插件zDialog再次封装
zDialog插件网址:http://www.jq22.com/jquery-info2426 再次封装zDialog的代码: (function ($) { $.extend({ iDialog: ...
- easyui的window插件再次封装
easyui的window插件再次封装 说明:该插件弹出的弹出框在最顶层的页面中,而不是在当前页面所在的iframe中,它的可拖动范围是整个浏览器窗口:所以不能用JS的parent对象获取弹出它的父页 ...
- ajax的再次封装!(改进版) —— new与不 new 有啥区别?
生命不息重构不止! 上一篇写了一下我对ajax的再次封装的方法,收到了很多有价值的回复,比如有童鞋建议用$.extend,一开始还以为要做成插件呢,后来才知道,原来这个东东还可以实现合并.省着自己再去 ...
- ajax的再次封装!
js的动态加载.缓存.更新以及复用 系列有点卡文,放心会继续的.先来点更基础的,为js的加载做点铺垫. jQuery的ajax本来就很方便了,为啥还要在进一步的封装呢?这个首先要看项目的具体需求了,如 ...
- javascript笔记——jqGrid再次封装
xingrunzhao js插件再次封装 demo 'use strict'; /** * commerce grid框架 * 依赖jqgrid */ (function ($_self, jQuer ...
- 封装redis
封装redis import redis # r = redis.Redis() class MyRedis(): def __init__(self,ip,password,port=6379,db ...
- Java代码封装redis工具类
maven依赖关系: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&l ...
- 简单封装Redis做缓存
基于Redis封装一个简单的Python缓存模块 0. Docker Redis安装 参考: Get Docker CE for CentOS Docker 安装 Redis 安装Docker时错误s ...
随机推荐
- iOS之NSArray类簇简介-(copy、mutableCopy导致程序crash)
1.前言 开发时常常用数组对数据进行处理,对NSMutableArray进行操作时经常导致程序崩溃,特研究一下NSArray的类簇!涉及__NSPlaceholderArray.__NSArray0. ...
- Java lambda尝鲜
最近Java 11都出来了,java 8 的很多新特性还没用过,比如接口可以有方法体啦,default默认方法. 当然最大的特性就是支持函数式编程了.Java 8 提供了lambda表达式和方法引用来 ...
- day4:Python列表(list)元组( tuple)字典(dict)
列表----list 列表:中括号,每个元素用‘,’分割,列表里面也可以嵌套列表,列表里面可以包含数字,字符串,布尔值等,也就是元素的集合 例:test = [2,4,'sun','yao'] #索引 ...
- Git初次使用,记录自己看
Git官网下载:https://git-scm.com/downloads 官网如果太慢,可以去这下载:http://www.wmzhe.com/soft-38801.html,注意选择如下图地址下载 ...
- 面试系列17 redis cluster
1.redis cluster介绍 redis cluster (1)自动将数据进行分片,每个master上放一部分数据(2)提供内置的高可用支持,部分master不可用时,还是可以继续工作的 在re ...
- CSDN的验证码,为什么要这样呢
总是有连着的部分
- 内核下枚举进程 (二)ZwQuerySystemInformation
说明: SYSTEM_INFORMATION_CLASS 的5号功能枚举进程信息.其是这个函数对应着ring3下的 NtQuerySystemInformation,但msdn上说win8以后ZwQu ...
- Ubuntu vi命令
最近在使用ubuntu,在linux下,要编辑文件或者其他的文本文件,哪那么一个ubuntu linux下的强大的文本编辑工具就不得不提了,那就是VI编辑器.下面把VI常用到的命令行贴出来. :w ...
- 廖雪峰Java15JDBC编程-3JDBC接口-3JDBC更新
使用update语句的时候,需要通过JDBC实现update语句的执行,这个时候仍然通过PreparedStatement对象来使用,直接传入update语句,然后通过setObject传入占位符的值 ...
- pandas的使用方法
一.基本使用方法 # pandas引入约定 import pandas as pd from pandas import Series,DataFrame import numpy as np imp ...