用MongoDB进行数据的缓存

  1. 1.背景-基金详情页的数据
  2. 2.挑选数据库
  3. 3. 缓存步骤
  4. 4.数据缓存后的效果

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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