当前位置: 首页 > news >正文

Redis 客户端接口介绍

一、使用环境

Redis 有自己的应用层协议,用于实现客户端开发

这里用的是第三方库 redis-plus-plus:https://github.com/sewenew/redis-plus-plus

二、通用命令介绍

1、get set

void test1(Redis& redis)
{cout << "get和set的使用:" << endl;// 清空数据库redis.flushall();redis.set("k1", "111");redis.set("k2", "222");redis.set("k3", "333");auto val1 = redis.get("k1");auto val2 = redis.get("k2");auto val3 = redis.get("k3");auto val4 = redis.get("k4");// 返回值是optional_string,要拿到string类型使用函数value()cout << val1.value() << endl;cout << val2.value() << endl;cout << val3.value() << endl;if(val4)// 没有k4抛异常cout << val4.value() << endl;
}

2、exists 

void test2(Redis& redis)
{cout << "exists的使用:" << endl;redis.flushall();redis.set("key", "111");auto ret = redis.exists("key");cout << ret << endl;ret = redis.exists("key2");cout << ret << endl;// 通过初始化列表添加多个keyret = redis.exists({"key", "key1", "key2"});cout << ret << endl;
}

3、del

void test3(Redis& redis)
{cout << "del的使用:" << endl;redis.flushall();redis.set("k1", "111");redis.set("k2", "222");redis.set("k3", "333");redis.del("k1");auto ret = redis.exists("k1");cout << "k1: " << ret << endl;ret = redis.exists("k2");cout << "k2: " << ret << endl;ret = redis.exists("k3");cout << "k3: " << ret << endl;
}

4、keys

void test4(Redis& redis)
{cout << "keys的使用:" << endl;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");// 第一个参数是pattern// 第二个参数是插入迭代器,用于存储keys的获取结果vector<string> ret;auto it = back_inserter(ret); // 构造std插入迭代器,向容器末尾插入redis.keys("*", it);Print(ret);
}

5、expire ttl

void test5(Redis& redis)
{using namespace std::chrono_literals;cout << "expire和ttl的使用:" << endl;redis.flushall();redis.set("key", "111");redis.expire("key", chrono::seconds(10));// 字面值常量this_thread::sleep_for(3s);auto time = redis.ttl("key");cout << time << endl;
}

6、type

void test6(Redis& redis)
{cout << "type的使用:" << endl;redis.flushall();redis.set("key1", "111");string ret = redis.type("key1");cout << ret << endl; redis.lpush("key2", "222");ret = redis.type("key2");cout << ret << endl; redis.hset("key3", "333", "aaa");ret = redis.type("key3");cout << ret << endl; redis.sadd("key4", "aaa");ret = redis.type("key4");cout << ret << endl; redis.zadd("key5", "aaa", 100);ret = redis.type("key5");cout << ret << endl; 
}

三、string 命令介绍

1、get set

void test1(Redis& redis)
{cout << "get和set使用:" << endl;redis.flushall();redis.set("key1", "111");auto val = redis.get("key1");cout << val.value() << endl;redis.set("key2", "222");val = redis.get("key2");cout << val.value() << endl;
}

2、set 设置过期时间

void test2(Redis& redis)
{cout << "set过期时间使用:" << endl;redis.flushall();redis.set("key", "111", std::chrono::seconds(10));auto time = redis.ttl("key");cout << time << endl;
}

3、nx xx

void test3(Redis& redis)
{cout << "set的nx xx使用:" << endl;redis.flushall();// sw::redis::UpdateType里面有ALWAYS(总是设置和更新) EXIST(存在才更新xx) NOT_WXIST(不存在才设置nx) redis.set("k1", "111", 0s, sw::redis::UpdateType::NOT_EXIST);auto val1 = redis.get("k1");redis.set("k2", "222", 0s, sw::redis::UpdateType::EXIST);auto val2 = redis.get("k2");// 结果应该是k1存在,k2不存在if(val1)cout << "val1: " << val1.value() << endl;else cout << "k1不存在" << endl;if(val2)cout << "val2: " << val2.value() << endl;else cout << "k2不存在" << endl;
}

4、mget mset

