网站开发主要内容,重庆网站seo昔年优化,十大房产中介软件,crm管理系统都有哪些Redis对象
Redis客户端的所有操作都是基于Redis对象来操作的。下面通过一段代码来看看使用Redis客户端时需要哪些准备工作。通过这段代码可以知道客户端是否连接成功。
#includeiostream
#includestring
#include sw/redis/redis.husing namespace s…Redis对象
Redis客户端的所有操作都是基于Redis对象来操作的。下面通过一段代码来看看使用Redis客户端时需要哪些准备工作。通过这段代码可以知道客户端是否连接成功。
#includeiostream
#includestring
#include sw/redis/redis.husing namespace std;int main()
{// 创建Redis对象的时候需要在构造函数中指定redis服务器端地址和端口sw::redis::Redis redis(tcp://127.0.0.1:6379);// 调用ping方法让客户端给服务器发了一个ping然后服务器就会返回一个pong。string result redis.ping();std::cout result endl;return 0;
}需要使用Redis客户端时需要包含相应的头文件sw/redis/redis.h其中sw是作者的名称缩写。 在main函数当中需要先创建一个Redis对象它是在命名空间sw::redis::里面接着需要指定IP地址和端口号。其中6379是redis服务器的默认端口由于我的redis客户端和服务端是在同一台主机上所以指定的是127.0.0.1如果是不同主机则需要写对应主机的IP。 最后通过ping操作来检测连通性如果连通成功则会返回一个字符串PONG。运行这段代码时还需要3个库文件hiredis、redis、pthread。
g -o $ $^ -stdc17 /usr/local/lib/libredis.a /usr/lib/x86_64-linux-gnu/libhiredis.a -l pthread通用命令
重点讲解每个命令的用法和参数具体用法可以学习这篇文章Redis命令使用。所有的接口可以看redis-plus-plus的源码redis源码
get和set
set函数原型如下
bool set(const sw::redis::StringView key, const sw::redis::StringView val, const std::chrono::milliseconds ttl std::chrono::milliseconds(0), sw::redis::UpdateType type sw::redis::UpdateType::ALWAYS)这里的参数和之前set命令的选项有很大的关联关系。key的类型是StringView表明这是只读 的不能修改。而对于std::string类型是可修改的既能写也能读。StringView的效率比string的效率高。除了key和value其余参数都是缺省值可以不填。 get函数原型如下OptionalString get(const StringView key);
返回值是Optional可以表示“非法值/无效值”如果查询到redis中为空则会返回nil但是如果使用std::string来表示不方便表现这个空值如果使用std::string*来表示是可以用nullptr表示无效但是返回指针又设计到内存归谁管。 还有Optional不支持运算符的重载需要通过.value()函数来获取string。 代码示例
void test1(sw::redis::Redis redis)
{cout get和set的使用 endl;redis.flushall(); // 清空数据库避免残留的数据干扰结果// 使用set设置key-valueredis.set(key1, 111);redis.set(key2, 222);redis.set(key3, 333);redis.set(key4, 444);auto value1 redis.get(key1);if (value1)cout key1: value1.value() endl;auto value2 redis.get(key2);if (value2)cout key2: value2.value() endl;auto value3 redis.get(key1);if (value3)cout key3: value3.value() endl;auto value4 redis.get(key1);if (value4)cout key4: value4.value() endl;
}exists
判断key是否存在。 函数原型
// 版本1
long long exists(const StringView key);// 版本2
template typename Tlong long exists(std::initializer_listT il) {return exists(il.begin(), il.end());}exists有两个版本都是以long long作为返回值的这是因为第二个版本可以接受一个初始化列表可以接收多个key有多少个key就返回多少。 返回值key 存在的个数。 代码示例
void test2(sw::redis::Redis redis)
{cout existes的使用 endl;redis.flushall();redis.set(key1, 111);redis.set(key2, 222);redis.set(key3, 333);auto result1 redis.exists(key1);cout result1: result1 endl;auto result2 redis.exists(key2);cout result2: result1 endl;auto result3 redis.exists({key1, key2, key3, key4});std::cout result3: result3 std::endl;
}del
用户删除key函数原型如下
// 版本1
long long del(const StringView key);// 版本2
template typename Tlong long del(std::initializer_listT il) {return del(il.begin(), il.end());}代码示例
void test3(sw::redis::Redis redis)
{cout del的使用 endl;redis.flushall();redis.set(key1, 111);redis.set(key2, 222);redis.set(key3, 333);auto ret1 redis.del(key1);cout ret1 endl;auto ret2 redis.del({key1, key2, key3});cout ret2 endl;
}flushall
清空整个redis。 函数原型void flushall(bool async false); 直接用默认的false即可。
keys
用于搜索符合条件的key。 函数原型
template typename Output
void keys(const StringView pattern, Output output);第一个参数pattern是匹配参数也就是根据某个“特征”寻找匹配的key第二个参数output是一个插入迭代器用于获取符合条件的key。 插入迭代器主要有三种
font_insert_iterator用于区间的开头往前面插入。back_insert_iterator区间的末尾往后面插入。insert_inerator区间的任意位置往该位置之前插入。
对于插入迭代器来说*、、--是啥都不干主要的核心操作就是就是把另一个迭代器赋值给这个插入迭代器。例如it是插入迭代器it2是普通的迭代器当itit2相当于是获取到it2指向的元素然后把元素按照it当前插入迭代器的位置和动作来进行执行插入操作。比如it是一个back_insert_inerator就是把it2指向的元素插入到it指向的容器末尾相当于调用一次push_back 在operator内部调用vector.insert()接口就能完成插入容器的操作此时pos也会自动指向新的位置。 代码示例
void test4(sw::redis::Redis redis)
{cout keys的使用 endl;redis.flushall();redis.set(key1, 111);redis.set(key2, 222);redis.set(key3, 333);redis.set(key4, 444);vectorstring ret;auto it std::back_inserter(ret);redis.keys(*, it);for (auto r : ret)std::cout r std::endl;
}expire
用于设置超时时间。 函数原型
bool expire(const StringView key, long long timeout);
bool expire(const StringView key, const std::chrono::seconds timeout);第一个版本的是long long类型以秒为单位但也可以使用std::chrono::seconds来控制时间单位。 如果key不存在返回-2如果key存在但是没有超时时间返回-1。
ttl
获取key剩下的超时时间。 函数原型long long ttl(const StringView key); 代码示例
void test5(sw::redis::Redis redis)
{cout expire和ttl的使用 endl;redis.flushall();redis.set(key1, 111);redis.set(key2, 222);redis.set(key3, 333);redis.set(key4, 444);redis.expire(key1, 10);redis.expire(key2, std::chrono::seconds(5)); // 设置5秒后过期std::this_thread::sleep_for(5s);cout redis.ttl(key1) endl;cout redis.ttl(key2) endl;cout redis.ttl(key3) endl;cout redis.ttl(key4) endl;
}type
获取key所对应value的数据类型。 函数原型std::string type(const StringView key); 代码示例
void test6(sw::redis::Redis redis)
{cout type的使用 endl;redis.flushall();redis.set(key1, 111);string ret redis.type(key1);cout key1: ret endl;redis.lpush(key2, 222);ret redis.type(key2);cout key2: ret endl;redis.hset(key3, aaa, 333);ret redis.type(key3);cout key3: ret endl;redis.sadd(key4, aaa);ret redis.type(key4);cout key4: ret endl;redis.zadd(key5, 张三, 19);ret redis.type(key5);cout key5: ret endl;
}