使用redis的setnx实现分布式锁(python实现) 在实际开发场景中,可能会出现多个服务可能会同时调用同一个方法的情况,但是想要保证在一定的时间内该方法只能被一个服务调用。1.单线程:首先redis本身是单线程的,当有多个线程同时访问redis的时候,一定是一个一个线程的按照顺序的访问redis,因此这是使用redis实现分布式锁的一个原因。2.原子性:setnx具有原子性,当有多个线程时,只会有一个线程可以使用setnx设置成功。3.特点:当有重复的锁key的时候setnx查询缓存就会返回false或者空,那我们可以利用它的这种机制去实现多个服务的同时调用
开发中git的常见用法 创建分支:git branch 分支名称切换分支:git checkout 分支名称提交分支代码:git add .git commit -m "提交的代码描述"推送到远程分支:git push origin 分支名称删除本地分支:git branch -D 分支名称撤销提交commit的分支:git log该命令查看当前分支当前所指的对象git reset --soft 73cc772dd727f40c755cddcbec209f55
mac中安装pycurl报错error: command ‘clang‘ failed with exit status 1 使用命令安装pycurl: python3 -m pip install pycurl报错:ERROR: Command errored out with exit status 1: command: /Library/Developer/CommandLineTools/usr/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/3s...
error: command ‘gcc‘ failed with exit status 1报错解决 在执行如下命令在安装gerapy时sudo pip3 install gerapy出现如下报错信息解决方法:根绝报错信息,得知缺少python.h文件,因此添加python对应的devel文件就可以。因为我使用的是python3,执行如下命令,再重新执行安装命令,即可解决报错问题。(注:如果是python,则需要把改成python-devel执行即可)sudo yum install python3-devel...
Python的Redis操作 一、安装Redis扩展库 安装redis扩展库pip install redis二、使用python操作Redis1、Redis和StrictRedisredis扩展库提供Redis和StrictRedis两个类来实现Redis的命令操作。StrictRedis实现了官方的命令,Redis是它的子类,兼容老版本,扩展库没有实现select方法,但是可以通过连接时指定使用的库。2、Redis的连接 1、简单连接 导入redis,创建Redis对象,所有命令行下...
redis数据库设置密码 一、设置密码如何设置密码:redis配置文件通常在/etc/redis.conf中,打开配置文件找到:#requirepass foobared去掉行前的注释,并修改密码为所需的密码:requirepass 密码修改完成后,保存文件,并退出。尝试用密码登录并执行具体的命令看到可以成功执行:redis-cli -h 127.0.0.1 -p 6379 -a 密码...
轻量级hook框架Frida的安装(包括客户端以及服务端) 最近在做抖音的数据爬取,但是在请求头中参数加密的问题使得无法进行数据的大量获取,因此想到使用hook的方式。Frida是一款基于python+JavaScript的轻量级hook框架,Frida的动态代码执行功能,主要是在它的核心引擎Gum中用C语言来实现的。注入模式:大部分情况下,我们都是附加到一个已经运行到进程或者是在程序启动到时候进行劫持,然后再在目标进程中运行我们的代码逻辑,这种方式是Frida最常用的使用方式。注入模式的大致实现思路是这样的,带有GumJS的Frida核心引擎被打包成一个动
python:面向对象编程中的继承和多态 一、继承和多态1、继承的好处:就是子类获得了父类的全部功能。2、多态:当子类和父类存在相同的方法时,子类的方法覆盖了父类的方法,在代码运行的时候,总是会调用子类的方法。二、在编程中最常见的使用举例如下(使用python实现):# Animal是父类class Animal(): def __init__(self,name): self.name = name def Call(self): pass def Run(self):
pip 安装scrapy报错解决 最近要重新部署环境,在进行pip安装scrapy框架时出现如下错误!!上面的提示其实是说明缺少c++14,这时并不需要进行下载,去python第三方库的网站上找这个对应版本的安装包里面ctrl+f搜索twisted,选择和python版本对应的版本下载,我这里用的是python3.9版本,因此选择的是如下图的第一个文件,下载并进行安装即可!!下载链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/下载完成以后使用如下命令进行安装即可:pip
数据结构:串(c语言版) 一、串类型的定义计算机上的非数值处理的对象基本上都是字符串数据。串(或者字符串)是由零个或者多个字符组成的有限序列,串的值可以是字母、数字或者其他字符,串中字符的数目n称为串的长度,零个字符的串称为空串,它的长度为零。串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应的称为主串。通常称字符在序列中的序号为该字符在串中的位置,子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。如果两个串相等,当且仅当这两个串的值相等,也就是说,只有当两个串的长度相等,并且各个对应的位置的
数据结构:栈和队列(c语言) 一、栈和队列基本介绍栈和队列是两种重要的线性结构。从数据结构角度来看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,他们是操作受限制的线性表,因此,可称为限定性的数据结构。但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型。由于它们广泛应用在各种软件系统中,因此在面向对象的程序设计中,它们是多型数据类型。二、栈栈是限定仅在表尾进行插入或者删除操作的线性表。因此,对栈来说,表尾端有特殊含义,称为栈顶,相应的,表头称为栈底。不含元素的空表称为空栈。栈的修改
数据结构:线性表(c语言) 一、线性表的类型定义线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。线性表的顺序存储结构的特点是逻辑上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中的任意一个元素。然而,这个特点也造成了这种存储结构的弱点:在进行插入和删除操作时。需要移动大量的元素。而另一种表示方法(链式存储结构),由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序结构所具有的弱点,但同时也失去了顺序表可随机存取的优点。在稍微复杂的线性表中,一个数据元素可以由若干个数据项组成,在这.
运行Scrapy,出现ImportError: DLL load failed: 找不到指定的程序的错误解决 今天突然发现使用scrapy框架一直定时爬取的程序突然报错了,因为我下载了matplotlib的包,有的说是版本不兼容的,然后我把我的版本降低,但是还是没有解决问题,因为我看到报错中显示无法导入win32api,所以我试着importwin32api,不出意料,无法显示正常导入,确定是win32api的问题后,我使用了如下方式解决:下载依赖包:https://pypi.org/project/pywin32/#files查看python版本,我的是3.7版本,因此我的选择如下:然后在终端输.
使用selenium获取不到#document里面的网页内容的问题解决 一、问题出现的原因网页中有一种节点叫做iframe,相当于外部页面的子页面,它的结构和外部页面的结构是一致的。当我们使用selenium去模拟浏览器进行操作时,是默认的在父级Frame里面进行操作,但是页面中还存在子Frame,这时候是获取不到子Frame里面的节点的,也就表现在虽然在页面中有数据内容,但是使用模拟浏览器获取获取不到任何内容。二、解决方法# 获取#document下的...
python中的类方法@classmethod和静态方法@staticmethod Python中存在有三种定义类方法, 分别为:常规方式,、@classmethod修饰方式、@staticmethod修饰方式。一、类方法@classmethod该函数方法不需要进行实例化并且它不需要 self 参数,它的第一个参数为表示自身类的 cls 参数,它可以用来调用类的属性,类的方法,实例化对象等等。class A(object): # 常规方法,实例化类之后调...
发送HTTP请求时post或put方法报错返回415状态码的解决方法 在发送HTTP请求时,用post或者put方法时可能会出现415的错误,解决方法:只需要在请求头中加入如下字段即可:"Content-Type":"application/json"完整的请求头如下:headers = { "Content-Type": "application/json", "Accep...