void test4(Redis& redis)
{cout << "mget和mset使用:" << endl;redis.flushall();// 1.初始化列表设置多个key valueredis.mset({make_pair("k1", "111"), make_pair("k2", "222"), make_pair("k3", "333"), make_pair("k4", "444")});// 2.容器迭代器方式设置// vector<pair<string, string>> keys = {//     {"k1", "111"}, //     {"k2", "222"}, //     {"k3", "333"}, //     {"k4", "444"}// };// redis.mset(keys.begin(), keys.end());// 用容器存储mget的结果vector<sw::redis::OptionalString> ret;auto it = std::back_inserter(ret);// 初始化列表redis.mget({"k1", "k2", "k3", "k4", "k5"}, it);PrintOp(ret);
}

5、getrange setrange

void test5(Redis& redis)
{cout << "getrange setrange使用:" << endl;redis.flushall();redis.set("key", "fhasdjdgkndfg");string ret = redis.getrange("key", 2, 5);cout << ret << endl;redis.setrange("key", 2, "ghd");auto str = redis.get("key");cout << str.value() << endl;
}

6、incr decr

void test6(Redis& redis)
{cout << "incr decr使用:" << endl;redis.flushall();redis.set("key", "111");auto ret = redis.incr("key");cout << ret << endl;auto val = redis.get("key");cout << val.value() << endl;ret = redis.decr("key");cout << ret << endl;val = redis.get("key");cout << val.value() << endl;
}

四、list 命令介绍

1、lpush lrange

void test1(Redis& redis)
{cout << "lpush lrange使用:" << endl;redis.flushall();redis.lpush("key", "111");redis.lpush("key", {"222", "333", "444"});vector<string> vals = {"555", "666"};redis.lpush("key", vals.begin(), vals.end());vector<string> ret;auto it = std::back_inserter(ret);redis.lrange("key", 0, -1, it);Print(ret);
}

2、rpush

void test2(Redis& redis)
{cout << "rpush使用:" << endl;redis.flushall();redis.rpush("key", "111");redis.rpush("key", {"222", "333", "444"});vector<string> vals = {"555", "666"};redis.rpush("key", vals.begin(), vals.end());vector<string> ret;auto it = std::back_inserter(ret);redis.lrange("key", 0, -1, it);Print(ret);
}

3、lpop rpop

void test3(Redis& redis)
{cout << "lpop rpop使用:" << endl;redis.flushall();redis.rpush("key", {"111", "222", "333", "444"});auto ret = redis.lpop("key");if(ret)cout << "lpop: " << ret.value() << endl;ret = redis.rpop("key");if(ret)cout << "rpop: " << ret.value() << endl;
}

4、blpop brpop

void test4(Redis& redis)
{cout << "blpop使用:" << endl;redis.flushall();auto ret = redis.blpop("key");if(ret){cout << "key: " << ret.value().first << endl;cout << "elem: " << ret.value().second << endl;}else cout << "ret无效" << endl;}

没有数据阻塞中

5、llen

void test5(Redis& redis)
{cout << "llen使用:" << endl;redis.flushall();redis.rpush("key", {"111", "222", "333", "444"});auto len = redis.llen("key");cout << len << endl;
}

五、hash 命令介绍

1、hset hget

void test1(Redis& redis)
{cout << "hset hget使用:" << endl;redis.flushall();redis.hset("key", "f1", "111");redis.hset("key", make_pair("f2", "222"));redis.hset("key", {make_pair("f3", "333"),make_pair("f4", "444")});vector<pair<string, string>> vals = {make_pair("f5", "555"),make_pair("f6", "666")};redis.hset("key", vals.begin(), vals.end());auto ret = redis.hget("key", "f1");if(ret)cout << ret.value() << endl;else cout << "field无效" << endl;
}

2、hexists

void test2(Redis& redis)
{cout << "hexists使用:" << endl;redis.flushall();redis.hset("key", "f1", "111");redis.hset("key", "f2", "222");redis.hset("key", "f3", "333");bool ret1 = redis.hexists("key", "f1");bool ret4 = redis.hexists("key", "f4");cout << ret1 << endl << ret4 << endl;
}

3、hdel

