开云色碟网站被封锁_一日一技:带落伍时分的缓存、全文搜索、频率放手怎么作念?
发布日期:2023-10-30 04:58 点击次数:79
[[442671]]澳门捕鱼
在畴昔的著作里面,我给群众先容了使用Python自带的LRU缓存收尾带有落伍时分的缓存:一日一技:收尾存落伍时分的LRU缓存。也讲过倒排索引:使用倒排索引极速擢升字符串搜索效劳。但这些代码对入门者来说相比难,写起来可能会出错。
网站被封锁骨子上,这些功能其实皆不错使用Redis来收尾,而且每个功能只需要1分钟就能作念出来。全文搜索功能在搜索英文的技巧,甚而不错智能识别拼写诞妄的问题。
要收尾这些功能,只需要作念两件事:
装置RedisPython装置第三方库:walrus
装置完成以后,咱们来望望它有多轻佻:
带落伍时分的缓存湮灭器咱们思收尾一个湮灭器,它湮灭一个函数。让我在1分钟内屡次探听函数的技巧,使用缓存的数据;稀奇1分钟以后才再行实行函数的里面代码:
火博士灭火器import 澳门捕鱼time import datetime from walrus import Database db = Database() cache = db.cache() @cache.cached(timeout=60) def test(): print('函数竟然运行起来') now = datetime.datetime.now() return now now = test() print('函数复返的数据是:', now) time.sleep(10) # 恭候10秒,此时会使用缓存 print('函数复返的数据是:', test()) time.sleep(5) # 恭候5秒,此时如故使用缓存 print('函数复返的数据是:', test()) time.sleep(50) # 让时分稀奇缓存的时分 print('函数复返的数据是:', test())
运行后果如下图所示:
全文搜索咱们再来望望全文搜索功能,收尾起来也很轻佻:
from walrus import Database db = Database() search = db.Index('xxx') # 这个名字磨蹭取 poem1 = 'Early in the day it was whispered that we should sail in a boat, only thou and I, and never a soul in the world would know of this our pilgrimage to no country and to no end.' poem2 = 'Had I the heavens’ embroidered cloths,Enwrought with golden and silver light' poem3 = 'to be or not to be, that is a question.' search.add('docid1', poem1) # 第一个参数不成重迭 search.add('docid2', poem2) search.add('docid3', poem3) for doc in search.search('end'): print(doc['content'])
运行后果如下图所示:
博彩市场的合法化是大势所趋,皇冠体育将继续为广大玩家提供优质的博彩服务。要是你思让他兼容拼写诞妄,那么不错把search = db.Index('xxx')改成search = db.Index('xxx’, metaphone=True),运行后果如下图所示:
不外缺憾的是,这个全文搜索功能只复旧英文。
频率放手咱们有技巧要放手调用某个函数的频率,简略网站的某个接口要放手IP的探听频率。这个技巧,使用walrus也不错收缩收尾:
import time from walrus import Database db = Database() rate = db.rate_limit('xxx', limit=5, per=60) # 每分钟只可调用5次 for _ in range(35): if rate.limit('xxx'): print('探听频率太高!') else: print('还莫得触发探听频率放手') time.sleep(2)
运行后果如下图所示:
其中参数limit暗意能出现些许次,per暗意在多万古天职。
rate.limit唯有传入交流的参数,那么就会初始查抄这个参数在设定的时天职出现的频率。
开云色碟欧博棋牌游戏注册送彩金你可能以为这个例子并不成讲解什么问题,那么咱们跟FastAPI结合一下,欧博备用网址网址用来放手IP探听接口的频率。编写如下代码:
from walrus import Database, RateLimitException from fastapi import FastAPI, Request from fastapi.responses import JSONResponse db = Database() rate = db.rate_limit('xxx', limit=5, per=60) # 每分钟只可调用5次 app = FastAPI() @app.exception_handler(RateLimitException) def parse_rate_litmit_exception(request: Request, exc: RateLimitException): msg = {'success': False, 'msg': f'请喝杯茶,休息一下,你的ip: {request.client.host}探听太快了!'} return JSONResponse(status_code=429, content=msg) @app.get('/') def index(): return {'success': True} @app.get('/important_api') @rate.rate_limited(lambda request: request.client.host) def query_important_data(request: Request): data = '垂危数据' return {'success': True, 'data': data}
上头代码界说了一个全局的特别阻扰器:
@app.exception_handler(RateLimitException) def parse_rate_litmit_exception(request: Request, exc: RateLimitException): msg = {'success': False, 'msg': f'请喝杯茶,休息一下,你的ip: {request.client.host}探听太快了!'} return JSONResponse(status_code=429, content=msg)
在总共代码的任何地点抛出了RateLimitException特别,就会插足这里的逻辑中。
使用湮灭器@rate.rate_limited湮灭一个路由函数,何况这个湮灭器要更伙同函数。路由函数收受什么参数,它就收受什么参数。在上头的例子中,咱们只收受了request参数,用于得回探听者的IP。发现这个IP的探听频率稀奇了放手,就抛出一个RateLimitException。于是前领域说好的全局阻扰器就会阻扰RateLimitException特别,阻扰到以后复返咱们界说好的报错信息。
zh皇冠网官网在频率鸿沟内探听页面,复返浩繁的JSON数据:
频率稀奇设定的值以后,探听页面就会报错,如下图所示:
回来walrus对redis-py进行了很好的二次封装,用起来稀奇顺遂。除了上头我提到的三个功能外,它还不错收尾几行代码生成布隆过滤器,收尾自动补全功能,收尾绵薄图数据库等等。群众不错探听它的官方文档了解注视使用讲解[1]。
参考文件[1] 官方文档了解注视使用讲解: https://walrus.readthedocs.io/en/latest/getting-started.html
皇冠hg86a
本文转载自微信公众号「未闻Code」,不错通过以下二维码暖和。转载本文请有关未闻Code公众号。
皇冠信用盘登3出租金融案件反映出的共性问题,主要有:民间借贷纠纷存在收取高息现象,出借人和借款人证据意识不足、维权意识不高等问题仍存在。金融借款合同纠纷存在息费收取不合理、线上业务举证能力弱、银行宣布贷款提前到期方式不规范等问题。保证保险合同纠纷存在保险公司未就保险费率、款项扣除等事项进行详细说明等问题。
艺术
相关资讯