用MongoDB进行数据的缓存
1.背景-基金详情页的数据
- 同一天,不管什么时间段去查询,数据都是一样的,因为都是去查询昨天不变的数据
- 然后每次查询都是通过爬虫去爬取其它网站的数据,就会存在网络延时和爬取次数过多会存在IP封禁问题
- 为了减少访问目标网站的次数,同时因为数据是一天内不变的,所以考虑将数据进行缓存
2.挑选数据库
因为详情页的数据是json格式,适合用MongoDB进行缓存
数据格式:
{"data":[
{"a_year":"-2.68%","date":"2023-03-10","fall_down":"-1.94%","half_a_year":"-14.28%","one_month":"-4.95%","price":"1.6690","three_month":"-5.97%"},
{"a_year":"-","date":"2023-03-09","fall_down":"-0.82%","half_a_year":"-","one_month":"-","price":"1.7020","three_month":"-"},
{},{}...
]}
3. 缓存步骤
1.把需要缓存的数据写进一个表中 tb_日期_模块名称 (eg: tb_0223_detail_data )
# 缓存的数据格式
{
{"id":"用户的标识符1","result":"需要缓存的数据"},
{"id":"用户的标识符2","result":"需要缓存的数据"},
...
}
eg:
{
{"id":"基金代号1","result":"需要缓存的数据"},
{"id":"基金代号2","result":"需要缓存的数据"},
...
}
2.查询数据的时候先去判断是否有缓存数据,没有的话再调用爬取去爬取数据,然后再重新写入MongDB
直接通过基金代号去取数据(取当天的表名),当有找到数据就会返回对应的值,没有数据则返回None
client = MongoClient(host='xxxx', port=xxxx)
# 连接demo数据库
db = client.fund
# 连接表(集合)
table_object = db[table_name]
# 通过id去寻找这条数据,然后返回这条数据result对应的值
for x in table_object.find({id: data_value}):
return x[result]
3.通过定时任务(APScheduler)去删除过期的表名
删除表命令:db[表名].drop()
4.数据缓存后的效果
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:用MongoDB进行数据的缓存
本文作者:伟生
发布时间:2023-03-19, 16:53:10
最后更新:2023-03-19, 17:04:53
原始链接:http://yoursite.com/2023/03/19/db_03_mongodb_05_cache/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。