Redis-02-整合Java
Maven 整合 Jedis在 Maven 中引入 Jedis 就可以使用了:
12345678910111213141516171819202122232425class DemoTest { private Jedis jedis; @BeforeEach // 建立 Redis 链接 public void getReids() { jedis = new Jedis("server.xorex.space", 6379); jedis.auth("tempestxorex"); } @Test // 按照使用 Redis 命令名字来调用方法 public void test() { String result = jedis.set("tempest", "xorex"); System.out.println(result); result = jedi ...
Redis-01-基础命令
一、基本概念Redis:Remote Dictionary server 远程词典(键值对形式)服务器。是一种 NoSQL 数据库。
和 SQL 比较
Redis 特点
数据类型Redis 的 Key 都是字符串类型,Value 则支持五种基本类型和其他类型。
基本类型:string(字符串),hash(哈希),list(列表),set(集合)、sorted set(有序集合)
一个 Key 的 Value 只能有一个数据类型。
Redis 安装1. 安装 GCC 依赖Redis 使用 C 语言编写,所以需要安装其代码所依赖的 GCC 编译器。
1yum install -y gcc tcl
2. 下载 Redis 解压我们将目录定位到 usr/local/src 中,并下载解压
12wget https://download.redis.io/releases/redis-6.2.7.tar.gztar -zxvf redis-6.2.7.tar.gz
3. 编译 Redis12cd redis-6.2.7make && make install
编译完成之后, ...
Python-08-线程、进程和协程
这章主要是:线程、进程和协程的介绍。
串行、并行:关注着程序是否有同时处理多个任务的能力。阻塞、非阻塞:关注着程序是否处于什么都不干的等待状态。同步、异步:关注着程序的任务调用,是按照顺序完成一个调用一个,还是一直调用并等待依次完成。
线程全局解释锁 GILGlobal Interprator Lock 全局解释锁,因为 GIL 的存在,导致 Python 在一个时间内只有一个线程被执行。
Python虚拟机执行方式如下:
设置 GIL
切换进线程
执行下面操作之一:
运行指定数量的字节码指令
线程主动让出控制权
切换出线程(线程处于睡眠状态)
解锁 GIL
进入 1 步骤
采用 GIL 的原因是 Python 虚拟机采用引用计数法来标记垃圾回收。如果不加全局锁 GIL 的话,不同的线程在一个进程单位下,可以引用同一对象资源。那么并行访问就会可能导致引用计数的 线程不安全,所以才用 GIL 变成串行执行(引用是单个字节码)。
线程安全需要注意的是,GIL 是解决 引用计数 的线程不安全,并不会防止其他资源访问的线程不安全问题。比如下面的代码:
123456789101112 ...
爬虫-03-简单案例记录
regex 正则表达式1234567891011121314151617181920212223242526272829# 获取豆瓣前 250 的电影信息,包括名字,评分和电影 slogan。# 主要是使用了正则表达式 .*? 进行内容忽略和 (?P<group_name>.*?) 将获取的 html 信息进行提取import requestsimport reimport WebConstantpattern = r'<li>.*?<span class="title">(?P<name>.*?)</span>.*?<span class="rating_num" property="v:average">(?P<rate>.*?)</span>.*?<span class="inq">(?P<slogan>.*?)</span>.*?</li> ...
为美好的世界献上祝福
8a972074cb8fb594adf191142c932486f63d9db6a4bbbbf65eb58b44e7f3a502ca39de9d3c1e3d9c70fdc9a01ad868dc3486910eced5f4e34f64df4c5155d0e28740e7f637329c5391f9bbe6ff64e653a789e2cef71c949e21aa63f2fba5c2f8909ab81d64320e8cb4384ed74fbebab2050cb82c4a7d22b4b9fd24d8a61fc8d8029f2ecbce16d7ac4071fe5c0ae2c3425b4c421b4a82a69b6012152d7d464a3624e786c960a03a52f9cd3453ffde3f9e7f7f8db1b21b9fd158b70d49126036880e6f581475aa1c9265c50093981c7c70663d0a1e3bede2870b4a7e0a6dc0d1a1ce8dbc658189e95bd6888f0f4d48bc8d7fa179df02ce8435e ...
Python-疑问记录
描述符 和 property() 实现原理
不理解为什么描述符是绑定在 类属性 上面。
类属性最初可以激活 getter 方法,但是无法激活 setter 方法
实例属性最初都可以激活 getter 和 setter
当对类属性进行赋值之后,描述符就失效了。应该是赋的值覆盖了绑定符地址。
一个类的多个实例,使用的描述符对象竟然是同一个???
猜测应该是通过实例属性保存 描述符 实例,然后对实例访问和赋值就是对描述符进行访问赋值,会激活特殊方法 get __set__,从而通过描述符来实现对属性访问的控制。
property() 是如何实现方法绑定的?
Python 多继承 MRO
新式类的 MRO 计算方法,以及前几代的设计缺陷。
super() 的原理,以及下面的代码,为什么会输出两个 B。
123456789101112131415class A: def __init__(self): print("A",end=" ") super().__init__() # 这里 ...
爬虫-02-网易云
目标来爬网易云音乐的所有热评,输入歌曲 id ,输出热评。(网易系的 Web 爬取好像都是这个流程)
请求接口通过 F12 查看到了热评查询接口:https://music.163com/weapi/comment/resource/comments/get,请求方式 POST。
但是请求接口的参数,被加了密:
1234params: AZmpF0q2Xd7XkTpxUoqAKAaTsvs28bvL09Jg1X5cYKpMxIcOpa48xqeAqVjqyummoOPGHVEnRafFSmhsIriymftVHdDhyeh2v+rgLGy7W4w7nWPSHSOEzhDNXPLVLJBrgrFJzl/zWUh1f50AwC+qkKa4Z8MvvFZMHAR1/1/aCYBIvsS0i6IAV1DgVLwGitM4r6jyPNVmKua240dgLSw7tIOqjFxeRXFC/ZXLM8SNzL2b19kdQk/moaSILa87zUKPaZZ1YyQb1ulEPU+4MmqW3maGxqAX92LLA2I0voz4JA0= encSecKey: 27f97b1ce8c6a382 ...
爬虫-01-基本技术
requests 请求库发起请求requests 可以发起 get post put delete head options patch 这些请求。
参数可以携带:
url 请求地址
params 拼接链接的请求参数 get
datas 正文的请求参数 post
headers 请求头内容
verify 是否 https 验证,有 True 和 False 两个值
获取返回内容
通过 request 提供的各种请求方法,返回一个 响应对象 response。
response.text 返回 unicode 的 string 对象的相应内容。
response.content 返回 二进制 的相应内容。
一定要记得根据编码格式,设置 response.encode = “XXX” 不然返回内容会解析错误。
如果返回的是 json 数据,则调用响应对象的 json() 将其转化为 Python 的 dic 对象。
Session 会话这里是模拟自动处理响应和请求的 Cookie 处理,在所属于的 Session 会话中,每一次请求都会带上以前保留下来的 Cooki ...
Python-07-文件操作
文件操作这里指的是针对一个文件的基本属性,比如路径,大小,名字,类型等,所以使用 os.path 来操作。
绝对和相对相对路径可以用 ./XXX 或者 XXX 开头表示,是相对于 .py 代码文件的路径。
绝对路径可以用 E:/XXX 或者 /XXX
路径判断
判断路径是否存在 os.path.exists()
判断是否为文件 os.path.isfile()
判断是否为文件夹 os.path.isdir()
判断路径是否为绝对路径 os.path.isabs()
路径操作
分离路径和文件名 os.path.split()
分离文件名和拓展名 os.path.splitext()
将路径和文件名拼接返回绝对路径 os.path.join(path,name)
获取路径名 os.path.dirname()
获取文件名 os.path.basename()
获取文件大小 os.path.getsize()
获取文件夹下的所有文件 os.listdir()
文件属性操作
创建文件 open(“Name.txt”, “a”).close() 建议使用这个创建文件。
...
Python-06-异常和代码管理
异常捕获基本结构
1234567891011121314151617181920try: a = int(input("输入被除数:")) b = int(input("输入除数:")) c = a / b print("您输入的两个数相除的结果是:", c) except ValueError as e: # e 表示捕获的实例 print("输入内容不是合法滴数字呢") except ZeroDivisionError as e: print("除数不能为零呢") except (ValueError,ZeroDivisionError) as e: #把两个异常结合在一起的写法 print("输入数字异常呢") except Exception as e : # 捕获商量捕获不了的异常 print("出现未知异常呢") print(e.args) ...