zoukankan      html  css  js  c++  java
  • day12

    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    一。memcached

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

    Python操作Memcached

    memcached API地址 http://code.google.com/p/memcached/wiki/Clients

    网上流传说Python-API中效率最高的是python-libmemcached,这里居然看到了hongqn(豆瓣首席架构师,后来也得到证实python-libmemcached是豆瓣贡献),看来豆瓣的阳光真的是撒满了Python的各个角落。

    另外还有python-memcached(100%纯Python),python-memcache(据说有内存泄漏问题?),cmemcache(代码多年未更新?)。

    不过由于目前需要中效率并没有太高要求,于是选择了使用最多的python-memcached:

     安装 python-memcached

    easy_install python-memcached

     Python操作memcached

     mport memcache

     mc = memcache.Client(['127.0.0.1:11211'],debug=True)

     mc.set('name','luo',60)

     print mc.get('name') 

    Memcached常用方法 

    memcache其实是一个map结构,最常用的几个函数:

    保存数据

    set(key,value,timeout) 把key映射到value,timeout指的是什么时候这个映射失效

    add(key,value,timeout)  仅当存储空间中不存在键相同的数据时才保存

    replace(key,value,timeout) 仅当存储空间中存在键相同的数据时才保存

     

    获取数据

    get(key) 返回key所指向的value

    get_multi(key1,key2,key3,key4) 可以非同步地同时取得多个键值, 比循环调用get快数十倍

    2.redis

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

     

    1. 安装pyredis

    wget https://pypi.python.org/packages/source/r/redis/redis-2.9.1.tar.gz
    tar xvzf redis-2.9.1.tar.gz
    cd redis-2.9.1
    python setup.py install
     

    2 . 简单的redis操作

    redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。同理,python的redis没有实现se

     
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    >>> import redis
    >>> r = redis.Redis(host='localhost',port=6379,db=0)
    >>> r.set('guo','shuai')
    True
    >>> r.get('guo')
    'shuai'
    >>> r['guo']            
    'shuai'
    >>> r.keys()
    ['guo']
    >>> r.dbsize()         #当前数据库包含多少条数据      
    1L
    >>> r.delete('guo')
    1
    >>> r.save()               #执行“检查点”操作,将数据写回磁盘。保存时阻塞
    True
    >>> r.get('guo');
    >>> r.flushdb()        #清空r中的所有数据

     

     

     

     

     

     

     

     

     

     

    3.rabbitmq

    MQ(Message Queue)即消息队列,一般用于应用系统解耦、消息异步分发,能够提高系统吞吐量。MQ的产品有很多,有开源的,也有闭源,比如ZeroMQ、RabbitMQ、ActiveMQ、Kafka/Jafka、Kestrel、Beanstalkd、HornetQ、Apache Qpid、Sparrow、Starling、Amazon SQS、MSMQ等,甚至Redis也可以用来构造消息队列。至于如何取舍,取决于你的需求。 由于工作需要和兴趣爱好,曾经写过关于RabbitMQ的系列博文,对RabbitMQ的协议、安装、配置、管理、监控、持久化、分布式、高可用、分区、集群、负载均衡等做过详细介绍。这个系列的博文基本上能满足工作中的一般需求。

    4.sqlalchemy

     

    1 安装
    1.1 安装SQLAlchemy
    从 setuptools 安装是非常简单的,只要运行如下命令即可:
    # easy_install SQLAlchemy
    这将会在Python Cheese Shop获取SQLAlchemy的最新版本并安装。或者你也可以使用setup.py安装一个发行包:
    # python setup.py install
    1.2 安装一个数据库API
    SQLAlchemy被设计用于操作一个 DBAPI 实现,包括大多数常见的数据库。如果你有一个支持DBAPI的实现,那么可以跳入下一节。另外SQLite是一个易于使用的数据库,可以快速开始,并且他可以使用内存数据库。如果要使用SQLite,你将会需要:
    •pysqlite – SQLite的Python接口
    •SQLite函数库
    注意在Windows下并不需要SQLite函数库,因为Windows版的pysqlite已经内含了。pysqlite和SQLite可以被安装到Linux或FreeBSD,通过预编译或从源码安装。
    预编译包的地址为:
    http://initd.org/tracker/pysqlite/wiki/PysqlitePackages
    2 快速开始
    2.1 导入
    SQLAlchemy提供了完整的命名空间,只要导入sqlalchemy即可,无需其子包。为了方便使用本教程,我们导入所有命名到本地命名空间:
    >>> from sqlalchemy import *
    2.2 连接到数据库
    导入之后,下一步是连接到需要的数据库,表现为(represent)为一个Engine对象。这个对象处理了连接的管理和特定数据库的操作。下面,我们连接SQLite基于文件的数据库”tutorial.db”
    >>> db=create_engine("sqlite:///tutorial.db")
    创建数据库引擎的更多信息查看”Database Engines”。
    3 SQLAlchemy是两个库的包装
    现在已经完成了安装和连接数据库,可以开始做点实际的事情了。但首先需要有些解释。
    SQLAlchemy的核心有两个完全不同的功能,一个在另一个之上工作。一个是 SQL语言构造器 ,另一个是 ORM 。SQL语言构造器允许调用 ClauseElements 来构造SQL表达式。这些 ClauseElements 可以在编译成字符串并绑定到数据库后用于执行,并返回一个叫做 ResultProxy 的对象,类似于一个结果集对象,但是更象dbapi高版本的 cursor 对象。
    ORM是建立在SQL语言构造器之上的工具集,用于将Python对象映射到数据库的行,提供了一系列接口用于从数据库中存取对象(行)。在ORM工作时,在底层调用SQL语言构造器的API,这些通用的操作有些许的不同。不同的是,你不再使用行,而是使用自定义类的对象来操作。另外,数据库的查询方式也不同,ORM的可以生成大多数的SQL查询,除此之外还可以在类中定义更多操作。
    SA功能强大,无与伦比,只是有两个混合在一起的方法有些复杂。有效的使用SA的方法是先了解这两种不同的工具集,这是两个不同的概念,而大家常常混交SQL语言构造器和ORM。关键的不同是,使用cursor形式的结果集时使用的是SQL语言构造器;而使用类实例进行管理时使用的是ORM。
    本指南首先介绍SQL语言构造器,首先需要声明的数据库信息叫做 table metadata 。本指南包含了一些SQL构造的例子,包括如何有效的使用SQL语言构造器的例子。

  • 相关阅读:
    bzoj 1367
    codeforces 757F
    bzoj 3600
    比赛环境设置
    线段树合并
    BZOJ2105: 增强型LCP
    BZOJ3156: 防御准备
    BZOJ3252: 攻略
    BZOJ2464: 中山市选[2009]小明的游戏
    Beta Round #9 (酱油杯noi考后欢乐赛)乌鸦喝水
  • 原文地址:https://www.cnblogs.com/xpython/p/5152037.html
Copyright © 2011-2022 走看看