使用redis存储股票数据及近一个月的行情数据
- 性能瓶颈
- redis的使用
- odoo连接redis
- 股票数据的读写
- 结论
性能瓶颈
股票行情对数据的实时性是有要求的,在数据同步时如果都从数据库中查询数据,对于股票行情数据来说是有些慢了,因此我们使用redis来存储常用数据:股票数据及近一个月的行情数据
redis的使用
https://www.runoob.com/redis/redis-install.html
参考菜鸟教程就可以完成在windows(开发环境)及linux(生产环境)的安装和使用。
odoo连接redis
from redis import Redis
class ResConfigSettings(models.TransientModel):
redis_host = fields.Char(string="Redis Host", default="127.0.0.1")
redis_port = fields.Integer(string="Redis Port", default=6379)
redis_db = fields.Integer(string="Redis DB", default=10)
redis_password = fields.Char(string="Redis Password", default="123456")
redis_username = fields.Char(string="Redis Username", default='redis')
def get_redis_conn(self):
"""
获取redis连接
"""
config_id = self.env['res.config.settings'].sudo().search([], limit=1, order='id desc')
if (not config_id.redis_host or not config_id.redis_port or not config_id.redis_password
or not config_id.redis_db):
return None
redis = Redis(host=config_id.redis_host, port=config_id.redis_port, password=config_id.redis_password,
db=config_id.redis_db)
return redis
股票数据的读写
写股票数据。
def btn_update_equity_stock_redis(self):
"""
测试redis
"""
redis_conn = self.env['res.config.settings'].get_redis_conn()
stock_ids = self.env['equity.stock'].search([])
for stock_id in stock_ids:
stock_vals = {
'id': stock_id.id,
'market_id': stock_id.market_id,
}
redis_conn.set(stock_id.code, json.dumps(stock_vals))
读股票数据
redis_conn = self.env['res.config.settings'].get_redis_conn()
stock_vals = redis_conn.get(stock_data['code'])
结论
当需要平凡查询数据库或者数据库的记录非常多时,使用redis可以带来比较好的性能体验。