void test3(Redis& redis)
{cout << "hdel使用:" << endl;redis.flushall();redis.hset("key", "f1", "111");redis.hset("key", "f2", "222");redis.hset("key", "f3", "333");auto ret = redis.hdel("key", "f1");cout << ret << endl;ret = redis.hdel("key", {"f2", "f3"});cout << ret << endl;auto len = redis.hlen("key");cout << len << endl;
}

4、hkeys hvals

void test4(Redis& redis)
{cout << "hkeys hvals使用:" << endl;redis.flushall();redis.hset("key", "f1", "111");redis.hset("key", "f2", "222");redis.hset("key", "f3", "333");vector<string> ret;auto it = back_inserter(ret);redis.hkeys("key", it);Print(ret);vector<string> ret2;auto it2 = back_inserter(ret2);redis.hvals("key", it2);Print(ret2);
}

5、hmget hmset

void test5(Redis& redis)
{cout << "hmget hmset使用:" << endl;redis.flushall();redis.hmset("key", {make_pair("f1", "111"),make_pair("f2", "222"),make_pair("f3", "333")});vector<std::pair<string, string>> pairs = {make_pair("f4", "444"),make_pair("f5", "555"),make_pair("f6", "666")};redis.hmset("key", pairs.begin(), pairs.end());vector<string> vals;auto it = std::back_inserter(vals);redis.hmget("key", {"f1", "f2", "f3"}, it);Print(vals);
}

六、set 命令介绍

1、sadd smembers

void test1(Redis& redis)
{cout << "sadd smembers使用:" << endl;redis.flushall();redis.sadd("key", "111");redis.sadd("key", {"222", "333", "444"});set<string> vals = {"555", "666"};redis.sadd("key", vals.begin(), vals.end());// vector<string> ret;// auto it = std::back_inserter(ret);// setset<string> ret;auto it = std::inserter(ret, ret.end());redis.smembers("key", it);Print(ret);
}

2、sismember

void test2(Redis& redis)
{cout << "sismember使用:" << endl;redis.flushall();redis.sadd("key", {"111", "222", "333"});bool ret1 = redis.sismember("key", "111");bool ret4 = redis.sismember("key", "444");cout << ret1 << endl << ret4 << endl;
}

3、scard

void test3(Redis& redis)
{cout << "scard使用:" << endl;redis.flushall();redis.sadd("key", {"111", "222", "333"});auto ret = redis.scard("key");cout << ret << endl;
}

4、spop

void test4(Redis& redis)
{cout << "spop使用:" << endl;redis.flushall();redis.sadd("key", {"111", "222", "333", "444"});auto ret = redis.spop("key");if(ret)cout << "spop: " << ret.value() << endl;else cout << "set空" << endl;
}

5、sinter

void test5(Redis& redis)
{cout << "sinter使用:" << endl;redis.flushall();redis.sadd("key1", {"111", "222", "444"});redis.sadd("key2", {"111", "333"});set<string> ret;auto it = std::inserter(ret, ret.end());redis.sinter({"key1", "key2"}, it);Print(ret);
}

6、sinterstore

void test6(Redis& redis)
{cout << "sinterstore使用:" << endl;redis.flushall();redis.sadd("key1", {"111", "222", "444"});redis.sadd("key2", {"111", "333"});auto len = redis.sinterstore("key3", {"key1", "key2"});cout << len << endl;set<string> ret;auto it = std::inserter(ret, ret.end());redis.smembers("key3", it);Print(ret);
}

七、zset 命令介绍

1、zadd zrange

void test1(Redis& redis)
{cout << "zadd zrange使用:" << endl;redis.flushall();redis.zadd("key", "吕布", 99.5);redis.zadd("key", {make_pair("关羽", 75),make_pair("张飞", 95)});vector<pair<string, double>> members = {make_pair("刘备", 68),make_pair("赵云", 74.8)};redis.zadd("key", members.begin(), members.end());// zrange 支持两种主要的风格:// 1. 只查询 member, 不带 score// 2. 查询 member 同时带 score// 关键就是看插入迭代器指向的容器的类型. // 指向的容器只是包含一个 string, 就是只查询 member// 指向的容器包含的是一个 pair, 里面有 string 和 double, 就是查询 member 同时带有 scorevector<string> mems;auto it1 = std::back_inserter(mems);redis.zrange("key", 0, -1, it1);Print(mems);vector<pair<string, double>> vals;auto it2 = std::back_inserter(vals);redis.zrange("key", 0, -1, it2);PrintPair(vals);
}

