IT评测·应用市场-qidao123.com技术社区

标题: 【Redis 初阶】客户端(C++ 使用样例列表) [打印本页]

作者: 道家人    时间: 2024-8-1 18:19
标题: 【Redis 初阶】客户端(C++ 使用样例列表)
一、编写 helloworld

必要先使用 redis-plus-plus 连接一下 Redis 服务器,再使用 ping 命令检测连通性。

1、Makefile

Redis 库最多可以支持到 C++17 版本。(假如是用 Centos,必要留意 gcc/g++ 的版本,看是否支持 C++17。不支持的话,选用 C++11 版本也是可以的)
  1. hello:hello.cc
  2.         g++ -std=c++17 -o $@ $^ /usr/local/lib64/libredis++.a /usr/local/lib/libhiredis.a -pthread
  3. .PHONY:clean
  4. clean:
  5.         rm hello
复制代码
编译程序时,必要引入的库文件(由于差别系统中安装好的库地点位置会存在差异,因此要留意⽂件路径是否存在。可以用 find 命令来查找库地点的目录):

也可以选择使用动态库链接:


2、hello.cc

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <unordered_map>
  5. #include <sw/redis++/redis++.h>
  6. using std::cout;
  7. using std::endl;
  8. using std::vector;
  9. using std::string;
  10. using std::unordered_map;
  11. int main()
  12. {
  13.     // 创建Redis对象时,需要在构造函数中指定redis服务器的地址和端口
  14.     sw::redis::Redis redis("tcp://127.0.0.1:6379");
  15.     // 调用ping方法,让客户端给服务器发了一个PING,然后服务器就会返回一个PONG,就通过返回值获取到
  16.     string result = redis.ping();
  17.     std::cout << result << std::endl;
  18.     return 0;
  19. }
复制代码

这里必要包罗 redis-plus-plus 的头文件:redis++.h

6379 是 Redis 服务器的默认端口:


3、运行程序



二、具体 API

参考 Github:
redis-plus-plus/src/sw/redis++/redis.h at master · sewenew/redis-plus-plus (github.com)
参考 Gitee:
src/sw/redis++/redis.h · peixinchen/redis-plus-plus - Gitee.com

三、使用通用命令

1、get & set

(1)get


此处的 Optional 可以体现:“非法值” / “无效值”(nil)
假如直接使用 std::string 来体现,则不方便来体现 nil(无效值);假如使用 std::string* 来标识,虽然可以用 nullptr 体现无效,但是返回指针又会涉及到内存题目。
boost 很早就引入了 optional 类型,在 C++14 版本中就正式是纳入尺度库了。因为用户大概选用的是 C++11 版本,以是作者自己封装了一个 OptionalString。
使用 get 获取到 key 对应的 value:

也可以不选择 if 来做判定,而是选用 try-catch。但在实际上,C++ 中不太会经常使用 try-catch。缘故原由如下:

上面的 value1 ~ value4 都是 optional 类型,sw::redis::OptionalString 不支持 << 运算符的重载。这里也没有必要给 optional 搞一个 << 的重载,只必要把 optional 内里包罗的元素取出来即可(optional 可以当作只包罗一个元素的容器)。

(2)set


这里用到了 StringView 这样的类型(是在 sw::redis 命名空间里的).

StringView 中的各种操纵和 string 类似,只不过是包罗了一些只读方法。


(3)运行程序

A. Makefile



B. generic.cc




C. 运行结果



2、exists & del

(1)exists




(2)del



进行单元测试时,扫除数据操纵是放在开始,还是结束呢?

   放在开始更好一些。因为假如放在结束的位置,一旦执行的程序中心出现异常,就大概导致清理代码没有执行到。另一方面,放在开始的位置,当执行完一个操纵之后,此时 Redis 里仍然是有数据的,也方便我们手工来检查数据的内容。
  
3、keys





通常,一个迭代器紧张是体现一个 “位置”。 
STL 中的 5 种迭代器类型:
这里直接使用容器作为参数,keys 内部直接操纵容器进行插入不就行了吗,为什么还要通过迭代器绕一个大圈子呢?

   解耦合。代码要寻求高内聚、低耦合。
  keys 这个操纵看不到容器,容器也看不到 keys 操纵。此时,它们双方都使用迭代器这样一个中心媒介来去进行交互。此时,keys 的迭代器可以指向 vector,也可以指向别的的容器。换句话说,给你一个 vector 容器,它可以搭配 keys 使用,也可以搭配其他函数使用。也就是说,任何一个容器可以和恣意函数搭配使用。
  


4、expire & ttl



系统函数是和系统相关的,同样的功能在差别的系统上大概是完全差别的函数。更好的选择是使用尺度库的函数,C++ 提供了 thread -> sleep_for。



5、type




四、string

1、get & set

(1)相关代码


 




(2)运行程序

A. Makefile



B. 运行程序

a. test1



b. test2



c. test3



2、mget & mset

(1)mget






(2)mset




3、getrange & setrange




4、incr & decr

(1)incr



(2)decr



(3)运行程序





五、list

1、lpush & rpush & lrange

(1)lpush & lrange





   redis-plus-plus 这个库的接口风格计划非常统一。当一个函数参数必要传递多个值的时间,往往都是支持初始化列表或者是一对迭代器的方式,来进行实现的。当一个函数的返回值必要体现多个数据的时间,也往往会借助插入迭代器,来实现往一个容器中添加元素的结果。当某些场景涉及到无效值时,往往会搭配 std:ptional 来进行使用。
  lpush 是头插,以是每次新的元素都是插入到 list 开头,越厥后的元素就越是排在前面。


(2)rpush & lrange




2、lpop & rpop






3、blpop


optional 内里包裹着一个 pair,pair 内里是 string。
blpop 要返回的内容是两个部门:
blpop 可以设定超时时间。假如在指定时间内,还没有别的客户端往指定的 list 中插入元素,此时 blpop 就直接返回了,此时返回的就是一个无效值。

对于 std:ptional 类型来说,可以直接使用 -> 来访问 optional 内部包罗的元素的成员变量。


4、llen




六、set

1、sadd & smembers




back_inserter 是把末尾位置和 push_back 两个操纵绑定到一起了,但是 set 里没有 push_back,但是 set 有 insert 方法,和 insert 对应的是 insert_iterator。


2、sismember






3、scard





4、spop






5、sinter






6、sinterstore







七、hash

1、hset & hget

(1)hset





hset 也能够一次性插入多个 field-value。


(2)hget




(3)运行程序




2、hexists






3、hdel & hlen








4、hkeys & hvals

(1)hkeys




(2)hvals




(3)运行程序




5、hmset & hmget

(1)hmset




(2)hmget





(3)运行程序




八、zset

1、zadd & zrange

(1)zadd






(2)zrange


zrange 支持两种紧张的风格:
关键就是看插入迭代器指向的容器的类型。指向的容器只是包罗一个 string,就是只查询 member。指向的容器包罗的是一个 pair,内里有 string 和 double,就是查询 member 同时带有 score。


(3)运行程序





2、zcard





3、zrem







4、zscore





5、zrank





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4