"Who can say where the path will go?"?
? ? ? ? ?前面我們花了很大的篇幅,講解了redis中常見常使用的五種數(shù)據(jù)結(jié)構(gòu),以及五種數(shù)據(jù)結(jié)構(gòu)的操作和redis命令。不過在日常開發(fā)中,我們的這些操作都是在redis為我們提供的客戶端中的,就像使用mysql一樣,很多時候不是在mysql-cli去編寫sql,而是借助代碼程序去訪問、操作數(shù)據(jù)庫。更多的時候是使用redis的api,來實現(xiàn)定制化的redis客戶端程序,達(dá)到訪問redis的服務(wù)器的目的。
? ? ? ? redis提供了通用的客戶端程序,比如命令行、第三方圖形化客戶端,但在實際中,我們更傾向于使用到的是"定制化"的客戶端程序。
? ? ? ? ? ? ? ? ? ?——前言
認(rèn)識RESP
為什么能夠?qū)崿F(xiàn)Redis客戶端?
? ? ? ? 你說能實現(xiàn)redis客戶端就能實現(xiàn)嘛?或者說,如果能夠?qū)崿F(xiàn)redis客戶端 ,那是否可以實現(xiàn)其他應(yīng)用層服務(wù)的客戶端,比如說qq、農(nóng)藥、原神啟動?? ? ??
RESP協(xié)議:????????
?
? ? ? ? 但實際上,我們并不需要從0開始,遵照上述協(xié)議手寫一份redis-cli,因為這套協(xié)議公開很久了,已經(jīng)有很多大佬實現(xiàn)了這套解析、構(gòu)造。我們只需要使用這些大佬提供的庫即可。
Redis C++使用
(1)?環(huán)境安裝
????????C++操作redis的庫有很多.咱們此處使?redis-plus-plus。這個庫的功能強(qiáng)?,使?簡單。
安裝hiredis:
? ? ? ? 因為redis-plus-plus是基于hiredis實現(xiàn)的,而這個庫是一個C語?實現(xiàn)的redis客?端,我們直接使用包管理器安裝即可。
下載 redis-plus-plus源碼:
Github:https://github.com/sewenew/redis-plus-plus?
編譯 redis-plus-plus:?
? ? ? ? 因為Centos系列的camke版本過低,所以我們需要安裝camke3:
yum install cmake3
? ? ? ? ?這個redis-plus-plus使用文檔,也介紹了安裝手冊。
????????構(gòu)建成功后,會在“ /usr/local/include/ ”中多出 sw ?錄,并且內(nèi)部包含redis-plus-plus的?
系列頭?件,會在 /usr/local/lib/ 中多出?系列 libredis 庫?件。
? ? ? ? 現(xiàn)在,我們可以開始使用這個庫來操作redis了!?????????
(2) redis-plus-plus "hello world"
●?包含redis-plus-plus頭文件.
●?創(chuàng)建redis對象.
●?調(diào)用ping命令
●?使用makefile編譯生成可執(zhí)行程序????????????????
? ? ? ? 我們運(yùn)行程序后,直接執(zhí)行程序,就可以得到server給的響應(yīng)。
(3)?redis-plus-plus命令使用
通用命令:
命令 | 執(zhí)行效果 |
get/set | 獲取key、設(shè)置key |
exist | 判斷一個key是否存在 |
del | 刪除key |
keys | 查詢redisdb中緩存的key |
expire / ttl | 設(shè)置到期時間、剩余到期時間 |
type | 獲取value的類型信息 |
get\set:
? ? ? ? 但,我們直接打印這個value是不行的,因為這個類沒有重載"<<"移位操作符。
exists:
del:
keys:
? ? ? ? C++的迭代器有幾種類型,你是否還記得?
●?輸出迭代器 (input)
●?輸入迭代器 (output)
●?前向迭代器 (forward_list)
●?雙向迭代器 (set\map\list)
●?隨機(jī)迭代器?(string\vector)
expire and ttl:????????
type:
String類型操作:
命令 | 執(zhí)行效果 |
set/get | 設(shè)置、獲取key |
mset/mget | 多次設(shè)置、獲取key |
getrange/setrange | 獲取范圍內(nèi)的value,覆蓋在范圍內(nèi)的原始字符串 |
incr/decr | ++value\-value |
set\get:
set "NX 和 XX":
mset\mget:
getrange 和 setrange:?
incr/decr:?
hash類型操作:
命令 | 執(zhí)行效果 |
hset\hget | 設(shè)置哈希,獲取哈希value |
hexists | 判斷field存在 |
hdel | 刪除field |
hkeys\hvals | 返回存儲在鍵中的哈希中的所有字段名稱。返回存儲在鍵中的哈希中的所有值。 |
hmget\hmset | 多次設(shè)置哈希,獲取哈希value |
hset 和 hget:
hexits:
hdel:
hkeys\hvals:
list類型操作:
命令 | 執(zhí)行效果 |
lpush/rpush | 頭插、尾插 |
lpop/rpop | 頭刪、尾刪 |
blpop/brpop | 阻塞頭刪、尾刪 |
llen | key中value的個數(shù) |
lpush\lrange:?
blpop:
llen:
?
set類型操作:
?????????
命令 | 執(zhí)行效果 |
sadd\spop | 添加、刪除(隨機(jī)) |
smembers | 查詢所有的key |
sismember | key是否存在 |
scard | key的個數(shù) |
sinter/sinterstore | 交集、交集存儲 |
sadd 和 smembers:?
?
sismember:
scard:
?
sinterstore:
Zset類型操作:
命令 | 執(zhí)行效果 |
zadd/zrange | 添加、返回存儲在< key >中的排序集合中指定范圍的元素。 |
zcard | 返回存儲在key中的排序集的排序集基數(shù)(元素數(shù))。 |
zrem | 刪除key中的member |
zscore | 獲取key中的分?jǐn)?shù) |
zrank | 返回成員在存儲于鍵的排序集中的排名 |
zadd/zrange:?
zrem:
?
zscore/zrank:
?
? ? ? ? 以上就是咱們五種數(shù)據(jù)結(jié)構(gòu)的一些基本的用C++操縱redis的方式,當(dāng)然這不是全部,只是一些例舉。?
本篇到此結(jié)束,感謝你的閱讀。
祝你好運(yùn),向陽而生~文章來源:http://www.zghlxwxcb.cn/news/detail-692094.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-692094.html
到了這里,關(guān)于使用C++操作Redis客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!