redis读取文件夹数据_Python 与MongoDB和Redis集群的读写

bd5ea51b1cae00fb1849975c1fd33b36.png

将数据读写到MongoDB

MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. MongoDB is developed by MongoDB Inc. and licensed under the Server Side Public License (SSPL).--wiki

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可拓展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。---百度百科

这里需要使用到pymongo,没有安装的需要先安装:pip install pymongo.

或者在jupyter里面用代码安装:

!pip install pymongo

一、连接MongoDB

比如我们要对图片中的local database下面的test数据集进行读写操作。

3d5aea1ff53e1c27fd8e7f0ac6e44e9a.png

先和它建立连接:

from pymongo import MongoClient
client=MongoClient(host='localhost',port=27017)
db=client.local     #temp 里面的 local database
collection=db.test  #local database里面的test dataset

二、写入数据到MongoDB,insert documents

插入一条数据使用:Collection.insert_one({:,:,:,:})

插入多条数据使用:collection.insert_many([])

collection.insert_one({"baby_id":1,"gender":'F',"hair_color":"yellow"})

只插入一条数据的结果:

f9ab504f564b9ec7a70485b45717eb08.png
collection.insert_many([{"baby_id":2,"gender":'M',"hair_color":"black"},
                       {"baby_id":3,"gender":'M',"hair_color":"brown"},
                       {"baby_id":4,"gender":'F',"hair_color":"red"}])

插入多条数据的结果:

af36639ac463f19830c4521ae193a650.png

三、从MongDB读取数据 Query Documents

使用find读取数据,find()括号里面设置查找条件,第一个{}里面具体的查找条件,第二个{}里面设置是否要保存该变量,0为不需要,1为需要读取该变量。如果对于某个时间的变量要求,大于或等于某个时间,需对该变量设置时间条件,"$gte"表示greater than and equal。

#例如
collection.find({"Time":{"$gte":'2020-12-01 00:00:00'}},{"_id":0,"Time":1,"temperature":1})

下面对步骤二中插入的数据进行读取:

dic=collection.find({"baby_id":2},{"_id":0,"baby_id":1,"gender":1})
list1=[]
for item in dic:
    list1.append(item)
pd.DataFrame(data=list1)

a0b984f3eb31467083994e837ccab1b2.png

查看MongoDB数据库,可以使用Studio 3T:

8b9a704fe2f9ae268a230cc5e6081add.png

de0d69087a77a82fa5a3c9c8dcdf2950.png

Studio3t官网:https://studio3t.com/

将数据读写到Redis

Redis is an open source(BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, list, sets,sorted setswith range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.--https://redis.io/

Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

key指的是数据库中的键:比如下图中db0,0库中的文件如下所示,其中包含animal文件夹,该文件夹下面包含flow文件夹,flow文件夹下面包含tag_on文件夹,再下一级可以看到一个像钥匙一样的图标,这个钥匙就是一个key,这个可以用“animal:flow:tag_on:49346410xxx”表示,里面存储的内容就是这个key的value,组合在一起就是key:value对。

62066dcbc06392b04be1220e76c2f513.png

一、连接Redis

先安装redis哈,jupyter里面安装的话,直接在代码前面加感叹号就可以了。

!pip install redis

连接单结点:

import redis
r=redis.Redis(host='172.168.1.199',port=6379)

连接集群:

from rediscluster import RedisCluster
startup_nodes=[{"host":"172.168.1.158","port":"7000"},{"host":"172.168.1.158","port":"7001"},
               {"host":"172.168.1.159","port":"7000"},{"host":"172.168.1.159","port":"7001"},
               {"host":"172.168.1.160","port":"7000"},{"host":"172.168.1.160","port":"7001"}]
rc=RedisCluster(startup_nodes=startup_nodes,decode_responses=True)

二、写入数据到Redis集群

如果把整个表写到一个key下面,语句写法如下,但是查看的时候会很慢。

r.set(key,dataframe.to_json())

所以可以做循环,把每行写到一个key里面,查看的时候就不会卡了。

写入到单节点:

for i in range(len(markid_temp_ok)):
    key='animal:flow:tag_on:'+markid_temp_ok['mark_id'][i]
    r.set(key,markid_temp_ok[i:i+1].to_json()) #前面建立连接时单节点 r

写入到集群:

for i in range(len(markid_temp_ok)):
    key='animal:flow:tag_on:'+markid_temp_ok['mark_id'][i]
    rc.set(key,markid_temp_ok[i:i+1].to_json()) #前面连接连接时集群 rc

三、从Redis集群中读取数据

基本语句如下:

r.get('key')

如果存的是json格式,那么读完之后需要转化格式可以直接使用pandas中的module,获得该key下面的内容。

pd.read_json(r.get(“key”))
#单节点
pd.read_json(r.get("animal:flow:tag_on:493464105479311360"))

f28f5a4456a643e6658abe59093122f8.png
#集群,结果都是一样的
pd.read_json(rc.get("animal:flow:tag_on:493464105479311360"))

07b2933c2e1d96cd9fdfb282d45aaf85.png

查看redis集群可以使用Redis Desktop Manager

d1027916a31f739bdc09a987f0b7e0aa.png

Redis Desktop Manager 官网:https://rdm.dev/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值