2、zcard

void test2(Redis& redis)
{cout << "zcard使用:" << endl;redis.flushall();redis.zadd("key", "zhangsan", 90);redis.zadd("key", "lisi", 91);redis.zadd("key", "wangwu", 92);redis.zadd("key", "zhaoliu", 93);long long result = redis.zcard("key");cout << "result: " << result << endl;
}

3、zrem

void test3(Redis& redis)
{cout << "zrem使用:" << endl;redis.flushall();redis.zadd("key", "zhangsan", 90);redis.zadd("key", "lisi", 91);redis.zadd("key", "wangwu", 92);redis.zadd("key", "zhaoliu", 93);redis.zrem("key", "zhangsan");long long result = redis.zcard("key");cout << "result: " << result << endl;
}

4、zscore

void test4(Redis& redis) {cout << "zscore" << endl;redis.flushall();redis.zadd("key", "zhangsan", 90);redis.zadd("key", "lisi", 91);redis.zadd("key", "wangwu", 92);redis.zadd("key", "zhaoliu", 93);auto score = redis.zscore("key", "zhangsan");if (score) cout << "score: " << score.value() << endl; else cout << "score 无效" << endl;
}

5、zrank

void test5(Redis& redis) {cout << "zrank" << endl;redis.flushall();redis.zadd("key", "zhangsan", 90);redis.zadd("key", "lisi", 91);redis.zadd("key", "wangwu", 92);redis.zadd("key", "zhaoliu", 93);auto rank = redis.zrank("key", "zhaoliu");if (rank) cout << "rank: " << rank.value() << endl;else cout << "rank 无效" << endl;}

八、函数使用注意

http://www.dtcms.com/a/337383.html

相关文章:

  • 微信小程序通过uni.chooseLocation打开地图选择位置,相关设置及可能出现的问题
  • Apache Shiro550 漏洞(CVE-2016-4437):原理剖析与实战 SOP
  • 【Linux开发】错误更改bash.sh导致PATH环境变量被破坏所有命令不可用的解决方法
  • 【Axure高保真原型】时间轴缩放面积图
  • CMIP6 气候模式核心特性解析
  • 学习游戏制作记录(各种独特物品效果)8.18
  • 代码随想录-数组练习
  • 矿物识别案例(数据处理:六种填充方法)
  • 深度剖析PyTorch分布式训练:从原理到工程实践
  • Centos7使用lamp架构部署wordpress
  • 安全基础DAY6-服务器安全检测和防御技术
  • 网站服务器使用免费SSL证书安全吗?
  • 计算机网络技术学习-day3《交换机配置》
  • ⭐CVPR2025 RigGS:从 2D 视频到可编辑 3D 关节物体的建模新范式
  • 一个基于前端开发的经典飞机大战游戏,具有现代化的UI设计和流畅的游戏体验。
  • OpenAL技术详解:跨平台3D音频API的设计与实践
  • 飞机起落架轮轴深孔中间段电解扩孔内轮廓检测 - 激光频率梳 3D 轮廓检测
  • 【verge3d】如何在项目里调用接口
  • Gateway中Forward配置+源码观赏
  • Pandas 核心数据结构详解(精简版)
  • Drawnix:一款免费开源的白板工具,支持思维导图、流程图、类图和手绘图
  • mybatisplus oracle 数据库OracleKeyGenerator使用序列生成主键原理
  • Redis-缓存-穿透-布隆过滤器
  • Linux 系统(如 Ubuntu / CentOS)阿里云虚拟机(ECS)上部署 Bitnami LAMP
  • 用随机森林填补缺失值:原理、实现与实战
  • 大型语言模型(LLM)存在演示位置偏差:相同示例在提示中位置不同会导致模型预测结果和准确率显著变化
  • 基于NLP的文本生成系统设计与实现(LW+源码+讲解+部署)
  • 牛津大学xDeepMind 自然语言处理(1)
  • 【论文阅读69】-DeepHGNN复杂分层结构下的预测
  • 力扣 hot100 Day77