一、Redis数据库的配置
以windows系统为例,下载Redis安装包解压后,配置redis.windows.conf 文件:
# The filename where to dump the DB
dbfilename 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.bat
redis-server redis.windows.conf
二、Python调用redis
需先通过pip或easy_install安装redis库
1,写数据
python操作代码:
import redis
r = 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数据库。