def

玩转Redis-干掉钉子户-没有设置过期时间的key

天大地大妈咪最大 提交于 2020-12-06 18:39:04
   《玩转Redis》系列文章 by zxiaofan 主要讲述Redis的基础及中高级应用。本文是《玩转Redis》系列第【15】篇, 最新系列文章 请前往 公众号“zxiaofan” (点我点我) 查看,或 百度搜索“玩转Redis zxiaofan”(点我点我) 即可。 本文关键字: 玩转Redis、导出没有设置过期时间的key、删除没有设置过期时间的key ; 往期精选 : 《玩转Redis-生产环境如何导入、导出及删除大量数据》 大纲 如何查询Redis中没有设置过期时间的key数量 导出Redis中没有设置过期时间的key 安全删除Redis中没有设置过期时间的key   前段时间公司有新业务需要使用Redis,于是查看了生产一Redis集群的使用情况,用于评估是否能直接接入新业务。此Redis集群购买的阿里云集群社区版,8节点32G;   不看不知道,一看吓一跳。Redis实例共计 450W key,其中 230W 设置了过期时间,也就是说足足有 220W key没有设置过期时间。 What !!! 接近 50% 的数据没有过期时间,完全不符合常理,严重浪费。    不把这些钉子户揪出来,“誓不为猿”。   文末已放 github 联接。 1、如何查询Redis中未设置过期时间的key数量 1.1、使用阿里云【云数据库Redis版管理控制台】查看  

python 播放MP3和MP4

对着背影说爱祢 提交于 2020-12-06 14:00:13
import pygame import time def play_music(): filepath = r " 900A.mp3 " ; pygame.mixer.init() # 加载音乐 pygame.mixer.music.load(filepath) pygame.mixer.music.play(start =0.0 ) # 播放时长,没有此设置,音乐不会播放,会一次性加载完 time.sleep(300 ) pygame.mixer.music.stop() play_music() MP4 class Video(object): def __init__ (self,path): self.path = path def play(self): from os import startfile startfile(self.path) class Movie_MP4(Video): type = ' MP4 ' movie = Movie_MP4(r ' F:\Y2019\Python\ppt\ArcGIS Python入门到精通广告视频.mp4 ' ) movie.play() 来源: oschina 链接: https://my.oschina.net/u/4287611/blog/3329457

python语法基础

南楼画角 提交于 2020-12-06 09:58:27
1.注释   1.1 单行注释 # 这是注释内容 print ( " hello world! " ) print ( " hello world! " ) # 在代码后也可以编写注释   1.2 多行注释 """ 代码完成的功能是,打印输出 hello world 1.首先调用 print 函数 2.给 print 函数传入要打印输出的参数 """ print ( " hello world! " )   1.3 快捷键注释 快捷键注释 ctrl + / 2.变量   2.1 变量定义语法   变量在程序中表现为一个唯一不重复的名字,只需要定义一个名字,给这个名字变量赋值即可。   注意:变量意味着存储的数据是可以变化的。 # 定义一个变量,名字为val ,这个变量临时存储的值为100 val = 100 # 下面将这个变量的值,更改为其他的值 200 val = 200   注意:这里的等号(=),叫做赋值运算符,表示将 = 号后面的数据存储到名字为 = 号前面的名字变量里。   在取变量名时,注意:     1.标识符由字母、下划线和数字组成,且数字不能开头;     2.python 中的标识符是区分大小写的;     3.变量名一般用小写加下划线组成;     4.不能和关键字和已有的名字冲突;   2.2 变量的类型          1) 数字类型:整数和小数    

Python基础语法

雨燕双飞 提交于 2020-12-06 08:37:48
Python基础语法 1. 输入和输出: input()输入: input()的小括号中放入的是,提示信息,用来在获取数据之前给用户的一个简单提示 input()在从键盘获取了数据以后,会存放到等号右边的变量中 input()会把用户输入的任何值都作为字符串来对待 注意:在python2中还有一个raw_input()输入,但到python3中没有了 1 #!/usr/bin/python3 2 3 str = input("请输入:" ); 4 print ("你输入的内容是: ", str) 这会产生如下的对应着输入的结果: 1 请输入:Hello Python! 2 你输入的内容是: Hello Python! Print()输出: print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="": 1 #!/usr/bin/python3 2 3 x="a" 4 y="b" 5 # 换行输出 6 print ( x ) 7 print ( y ) 8 9 print('---------' ) 10 # 不换行输出 11 print( x, end=" " ) 12 print( y, end=" " ) 13 print () 14 15 # 同时输出多个变量 16 print(x,y) format的格式化函数(了解) 格式化字符串的函数 str

flask-sqlalchemy组件

房东的猫 提交于 2020-12-06 07:28:58
一、简介   flask本身没有内置orm框架,需要依赖第三方模块,这里介绍flask-sqlalchemy,而flask-sqlalchemy是一个flask的扩展,本质上是对sqlalchemy的进一步封装,当然也需要sqlalchemy的支持,使用起来和本来的sqlalchemy的orm是一样的。本文主要介绍sqlalchemy的使用以及如何在flask中是用orm。 二、sqlalchemy   SQLAlchemy是 Python 编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。图示: 基本使用 安装: pip3 install sqlalchemy 注:SQLAlchemy无法修改表结构,如果需要可以使用SQLAlchemy开发者开源的另外一个软件Alembic来完成,官网doc:http://docs.sqlalchemy.org/en/latest/core/expression_api.html 原生SQL 使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句 # !/usr/bin/env python3 # _

