Redis——redispluspls库list及set类型相关接口使用

文章目录

    • list 类型相关接口
      • lpush和lrange
      • rpush
      • lpop和rpop
      • blpop和brpop
      • llen
    • set 类型相关接口
      • sadd和smembers
      • sismember
      • scard
      • spop
      • sinster
      • sinterstore

Redis——redispluspls库list及set类型相关接口使用

list 类型相关接口

lpush和lrange

void lrange_lpush(sw::redis::Redis& redis){
    std::cout<<"lpush 和 lrange"< values = {"555","666","777"};
    redis.lpush("key",values.begin(),values.end());

    //lrange获取列表中元素
    vector result;
    auto it  = std::back_inserter(result);
    redis.lrange("key",0,-1,it);

    for(const auto& elem:result){
        std::cout<

由于lpush是头插,所以后来的元素在前面

rpush

 std::cout<<"lpush 和 lrange"< values = {"555","666","777"};
    redis.lpush("key",values.begin(),values.end());

    //lrange获取列表中元素
    vector result;
    auto it  = std::back_inserter(result);
    redis.lrange("key",0,-1,it);

    for(const auto& elem:result){
        std::cout<

lpop和rpop

void lpop_rpop(sw::redis::Redis& redis){
    std::cout<<"rpush 和 lrange"<

blpop和brpop

这里先了解一下blpop的返回值

什么是 OptionalStringPair, optional里面包裹了一个pair,pair里面是string

blpop要返回的内容是两个部分

  1. 这个元素属于哪个list(blpop可以同时监听多个list)
  2. 当前被删除的元素

blpop还可以设置超时时间,如果在指定时间内,还没有其他客户端往指定的list中插入元素,此时blpop就直接返回了,此时返回的就是一个无效值了

std::cout<<"blpop"<first
        std::cout<<"elem:"<second
    }else{
        std::cout<<"result 无效"<

这里由于没有元素在里面,blpop就被阻塞到这里了,另外开一个中端在redis-cli中插入key,就没有阻塞了

auto result = redis.blpop({"key","key2","key3"});当然也可以一次监听多个key,只要其中有一个key有元素插入,就会停止阻塞

设置超时时间

  using namespace std::chrono_literals;
    std::cout<<"blpop"<

llen

void llen(sw::redis::Redis& redis){
    std::cout<<"llen"<

看到这里不难发现,redis-plus-plus这个库,接口设计的风格,是非常统一的

当一个函数,参数需要传递多个参数的时候,往往都是支持 初始化列表 或者是一对迭代器的方式来实现的

当一个函数 返回值需要多个数据的时候,也往往会借助插入迭代器,来实现往一个容器中添加元素的效果

当某些场景涉及到无效值的时候,往往会搭配 std::optional来进行使用

很多C++的代码,都是按照上方式来设计的

set 类型相关接口

sadd和smembers

 std::cout<<"sadd 和 smemers"< elems = {"555","666","777"};
    redis.sadd("key",elems.begin(),elems.end());

    //获取上述元素
    //vector result;
    //auto it  = std::back_inserter(result);
     std::set result;
    //由于set的元素的顺序是固定的,插入的位置无所谓,最终都是有序的,但是这里必须要 传入一个插入的位置
    auto it  = std::inserter(result,result.end());//begin,end,或者其他位置都可以
    redis.smembers("key",it);
    for(const auto&x:result){
        std::cout<

sismember

std::cout<<"sismember "<

scard

  std::cout<<"scard "<

spop

 std::cout<<"spop "<

sinster

 std::cout<<"sinter "< result;
    auto it = std::inserter(result,result.end()); 
    redis.sinter({"key1","key2"},it);
    for(const auto&elem:result){
        std::cout<

sinterstore

 std::cout<<"sinterstore "< result;
    auto it  = std::inserter(result,result.end());
    redis.smembers("key3",it);

    for(const auto&x:result){
        std::cout<

版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/74887.html