日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何制作簡易版的Redis客戶端

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-16 11:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Redis 是我們在開發(fā)過程中經常會用到的內存數(shù)據(jù)庫,尤其是在Python的第三方模塊Redis-py的支持下,在Python中使用Redis及其方便。

但是在有些情況下,我們無法使用像Redis-py這樣的第三方模塊(比如QMT),這時候就需要自己實現(xiàn)一個簡易版的Redis-py了。

本文將教大家如何用20行代碼,制作一個簡易版的Redis客戶端,不過僅以GET命令為例,其他命令的用法也差不多。

1.準備

開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。

2.原理剖析

其實通過Redis GET返回的數(shù)據(jù)就是一些字符串,這些字符串的格式如下:

b'$466rnx80x04x95xc7x01x00x00x00x00x00x00]x94(x8cx06000957x94x8cx06002031x94x8cx06000899x94x8cx06300339x94x8cx06002090x94x8cx06601016x94x8cx06002547x94x8cx06002863x94x8cx06002591x94x8cx06002514x94x8cx06000629x94x8cx06002204x94x8cx06000544x94x8cx06002374x94x8cx06000821x94x8cx06000625x94x8cx06000158x94x8cx06002703x94x8cx06002866x94x8cx06600686x94x8cx06002796x94x8cx06300598x94x8cx06002101x94x8cx06002454x94x8cx06000970x94x8cx06000631x94x8cx06002121x94x8cx06600348x94x8cx06600996x94x8cx06002080x94x8cx06002194x94x8cx06002466x94x8cx06300663x94x8cx06002616x94x8cx06000665x94x8cx06600992x94x8cx06300750x94x8cx06300059x94x8cx06002047x94x8cx06002997x94x8cx06000521x94x8cx06002594x94x8cx06002261x94x8cx06002125x94x8cx06002085x94x8cx06002168x94x8cx06002665x94x8cx06002523x94x8cx06603067x94x8cx06002432x94e.rn'

可見其是一個bytes字符串,開頭$xxx是此數(shù)據(jù)的長度,rn作為分割符,后面緊跟著的就是你的原始數(shù)據(jù)內容,最后才是rn作為結尾。

根據(jù)這個返回內容,我們就可以制作一個簡易的客戶端用于在無法引用第三方模塊的環(huán)境中接收Redis信息。

3.編寫簡易Redis客戶端

與Redis通信,我們只需要用Python原生的socket模塊即可。

import socket
import pickle

REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# 創(chuàng)建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 連接服務,指定主機和端口
s.connect((REDIS_HOST, REDIS_PORT))
s.close()

這樣就與你的Redis服務器連接上了,接下來只需要向socket發(fā)送你的命令并receive即可獲取對應的內容:

import socket
import pickle

REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# 創(chuàng)建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 連接服務,指定主機和端口
s.connect((REDIS_HOST, REDIS_PORT))
# GET 某個 KEY 的內容
s.send("GET RQB_keys_20220719 rn".encode("utf-8"))
# 接收小于 1M 的數(shù)據(jù)
msg = s.recv(1024 * 1024)
s.close()
print(msg)
# b'$466rnx80x04x95xc7x01x00x00x00x00x00x00]x94(x8cx06000957x94x8cx06002031x94x8cx06000899x94x8cx06300339x94x8cx06002090x94x8cx06601016x94x8cx06002547x94x8cx06002863x94x8cx06002591x94x8cx06002514x94x8cx06000629x94x8cx06002204x94x8cx06000544x94x8cx06002374x94x8cx06000821x94x8cx06000625x94x8cx06000158x94x8cx06002703x94x8cx06002866x94x8cx06600686x94x8cx06002796x94x8cx06300598x94x8cx06002101x94x8cx06002454x94x8cx06000970x94x8cx06000631x94x8cx06002121x94x8cx06600348x94x8cx06600996x94x8cx06002080x94x8cx06002194x94x8cx06002466x94x8cx06300663x94x8cx06002616x94x8cx06000665x94x8cx06600992x94x8cx06300750x94x8cx06300059x94x8cx06002047x94x8cx06002997x94x8cx06000521x94x8cx06002594x94x8cx06002261x94x8cx06002125x94x8cx06002085x94x8cx06002168x94x8cx06002665x94x8cx06002523x94x8cx06603067x94x8cx06002432x94e.rn'

