欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Redis——redispluspls库通用命令以及String类型相关接口使用

Redis——redispluspls库通用命令以及String类型相关接口使用

2024/10/25 22:26:39 来源:https://blog.csdn.net/m0_70289867/article/details/142414546  浏览:    关键词:Redis——redispluspls库通用命令以及String类型相关接口使用

文章目录

    • 通用命令
      • get,set
      • keys
        • 插入迭代器
      • expire和ttl
      • type
    • string 类型接口
      • set和get
      • set NX和XX
      • mset 和 mget
      • getrange 和 setrange
      • incr 和 decr

通用命令

get,set

void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringView &key,   这里的StringView类型是只读版本的字符串//const sw::redis::StringView &val, //bool keepttl, //sw::redis::UpdateType type = sw::redis::UpdateType::ALWAYSredis.flushall();redis.set("k1","111");redis.set("k2","222");redis.set("k3","333");//返回值是optional类型auto value1 = redis.get("k1");std::cout<<"value="<<value1.value()<<std::endl;auto value2 = redis.get("k2");std::cout<<"value="<<value2.value()<<std::endl;auto value3 = redis.get("k3");std::cout<<"value="<<value3.value()<<std::endl;auto value4 = redis.get("k4");std::cout<<"value="<<value4.value()<<std::endl;//对于非法状态的optional的非法状态,进行取值操作,就会抛出异常//对于这个返回值可以做出判定(会隐式转换为布尔类型)//if(value) std::cout<<"value="<<value4.value()<<std::endl;
}

进行单元测试的时候,清除数据是放到开始,还是结束呢?答案是放在开始更好点

如果放在结束,一旦执行的程序中间出现了异常,就可能导致 清理代码 没有执行到

如果代码中间的位置出现了抛异常,那么末尾的flashall就不会被执行,jj这和释放指针一个道理,

在这种场景下就会造成指针未释放而造成的内存泄漏

keys

    redis.flushall();redis.set("k1","111");redis.set("k2","222");redis.set("k3","333");redis.set("k4","444");redis.set("k5","555");redis.set("k6","666");//key的第二个参数是一个“插入迭代器”,咱们需要先准备好一个保存结果的容器//接下来再创建一个插入迭代器指向容器的位置,就可以把keys获取到的结果依次通过刚才的插入迭代器插入到容器的指定位置中//void keys<Output>(const sw::redis::StringView &pattern, Output output)vector<string> result;auto it = std::back_inserter(result);redis.keys("*",it);//printContainer(result);for(const auto& elem:result{std::cout<<elem<<std::endl;}

在这里插入图片描述

插入迭代器

在STL中有五种迭代器类型

  1. 输入迭代器
  2. 输出迭代器
  3. 前向迭代器
  4. 双向迭代器
  5. 随机访问迭代器

例如在写算法题的时候经常会用到的sort,这里面传参的迭代器 就是随机访问迭代器

插入迭代器,本质上是一种输出迭代器,通常,一个迭代器主要表示的是一个“位置”,插入迭代器则是,“位置”+“动作”

  • front_insert_iterator 区间的开头,往前面插入
  • back_insert_iterator 区间的末尾,往后面插入
  • insert_iterator 区间的任意位置,往该位置之前插入

expire和ttl

void expire_test(sw::redis::Redis& redis){using namespace std::chrono_literals;//使用字面值常量 3sstd::cout<<"expire and ttl"<<std::endl;redis.flushall();redis.set("key","111");//bool expire(const sw::redis::StringView &key, const std::chrono::seconds &timeout)redis.expire("key",std::chrono::seconds(10));//设置过期时间//long long ttl(const sw::redis::StringView &key)std::this_thread::sleep_for(3s);auto time =  redis.ttl("key");std::cout<<time<<std::endl;
}

在这里插入图片描述

type

void type_test(sw::redis::Redis& redis){std::cout<<"type"<<std::endl;redis.flushall();redis.set("key1","111");auto type1 =  redis.type("key");std::cout<<type1<<std::endl;redis.lpush("key2","1,2,3,4");auto type2 =  redis.type("key2");std::cout<<type2<<std::endl;redis.hset("key3","aaa","111");auto type3 =  redis.type("key3");std::cout<<type3<<std::endl;redis.sadd("key4","aaa");auto type4 =  redis.type("key4");std::cout<<type4<<std::endl;redis.zadd("key5","吕布",99);auto type5 =  redis.type("key5");std::cout<<type5<<std::endl;}

在这里插入图片描述

string 类型接口

set和get

set带有超时时间

  redis.flushall();std::cout<<"set 带有超时时间"<<std::endl;// using namespace std::chrono_literals;redis.set("key1","111",std::chrono::seconds(10));std::this_thread::sleep_for(std::chrono::seconds(3));std::cout<<redis.ttl("key1")<<std::endl;

在这里插入图片描述

set NX和XX

 using namespace std::chrono_literals;redis.flushall();std::cout<<"set NX 和 XX"<<std::endl;//set的重载版本中,没有单独提供NX和XX的版本,必须搭配过期时间的版本使用redis.set("key","111",0s,sw::redis::UpdateType::NOT_EXIST);//NXauto value = redis.get("key");std::cout<<"NX 不存在则设置——value:"<<value.value()<<std::endl;redis.set("key","222",0s,sw::redis::UpdateType::EXIST);//XXvalue = redis.get("key");std::cout<<"XX 存在则设置——value:"<<value.value()<<std::endl;

在这里插入图片描述

mset 和 mget

 using namespace std::chrono_literals;redis.flushall();std::cout<<"mset 和 mget"<<std::endl;//第一种写法,使用初始化列表描述多个键值对// redis.mset({std::make_pair("key1","111"),std::make_pair("key2","222"),std::make_pair("key3","333")});//第二种写法,可以吧多个键值对提前组织到容器中,以迭代器的形式告诉msetvector<std::pair<string,string>> keys = {{"key1","111"},{"key2","222"},{"key3","333"}};redis.mset(keys.begin(),keys.end());vector<sw::redis::OptionalString> result;auto it  = std::back_inserter(result);redis.mget({"key1","key2","key3"},it);for(const auto& elem:result){if(elem) std::cout<<elem.value()<<std::endl;else std::cout<<"元素无效"<<std::endl;}

在这里插入图片描述

getrange 和 setrange

 std::cout<<"getrange 和 setrange"<<std::endl;redis.flushall();redis.set("key","abcdefghijk");string result = redis.getrange("key",2,5);std::cout<<"result:"<<result<<std::endl;redis.setrange("key",2,"xyz");auto value = redis.get("key");std::cout<<"value:"<<value.value()<<std::endl;

在这里插入图片描述

incr 和 decr

 std::cout<<"incr 和 decr"<<std::endl;redis.flushall();redis.set("key","100");//incr和decr得到的是long long 类型[使用这个更多一些]long long result = redis.incr("key");std::cout<<"result:"<<result<<std::endl;auto value = redis.get("key");std::cout<<"value:"<<value.value()<<std::endl;result = redis.decr("key");std::cout<<"result:"<<result<<std::endl;value = redis.get("key");std::cout<<"value:"<<value.value()<<std::endl;

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com