当前位置: 首页 > news >正文

学网站建设需要什么工具青岛关键词优化报价

学网站建设需要什么工具,青岛关键词优化报价,wordpress4.8移动,潘家园网站建设文章目录前言一、准备二、原理剖析三、编写简易Redis客户端总结前言 Redis 是我们在开发过程中经常会用到的内存数据库,尤其是在Python的第三方模块Redis-py的支持下,在Python中使用Redis及其方便。 但是在有些情况下,我们无法使用像Redis-…

文章目录

  • 前言
  • 一、准备
  • 二、原理剖析
  • 三、编写简易Redis客户端
  • 总结


前言

Redis 是我们在开发过程中经常会用到的内存数据库,尤其是在Python的第三方模块Redis-py的支持下,在Python中使用Redis及其方便。

但是在有些情况下,我们无法使用像Redis-py这样的第三方模块(比如QMT),这时候就需要自己实现一个简易版的Redis-py了。

本文将教大家如何用20行代码,制作一个简易版的Redis客户端,不过仅以GET命令为例,其他命令的用法也差不多。

在这里插入图片描述

一、准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南。

二、原理剖析

其实通过Redis GET返回的数据就是一些字符串,这些字符串的格式如下:

b'$466\r\n\x80\x04\x95\xc7\x01\x00\x00\x00\x00\x00\x00]\x94(\x8c\x06000957\x94\x8c\x06002031\x94\x8c\x06000899\x94\x8c\x06300339\x94\x8c\x06002090\x94\x8c\x06601016\x94\x8c\x06002547\x94\x8c\x06002863\x94\x8c\x06002591\x94\x8c\x06002514\x94\x8c\x06000629\x94\x8c\x06002204\x94\x8c\x06000544\x94\x8c\x06002374\x94\x8c\x06000821\x94\x8c\x06000625\x94\x8c\x06000158\x94\x8c\x06002703\x94\x8c\x06002866\x94\x8c\x06600686\x94\x8c\x06002796\x94\x8c\x06300598\x94\x8c\x06002101\x94\x8c\x06002454\x94\x8c\x06000970\x94\x8c\x06000631\x94\x8c\x06002121\x94\x8c\x06600348\x94\x8c\x06600996\x94\x8c\x06002080\x94\x8c\x06002194\x94\x8c\x06002466\x94\x8c\x06300663\x94\x8c\x06002616\x94\x8c\x06000665\x94\x8c\x06600992\x94\x8c\x06300750\x94\x8c\x06300059\x94\x8c\x06002047\x94\x8c\x06002997\x94\x8c\x06000521\x94\x8c\x06002594\x94\x8c\x06002261\x94\x8c\x06002125\x94\x8c\x06002085\x94\x8c\x06002168\x94\x8c\x06002665\x94\x8c\x06002523\x94\x8c\x06603067\x94\x8c\x06002432\x94e.\r\n'

可见其是一个bytes字符串,开头$xxx是此数据的长度,\r\n作为分割符,后面紧跟着的就是你的原始数据内容,最后才是\r\n作为结尾。

根据这个返回内容,我们就可以制作一个简易的客户端用于在无法引用第三方模块的环境中接收Redis信息。

三、编写简易Redis客户端

与Redis通信,我们只需要用Python原生的socket模块即可。

import socket
import pickleREDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务,指定主机和端口
s.connect((REDIS_HOST, REDIS_PORT))
s.close()

这样就与你的Redis服务器连接上了,接下来只需要向socket发送你的命令并receive即可获取对应的内容:

import socket
import pickleREDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务,指定主机和端口
s.connect((REDIS_HOST, REDIS_PORT))
# GET 某个 KEY 的内容
s.send("GET RQB_keys_20220719 \r\n".encode("utf-8"))
# 接收小于 1M 的数据
msg = s.recv(1024 * 1024)
s.close()
print(msg)
# b'$466\r\n\x80\x04\x95\xc7\x01\x00\x00\x00\x00\x00\x00]\x94(\x8c\x06000957\x94\x8c\x06002031\x94\x8c\x06000899\x94\x8c\x06300339\x94\x8c\x06002090\x94\x8c\x06601016\x94\x8c\x06002547\x94\x8c\x06002863\x94\x8c\x06002591\x94\x8c\x06002514\x94\x8c\x06000629\x94\x8c\x06002204\x94\x8c\x06000544\x94\x8c\x06002374\x94\x8c\x06000821\x94\x8c\x06000625\x94\x8c\x06000158\x94\x8c\x06002703\x94\x8c\x06002866\x94\x8c\x06600686\x94\x8c\x06002796\x94\x8c\x06300598\x94\x8c\x06002101\x94\x8c\x06002454\x94\x8c\x06000970\x94\x8c\x06000631\x94\x8c\x06002121\x94\x8c\x06600348\x94\x8c\x06600996\x94\x8c\x06002080\x94\x8c\x06002194\x94\x8c\x06002466\x94\x8c\x06300663\x94\x8c\x06002616\x94\x8c\x06000665\x94\x8c\x06600992\x94\x8c\x06300750\x94\x8c\x06300059\x94\x8c\x06002047\x94\x8c\x06002997\x94\x8c\x06000521\x94\x8c\x06002594\x94\x8c\x06002261\x94\x8c\x06002125\x94\x8c\x06002085\x94\x8c\x06002168\x94\x8c\x06002665\x94\x8c\x06002523\x94\x8c\x06603067\x94\x8c\x06002432\x94e.\r\n'

请注意,recv里你设定的大小会直接占用内存,所以请设定一个适宜的数目,或者从返回值中的美元符后的数字判断你需要接收的数据大小。

比如第一次请求,你只接收1024个字节,拿到 $xxx 这个长度后,重新send一次命令,再 s.recv(xxx) 长度。

上述例子中得到的内容是redis的格式,我们需要把\r\n给去除掉,并只取中间的数据便是我们存入redis的原始数据。

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

因为我的原始内容是pickle格式,因此我在取出原始数据后使用pickle.loads便能拿到我想要的内容,完整代码如下:

import socket
import pickleREDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务,指定主机和端口
s.connect((REDIS_HOST, REDIS_PORT))
# GET 某个 KEY 的内容
s.send("GET RQB_keys_20220719 \r\n".encode("utf-8"))
# 接收小于 1M 的数据
msg = s.recv(1024 * 1024)
s.close()def get_msg(msg):msg_new = msg.split(b"\r\n")[1]msg = pickle.loads(msg_new)return msgprint(get_msg(msg))

效果如下:

[‘000957’, ‘002031’, ‘000899’, ‘300339’, ‘002090’, ‘601016’, ‘002547’, ‘002863’, ‘002591’, ‘002514’, ‘000629’, '00
在QMT等会限制第三方模块的软件中,使用这样的方式访问Redis,就不会再遇到白名单的限制了。

总结

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python徐浪老师大讲堂!

http://www.mnyf.cn/news/43902.html

相关文章:

  • 泰安网站建设推广优化什么网站可以免费推广
  • 网站 建设 计划书正规职业技能培训机构
  • 平度好的建设网站网站推广方式
  • 做网站开发要学多久艺考培训
  • wap网站广告做到百度第一页
  • 做网站复制国家机关印章厦门seo顾问
  • 如何做防水网站中国十大网络营销平台
  • 网站开发步骤规划传智播客培训机构官网
  • 单人做网站收录情况有几种
  • 购物商城平台开发南昌搜索引擎优化
  • 北京智能网站建设系统加盟百度一下网页
  • 厦门公司网站开发免费发布信息平台有哪些
  • 做卖衣服网站源代码seo公司后付费
  • ps做任务挣钱的网站江西优化中心
  • 网站开发和程序开发百度浏览器网页版入口
  • 做网站关键词搜狗网址大全
  • 外贸独立站建站平台360关键词指数查询
  • 免费建立网站软件北京优化seo排名
  • 个人网站设计与实现结论百度空间登录
  • c 做网站怎么居中文案代写
  • 用凡科做的网站保存不了推广策略包括哪些内容
  • 肥城市网站建设百度搜索高级搜索技巧
  • 做专业的热转印材料门户网站广告优化师是做什么的
  • 爱妮微如何做网站链接的网址seo资讯
  • 建设部网站从何时可以查询工程师证免费的个人主页网页制作网站
  • 网站制作系统哪个好企业邮箱查询
  • 主营网站建设品牌学it需要什么学历基础
  • 某鲜花网站的数据库建设外贸接单十大网站
  • 网站设计专业公司价格企业网络
  • 如何做网站防劫持seo整站排名