Django基础六之ORM中的锁和事务

…衆ロ難τιáo~ 提交于 2020-12-06 06:02:57
一 锁    行级锁     select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面,至于如何开启事务,我们看下面的事务一节。     返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT ... FOR UPDATE 语句。     举个例子: entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询时自动加的是共享锁,所以我们可以手动加上互斥锁。 create、update、delete操作时,mysql自动加行级互斥锁     所有匹配的行将被锁定,直到事务结束。这意味着可以通过锁防止数据被其它事务修改。     一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞,直到锁被释放。 如果这不想要使查询阻塞的话,使用select_for_update(nowait=True)。 如果其它事务持有冲突的锁,互斥锁, 那么查询将引发 DatabaseError 异常。你也可以使用select_for_update(skip_locked=True)忽略锁定的行。 nowait和skip_locked是互斥的,同时设置会导致ValueError。     目前

Django之ORM中事务和锁

旧巷老猫 提交于 2020-12-06 05:56:54
ORM 事务: 事务: 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务的特点: 并非任意的对数据库的操作序列都是数据库事务。数据库事务拥有以下四个特性,习惯上被称之为 ACID 特性。 1. 原子性( Atomicity ):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 2. 一致性( Consistency ):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。 3. 隔离性( Isolation ):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 4. 持久性( Durability ):已被提交的事务对数据库的修改应该永久保存在数据库中。 事务开启的三种方式: 全局开启(中间件): settings. py 文件配置: DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.sqlite3' , 'NAME' : 'day062' , 'USER' : 'root' , 'PASSWORD' : '' , 'HOST' : '127.0.0.1' , 'PORT' : 3306 , # 'OPTIONS': { # 'init_command': "SET

Python爬虫-字体反爬-猫眼国内票房榜

瘦欲@ 提交于 2020-12-06 05:27:18
偶然间知道到了字体反爬这个东西, 所以决定了解一下. 目标:    https://maoyan.com/board/1 问题:   类似下图中的票房数字无法获取, 直接复制粘贴的话会显示 □ 等无法识别的字符, 且网页源码中该类数字均被 . 之类的字符串代替. 解决: 出现这种情况的原因是因为网页字体是在 CSS3 @font-face 规则中定义的, 我觉得这种字体就类似描点连线那种方式绘制出来的. 因为定义规则是动态随机获取的, 不能保证每次都是一个字体文件. 如下: 可以看到, 同一数字所对应的字符是不一样的, 所以我们也就动态下载实时字体文件, 具体分析. 虽然每次对应的字符可能不一样, 但是可以发现同一数字的字形是一样的, 也就是"描点的坐标"应该相同. 事实证明在这个例子中是确实如此. 如下: 同一数字对象里的这些值是一样的. 既然找到问题所在和规律了, 就可以直接开始写代码了. 1 import re 2 from urllib.request import urlretrieve, urlopen 3 from fontTools.ttLib import TTFont 4 5 6 def process_font(url): 7 # loc.woff是事先下载好的字体文件 8 # 可以通过font1.saveXML()来了解文件的结构,

python -- DNS处理模块dnspython

核能气质少年 提交于 2020-12-06 03:15:21
简介 dnspython – 是python实现的一个DNS工具包,利用其查询功能来实现dns的服务监控及解析结果的校验 安装dnspython pip install dnspython 使用 常见的DNS解析类型包括A、MX、NS、CNAME (1)A记录的查询,实例如下: import dns.resolver domain = raw_input('Please input an domain: ') A = dns.resolver.query(domain, 'A') for i in A.response.answer: for j in i.items: print j.address 运行输入:www.baidu.com,输出结果如下: (2)MX记录 domain = raw_input('Please input an domain: ') MX = dns.resolver.query(domain, 'MX') for i in MX: print 'MX preference =', i.preference, 'mail exchanger =', i.exchange 运行输入:163.com,输出结果如下: (3)NS记录 print '*************NS****************' domain = raw_input(

《极客时间--算法面试》--动态规划

岁酱吖の 提交于 2020-12-06 02:29:02
题目: 70、爬楼梯 思路:   一、采用回溯法,递归+记忆化   二、采用动态规划,时间复杂度为O(n),采用递推的方式     要找到DP的状态和DP方程。    代码(动态规划): class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ ''' 方式一:传统的方式 if n==0 or n==1 or n==2: #边界值判定 return n men = [1,2] #递推初始值 for i in range(2,n): #从第二个开始到最后 men.append(men[i-1]+men[i-2]) #将前面两个值相加最为后一个值 return men[n-1] #返回最后的一个结果 ''' ''' 方式二:python的编码方式较为简洁,直接赋值的 ''' x,y = 1,1 for _ in range(1 ,n): x,y = y,x+ y return y 题目: 120、三角形最小路径和 思路:   一、回溯   二、动态规划     从底层倒推,明确状态转移方程和初始状态。     初始状态是最后一层,转移方程是相邻节点的最小值和当前值相加作为下一个状态的值。 代码: class Solution(object): def minimumTotal