請注意,recv里你設定的大小會直接占用內存,所以請設定一個適宜的數(shù)目,或者從返回值中的美元符后的數(shù)字判斷你需要接收的數(shù)據(jù)大小。

比如第一次請求,你只接收1024個字節(jié),拿到 $xxx 這個長度后,重新send一次命令,再 s.recv(xxx) 長度。

上述例子中得到的內容是redis的格式,我們需要把rn給去除掉,并只取中間的數(shù)據(jù)便是我們存入redis的原始數(shù)據(jù)。

import pickle
def get_msg(msg):
    msg_new = msg.split(b"rn")[1]
    msg = pickle.loads(msg_new)
    return msg

因為我的原始內容是pickle格式,因此我在取出原始數(shù)據(jù)后使用pickle.loads便能拿到我想要的內容,完整代碼如下:

import socket
import pickle

REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# 創(chuàng)建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 連接服務,指定主機和端口
s.connect((REDIS_HOST, REDIS_PORT))
# GET 某個 KEY 的內容
s.send("GET RQB_keys_20220719 rn".encode("utf-8"))
# 接收小于 1M 的數(shù)據(jù)
msg = s.recv(1024 * 1024)
s.close()

def get_msg(msg):
    msg_new = msg.split(b"rn")[1]
    msg = pickle.loads(msg_new)
    return msg

print(get_msg(msg))

效果如下:

['000957', '002031', '000899', '300339', '002090', '601016', '002547', '002863', '002591', '002514', '000629', '002204', '000544', '002374', '000821', '000625', '000158', '002703', '002866', '600686', '002796', '300598', '002101', '002454', '000970', '000631', '002121', '600348', '600996', '002080', '002194', '002466', '300663', '002616', '000665', '600992', '300750', '300059', '002047', '002997', '000521', '002594', '002261', '002125', '002085', '002168', '002665', '002523', '603067', '002432']

