怎么正确设置mongodb和redis开发环境与生产环境的配置参数

我们写代码时,一般会先在自己电脑上进行开发,然后把代码部署到服务器上。如果一段代码涉及到读写数据库,或者访问某些其他的线上服务接口,那么在开发时,为了不影响线上环境,我们一般会把测试环境的数据库和线上环境的数据库分开。

例如,我们的程序需要访问 MongoDB 和 Redis,于是,在代码里面,我们可能会这样写:

import pymongoimport redishandler = pymongo.MongoClient('mongodb://username:password@127.0.0.1:27017').db.colclient = redis.Redis(host='127.0.0.1', port=6379, password='xxxx')

登录后复制  

等你要把程序部署到线上环境的时候,你手动把代码里面的MongoDB 连接参数、Redis连接参数修改成线上环境的参数。然后把代码提交到 Git上,并在服务器拉下最新代码并部署。

然而,当你想修改一个新功能并重新进行测试时,你需要将这些连接参数修改为测试环境的参数,并在自己的电脑上进行操作。如果你忘记修改直接就运行,可能会把脏数据写入到线上环境中。

于是,可能有人会使用环境变量来控制读取的参数,例如:

import osimport redisimport pymongoif os.getenv('env', 'prod'):  # 线上环境     MONGODB_URI = 'mongodb://username:password@xx.xx.xx.xx:27017'    REDIS_PARAMS = {'host': 'xx.xx.xx.xx', 'port': 6379, 'password': 'xxxx'}else:  # 测试环境    MONGODB_URI = 'mongodb://username:password@127.0.0.1:27017'    REDIS_PARAMS = {'host': '127.0.0.1', 'port': 6379, 'password': 'xxxx'}handler = pymongo.MongoClient(MONGODB_URI).db.colclient = redis.Redis(**REDIS_PARAMS)

登录后复制  

这样一来,你不需要手动修改数据库的连接参数,只要把线上环境的环境变量env设置为prod,那么程序部署到线上环境,它自动就会使用线上数据库的参数。只要 其他地方,例如你电脑上,环境变量env不为prod或者干脆不存在这个环境变量,那么自动就会使用开发环境的参数。

这样做,确实避免了忘记修改参数导致的问题,但还有另一个问题:如果其他人也有这个 Git 源的访问权限,那么他们就会知道怎么连接线上环境的数据库。甚至擅自操作线上环境的数据,造成安全隐患或者隐私泄露。

为了更加安全,可以采用使用专门的文件存放配置参数,程序从该文件中读取参数的方法。线上环境这个文件放线上参数,开发环境,这个文件写开发参数。这个配置文件不上传到 Git中。

例如,我们创建一个 config.json 文件,它的内容为:

{    "MONGODB_URI": "mongodb://username:password@127.0.0.1:27017",    "REDIS_PARAMS": {"host": "127.0.0.1", "port": 6379, "password": "xxxx"}}

登录后复制  

然后我们的代码这样修改:

import osimport jsonimport redisimport pymongoCONFIG_PATH = '/etc/config/config.json'if not os.path.exists(CONFIG_PATH):    print('配置文件不存在,自动使用测试环境参数!')    MONGODB_URI = 'mongodb://username:password@127.0.0.1:27017'    REDIS_PARAMS = {'host': '127.0.0.1', 'port': 6379, 'password': 'xxxx'}else:    with open(CONFIG_PATH, encoding='utf-8') as f:        config = json.load(f)        MONGODB_URI = config['MONGODB_URI']        REDIS_PARAMS = config["REDIS_PARAMS"]    handler = pymongo.MongoClient(MONGODB_URI).db.colclient = redis.Redis(**REDIS_PARAMS)

登录后复制

以上就是怎么正确设置mongodbredis开发环境与生产环境的配置参数的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2030716.html

(0)
上一篇 2025年2月23日 21:57:20
下一篇 2025年2月23日 21:57:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Redis中键和字符串常用命令有哪些

    Redis 相关知识 redis的默认端口号为6379 默认16个数据库,类似数组下标从0开始,初始默认使用0号库。使用命令select 来切换数据库。 如: select 8。统一密码管理,所有库同样密码。 dbsize查看当前数据库的k…

    2025年2月23日 数据库
    000
  • redis使用实例分析

    第一part:原生jedis连接redis 首先我们为要先了解,我们在原先使用mysql的时候,用jdbc连接数据库。同理这里我们连接redis,就要使用jedis。 第一步:新建java项目,导包 新建java项目,导包     redi…

    2025年2月23日 数据库
    100
  • Python Redis数据处理的方法

    1. 前言 Redis:Remote Dictionary Server,即:远程字典服务,Redis 底层使用 C 语言编写,是一款开源的、基于内存的 NoSql 数据库 由于 Redis 性能远超其他数据库,并且支持集群、分布式及主从同…

    2025年2月23日
    100
  • 宝塔中ThinkPHP框架使用Redis的方法是什么

    redis是一种常用的非关系型数据库,主要用作数据缓存,数据保存形式为key-value,键值相互映射。它的数据存储跟mysql不同,它数据存储在内存之中,所以数据读取相对而言很快,用来做高并发非常不错。 关于redis的安装,在服务器或者…

    2025年2月23日
    100
  • springboot连接不上redis怎么解决

    第一种 查看防火墙是否打开6379端口 查看防火墙状态 systemctl status firewalld 登录后复制 如果防火墙没有启动的话。可以选择直接看后面两种方法。 或者就是打开防火墙,然后继续下面的步骤: 开启端口 firewa…

    2025年2月23日
    100
  • redis延迟双删策略怎么使用

    通常情况下,我们会优先选择使用redis缓存来降低数据库访问负担。但是也会遇到以下这种情况:大量用户来访问我们系统,首先会去查询缓存, 如果缓存中没有数据,则去查询数据库,然后更新数据到缓存中,并且如果数据库中的数据发生了改变则需要同步到r…

    2025年2月23日
    100
  • Redis+SpringBoot案例分析

    一、项目环境 前端技术栈:vue-cli 前端软体:WebStorm 2020.3 前端样式: Bootstrap 后端技术栈:SpringBoot 后端软体:IntelliJ IEDA2019 JavaJDK:1.8 服务器:阿里云Cen…

    2025年2月23日 数据库
    100
  • SpringBoot整合Redis缓存如何实现

    SpringBoot支持的缓存组件 在SpringBoot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springframework.cache.Cache和org.springframework.cache.Ca…

    2025年2月23日 数据库
    100
  • 怎么用Redis实现搜索接口

    对于后端开发人员来讲使用一条sql就可以实现列表查询的接口,如果查询条件很复杂,表库设计不合理,会导致查询很困难,这篇文章和大家分享一下用redis实现搜索接口。 下面以一个例子开始,这是某购物网站的搜索条件,如果让你实现这样的一个搜索接口…

    2025年2月23日 数据库
    100
  • 如何使用Redis的streams

    起源 自从在 redis 4.0 引入模块后,用户开始思考如何解决这些问题。其中一个用户 timothy downs 通过 irc 和我说道: 我计划给这个模块增加一个事务日志式的数据类型 —— 这意味着大量的订阅者…

    数据库 2025年2月23日
    100

发表回复

登录后才能评论