"Who can say where the path will go?"
前面我们花了很大的篇幅,讲解了redis中常见常使用的五种数据结构,以及五种数据结构的操作和redis命令。不过在日常开发中,我们的这些操作都是在redis为我们提供的客户端中的,就像使用mysql一样,很多时候不是在mysql-cli去编写sql,而是借助代码程序去访问、操作数据库。更多的时候是使用redis的api,来实现定制化的redis客户端程序,达到访问redis的服务器的目的。
redis提供了通用的客户端程序,比如命令行、第三方图形化客户端,但在实际中,我们更倾向于使用到的是"定制化"的客户端程序。
——前言
认识RESP
为什么能够实现Redis客户端?
你说能实现redis客户端就能实现嘛?或者说,如果能够实现redis客户端 ,那是否可以实现其他应用层服务的客户端,比如说qq、农药、原神启动?
RESP协议:
但实际上,我们并不需要从0开始,遵照上述协议手写一份redis-cli,因为这套协议公开很久了,已经有很多大佬实现了这套解析、构造。我们只需要使用这些大佬提供的库即可。
Redis C++使用
(1) 环境安装
C++操作redis的库有很多.咱们此处使⽤redis-plus-plus。这个库的功能强⼤,使⽤简单。
安装hiredis:
因为redis-plus-plus是基于hiredis实现的,而这个库是一个C语⾔实现的redis客⼾端,我们直接使用包管理器安装即可。
下载 redis-plus-plus源码:
Github:https://github.com/sewenew/redis-plus-plus
编译 redis-plus-plus:
因为Centos系列的camke版本过低,所以我们需要安装camke3:
yum install cmake3
这个redis-plus-plus使用文档,也介绍了安装手册。
构建成功后,会在“ /usr/local/include/ ”中多出 sw ⽬录,并且内部包含redis-plus-plus的⼀
系列头⽂件,会在 /usr/local/lib/ 中多出⼀系列 libredis 库⽂件。
现在,我们可以开始使用这个库来操作redis了!
(2) redis-plus-plus "hello world"
● 包含redis-plus-plus头文件.
● 创建redis对象.
● 调用ping命令
● 使用makefile编译生成可执行程序
我们运行程序后,直接执行程序,就可以得到server给的响应。
(3) redis-plus-plus命令使用
通用命令:
命令 | 执行效果 |
get/set | 获取key、设置key |
exist | 判断一个key是否存在 |
del | 删除key |
keys | 查询redisdb中缓存的key |
expire / ttl | 设置到期时间、剩余到期时间 |
type | 获取value的类型信息 |
get\set:
但,我们直接打印这个value是不行的,因为这个类没有重载"<<"移位操作符。
exists:
del:
keys:
C++的迭代器有几种类型,你是否还记得?
● 输出迭代器 (input)
● 输入迭代器 (output)
● 前向迭代器 (forward_list)
● 双向迭代器 (set\map\list)
● 随机迭代器 (string\vector)
expire and ttl:
type:
String类型操作:
命令 | 执行效果 |
set/get | 设置、获取key |
mset/mget | 多次设置、获取key |
getrange/setrange | 获取范围内的value,覆盖在范围内的原始字符串 |
incr/decr | ++value\-value |
set\get:
set "NX 和 XX":
mset\mget:
getrange 和 setrange:
incr/decr:
hash类型操作:
命令 | 执行效果 |
hset\hget | 设置哈希,获取哈希value |
hexists | 判断field存在 |
hdel | 删除field |
hkeys\hvals | 返回存储在键中的哈希中的所有字段名称。返回存储在键中的哈希中的所有值。 |
hmget\hmset | 多次设置哈希,获取哈希value |
hset 和 hget:
hexits:
hdel:
hkeys\hvals:
list类型操作:
命令 | 执行效果 |
lpush/rpush | 头插、尾插 |
lpop/rpop | 头删、尾删 |
blpop/brpop | 阻塞头删、尾删 |
llen | key中value的个数 |
lpush\lrange:
blpop:
llen:
set类型操作:
命令 | 执行效果 |
sadd\spop | 添加、删除(随机) |
smembers | 查询所有的key |
sismember | key是否存在 |
scard | key的个数 |
sinter/sinterstore | 交集、交集存储 |
sadd 和 smembers:
sismember:
scard:
sinterstore:
Zset类型操作:
命令 | 执行效果 |
zadd/zrange | 添加、返回存储在< key >中的排序集合中指定范围的元素。 |
zcard | 返回存储在key中的排序集的排序集基数(元素数)。 |
zrem | 删除key中的member |
zscore | 获取key中的分数 |
zrank | 返回成员在存储于键的排序集中的排名 |
zadd/zrange:
zrem:
zscore/zrank:
以上就是咱们五种数据结构的一些基本的用C++操纵redis的方式,当然这不是全部,只是一些例举。
本篇到此结束,感谢你的阅读。
祝你好运,向阳而生~