当前位置: 首页 > 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.xdnf.cn/news/1320517.html

相关文章:

  • Redis——基础篇
  • 【redis、ruoyi-vue】基于ruoyi-vue实现数据redis的增删改查
  • Java面试宝典:Redis高级特性和应用(发布 订阅、Stream)
  • [python学习记录1]python简介
  • 最小路径和
  • 在职老D渗透日记day19:sqli-labs靶场通关(第26a关)get布尔盲注 过滤or和and基础上又过滤了空格和注释符 ‘)闭合
  • 线程(基本概念和相关命令)
  • LeetCode热题100--104. 二叉树的最大深度--简单
  • Rust:实现仅通过索引(序数)导出 DLL 函数的功能
  • STM32单片机学习日记
  • 网络常识-SSE对比Websocket
  • 记一次安装OpenStack(Stein)-nova报错问题解决
  • 数据赋能(396)——大数据——抽象原则
  • 智能汽车领域研发,复用云原生开发范式?
  • 48.Seata认识、部署TC服务、微服务集成
  • http工作流程
  • C++算法竞赛:位运算
  • 前端项目练习-王者荣耀竞赛可视化大屏 -Vue纯前端静态页面项目
  • 服务器管理与配置学习总结
  • MYSQL-175. 组合两个表
  • JavaScript性能优化实战(四):资源加载优化
  • LeetCode 837.新 21 点:动态规划+滑动窗口
  • 【数据结构】堆和二叉树详解——上
  • 旋钮键盘项目---foc讲解(闭环位置控制)
  • 学习Python中Selenium模块的基本用法(5:程序基本步骤)
  • Linux817 shell:until,nfs,random
  • 力扣438:找到字符串中所有的字母异位词
  • Django前后端交互实现用户登录功能
  • [python学习记录2]变量
  • 脉冲计数实现