在Python中使用Redis数据库

来源:互联网 发布:蘑菇战争2 数据 编辑:程序博客网 时间:2024/05/22 15:05

一、Redis数据库的配置

以windows系统为例,下载Redis安装包解压后,配置redis.windows.conf 文件:

# The filename where to dump the DBdbfilename dump.rdb# The working directory.## The DB will be written inside this directory, with the filename specified# above using the 'dbfilename' configuration directive.# # The Append Only File will also be created inside this directory.# # Note that you must specify a directory here, not a file name.dir .\stock-master\

可以配置数据库的名称和目录,还有其他参数。

建立一个批处理命令start-server.bat,每次启动服务可以指定conf配置。

#start-server.batredis-server  redis.windows.conf

二、Python调用redis

需先通过pip或easy_install安装redis库

1,写数据

python操作代码:

import redisr = redis.Redis(host='127.0.0.1', port=6379)print 'choose redis'# 查数据库大小print '\ndbsize:%s' %r.dbsize()# 看连接print 'ping %s' %r.ping()for idx, row in df.iterrows():    print idx, row    mapStock =  {'code':idx, 'name':row['name']}    # 写入hash表    r.hmset('basic_info:"+idx, mapStock)    #索引    r.sadd(cm.INDEX_STOCK_BASIC, idx)

上述代码实现将获取的DataFrame格式的股票数据,先组装成dict,再写入redis的hash表中。
同时建立索引,将股票编码存入set集合中。

2,读数据

redis采用key-value键值存储,NoSql,查询没有sql那么方便。

#获取所有股票代码codes = r.smembers(cm.INDEX_STOCK_BASIC)#获取某只股票的指定日期范围内的K线keys = r.lrange(cm.INDEX_STOCK_KLINE+code, 0, -1)listSeries = []for key in keys:    if key > date_start and key < date_end:        dict = r.hgetall(cm.PRE_STOCK_KLINE+code +':'+ key)        #_se = pd.Series(dict, index=[cm.KEY_DATE, cm.KEY_OPEN, cm.KEY_HIGH, cm.KEY_CLOSE, cm.KEY_LOW, cm.KEY_VOLUME,cm.KEY_AMOUNT])         _se = pd.Series(dict, index=[cm.KEY_DATE, cm.KEY_CLOSE])         listSeries.append(_se)df = pd.DataFrame(listSeries)

查询每天K线数据,速度非常快。
瓶颈在获取数据后重新组织装配数据,比较耗时,对于一只从2000年到今年的日K线数据,生成DataFrame大概需要2s,对于A股2000多只股票来说,这速度是不能容忍的。

对于即去即用型的数据,用redis存储效率是非常高的。如果取出的value数据,还需进一步加工,而且数据值很大,还是推荐用sql数据库。

0 0
原创粉丝点击