第二章,了解Mongodb保存数据

  Mongodb对于每次插入的数据没有要求,字段可以随便变动,字段类型可以随意变动。

Mongodb可以并发插入上万条文档,这是传统关系型数据库不能望其项背的。

1.从队列Queue到Redis

  在某些场景下,使用队列可以提高程序的运行性能,但是如何选择合适的队列也需要仔细考虑。

2.了解“生产者、消费者”模式

  厨师是生产者,负责生产,顾客是消费者,负责消费。厨师和顾客各做各的事,传菜窗口就是队列,它把生产者与消费者联系在一起。

3实例、使用python实现队列。

使用python自带queue对象实现队列:

1,使用python实现一个简单生产者,消费者模型

2,使用python的queue对象做消息队列。

在python使用多线程实现生产者与消费者的程序中,可以使用再带的queue对象作为消费者和生产者的沟通的队列。

 在代码中,生产者负责产生两个数字,消费者负责把两个数字相加。

producer生产者
import random
import time
import redis
import json from threading import Thread class Producer(Thread):
def __init__(self):
super().__init__() # 调用Thread的初始化对象
self.queue = redis.Redis() def run(self):
while True:
a = random.randint(0, 10)
b = random.randint(0, 10)
print(f"生产者生产了两个数字:{a},{b}")
self.queue.rpush('producer',json.dumps((a,b)))
time.sleep(2) producer = Producer()
producer.start()
while True:
time.sleep(1)

  

 consumer消费者
import random
import time
import redis
import json from threading import Thread class Consumer(Thread):
def __init__(self):
super().__init__() # 调用Thread的初始化对象
self.queue = redis.Redis() def run(self):
while True:
name_tuple = self.queue.blpop('producer')
a,b =json.loads(name_tuple[1].decode())
print(f"消费者消费了一组数,{a}+{b}={a+b}")
time.sleep(random.randint(0, 10)) consumer = Consumer()
consumer.start()
while True:
time.sleep(1)

左手Mongodb右手Redis的更多相关文章

  1. 左手Mongodb右手Redis 第一章,进入Mongodb和Redis的世界

    ---恢复内容开始--- 1,为什么要使用非关系型数据库,关系型数据库咋滴,不能用嘛? 存在即合理,非关系型数据库的出现,那说明关系型数据库不适用了. 非关系型数据库(NOSQL)-->Not ...

  2. 左手Mongodb右手Redis redis操作

    set key value  设置key的值 get key 取得key的值 decr key 值会减一 incr key 值会加一 decrby key value ,会让key的值减少value. ...

  3. 左手Mongodb右手Redis 通过python连接mongodb

    首先需要安装第三方包pymongo pip install pymongodb """ 通过python连接mongodb数据库 首先需要初始化数据库连接 "& ...

  4. 左手Mongodb右手Redis 第三章mongdb操作

    mongodb查询操作 1.查询操作 db.getCollection('example_data_1').find({})  查询所有的信息,相当于mysql中的select * from tabl ...

  5. [原]分享一下我和MongoDB与Redis那些事

    缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...

  6. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  7. Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法

    ➠更多技术干货请戳:听云博客 如下是我工作中的记录,介绍的是linux系统下NoSQL:MongoDB和Redis的安装过程和遇到的问题以及解决办法: 需要的朋友可以按照如下步骤进行安装,可以快速安装 ...

  8. Mongodb 和Redis 的相同点和不同点

    MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同.MongoDB建议集群部署,更多的考虑到集群 ...

  9. MongoDB与Redis的比较

    MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同. MongoDB建议集群部署,更多的考虑到集 ...

随机推荐

  1. LeetCode 230. Kth Smallest Element in a BST 动态演示

    返回排序二叉树第K小的数 还是用先序遍历,记录index和K进行比较 class Solution { public: void helper(TreeNode* node, int& idx ...

  2. hdu6570Wave (暴力求解)

    Problem Description Avin is studying series. A series is called "wave" if the following co ...

  3. Go-内存To Be

    做一个快乐的互联网搬运工- 逃逸分析 逃逸分析的概念 在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针. 它涉及到指针分析和形状分析. 当一个变量(或对 ...

  4. 获取jQuery DataTables 的checked选中行

    $(function () { var  tabel = $('#userlist').DataTable({        destroy: true, //Cannot reinitialise ...

  5. Js类的静态方法与实例方法区分以及jQuery如何拓展两种方法

    上学时C#老师讲到对象有两类方法,静态方法(Static)和实例方法(非Static),当时不理解静态是为何意,只是强记. 后来从事前端工作,一直在对类(即对象,Js中严格来说没有类的定义,虽众所周知 ...

  6. jvm学习(3)方法区、堆、对象存储位置

    方法区 方法区,Method Area, 对于习惯在HotSpot虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区称为“永久代”(Permanent Generation),本质上两者并不等价, ...

  7. P4158[SCOI2009]粉刷匠

    题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被 ...

  8. luoguP3384 [模板]树链剖分

    luogu P3384 [模板]树链剖分 题目 #include<iostream> #include<cstdlib> #include<cstdio> #inc ...

  9. REINDEX - 重建索引

    SYNOPSIS REINDEX { DATABASE | TABLE | INDEX } name [ FORCE ] DESCRIPTION 描述 REINDEX 基于存储在表上的数据重建索引, ...

  10. ssh 操作 esxi 基本命令

    1.查看虚拟机: vim-cmd vmsvc/getallvms 会显示当前esxi上的虚拟机数量,没一个都有编号. 2.停用虚拟机:vim-cmd vmsvc/power.suspend + 之前命 ...