在QMT等會限制第三方模塊的軟件中,使用這樣的方式訪問Redis,就不會再遇到白名單的限制了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    9

    文章

    3238

    瀏覽量

    76528
  • 開發(fā)
    +關注

    關注

    0

    文章

    380

    瀏覽量

    42244
  • 數(shù)據(jù)庫

    關注

    7

    文章

    4085

    瀏覽量

    68569
  • Redis
    +關注

    關注

    0

    文章

    394

    瀏覽量

    12258
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    信號處理原理-簡易版

    信號處理原理-簡易版主要內容信號的分類與定義隨機信號與確定性信號連續(xù)信號與離散信號周期信號與非周期信號確定性信號的特性時間特性頻率特性時間與頻率的聯(lián)系確定性信號分析時域分析頻域分析隨機信號特性及分析 [hide][/hide]
    發(fā)表于 11-04 10:16

    阿里云專訪Redisson作者Rui Gu:構建開源企業(yè)級Redis客戶端之路

    的會議,在會議上對開源Redisson客戶端的作者Rui Gu做了一個訪談,Rui Gu在Redis社區(qū)國際上的影響力還有在開源上的工作給筆者留下了深刻的印象,以下是訪談的具體內容。以上照片為阿里云夏周
    發(fā)表于 07-02 16:33

    用Delphi開發(fā)OPC客戶端工具的方法研究

    本文通過介紹OPC 技術的工作原理,結合OPC 客戶端的工作機制,給出OPC 客戶端的開發(fā)方法及在的Delphi 的具體實現(xiàn),提出了OPC 客戶端開發(fā)工具的設計方案,并實現(xiàn)了OPC 客戶端
    發(fā)表于 06-15 10:37 ?35次下載

    CoolpyCould客戶端

    一款開源的物聯(lián)網服務器平臺,利用nodejs寫成,此文件是CoolpyCould客戶端
    發(fā)表于 11-06 17:00 ?18次下載

    CSDN博客客戶端源碼

    CSDN博客客戶端源碼CSDN博客客戶端源碼CSDN博客客戶端源碼
    發(fā)表于 11-18 10:22 ?1次下載

    JAVA教程之UDP客戶端模型

    JAVA教程之UDP客戶端模型,很好的JAVA的資料,快來學習吧
    發(fā)表于 04-11 17:28 ?4次下載

    JAVA教程之Telnet客戶端

    JAVA教程之Telnet客戶端,很好的JAVA的資料,快來學習吧
    發(fā)表于 04-11 17:28 ?6次下載

    Android 仿QQ客戶端及服務源碼

    Android 仿QQ客戶端及服務源碼
    發(fā)表于 03-19 11:23 ?3次下載

    CA根證書和服務器、客戶端證書制作及使用

    CA根證書和服務器、客戶端證書制作及使用
    發(fā)表于 09-09 08:22 ?10次下載
    CA根證書和服務器、<b class='flag-5'>客戶端</b>證書<b class='flag-5'>制作</b>及使用

    Redis的數(shù)據(jù)結構和主要命令對Redis的基本能力進行直觀介紹

    當多個客戶端同時向Redis申請自增序列時,Redis能夠確保每個客戶端得到的序列值或序列范圍都是全局唯一的,絕對不會出現(xiàn)不同客戶端得到了重
    的頭像 發(fā)表于 11-05 17:57 ?3441次閱讀

    iOS淘寶客戶端應用名稱發(fā)生變化 Android客戶端應用名稱尚未更改

    iOS淘寶客戶端應用名稱發(fā)生變化 Android客戶端應用名稱尚未更改
    發(fā)表于 04-18 15:37 ?1323次閱讀

    HTTP客戶端快速入門指南

    HTTP客戶端快速入門指南
    發(fā)表于 01-12 18:45 ?0次下載
    HTTP<b class='flag-5'>客戶端</b>快速入門指南

    HTTP客戶端快速入門指南

    HTTP客戶端快速入門指南
    發(fā)表于 07-03 18:38 ?0次下載
    HTTP<b class='flag-5'>客戶端</b>快速入門指南

    MQTT中服務客戶端

    MQTT 是一種基于客戶端-服務架構(C/S)的消息傳輸協(xié)議,所以在 MQTT 協(xié)議通信中,有兩個最為重要的角色,它們便是服務客戶端。 1)服務
    的頭像 發(fā)表于 07-30 14:55 ?3928次閱讀

    ROS是如何設計的 ROS客戶端

    實現(xiàn)通信的代碼在ros_comm包中,如下。 其中clients文件夾一共有127個文件,看來是最大的包了。 現(xiàn)在我們來到了ROS最核心的地帶。 客戶端這個名詞出現(xiàn)的有些突然,一個機器人操作系統(tǒng)里
    的頭像 發(fā)表于 09-14 17:29 ?1722次閱讀
    ROS是如何設計的 ROS<b class='flag-5'>客戶端</b>庫
    万山特区| 文化| 新沂市| 揭东县| 呼伦贝尔市| 孟村| 马尔康县| 平定县| 天镇县| 哈巴河县| 吉安市| 固镇县| 武清区| 苗栗县| 维西| 绵阳市| 永修县| 望奎县| 元朗区| 剑阁县| 梨树县| 吉木萨尔县| 龙井市| 黄冈市| 祁东县| 石家庄市| 东乌| 封丘县| 兴安盟| 绵竹市| 湘西| 五峰| 阿拉善右旗| 堆龙德庆县| 兴安盟| 新竹县| 锦屏县| 株洲县| 丹江口市| 平江县| 白山市|