RabbitMQ队列
安装 http://www.rabbitmq.com/install-standalone-mac.html
安装python rabbitMQ module
1 2 3 4 5 6 7 |
|
实现最简单的队列通信
produce
1 import pika 2 connection = pika.BlockingConnection(pika.ConnectionParameters("192.168.244.130",15672)) 3 channel = connection.channel() 4 #声明queue 5 channel.queue_declare(queue=‘hello‘) 6 channel.basic_publish(exchange="", 7 routing_key=‘hello‘, 8 body = ‘Hello World!‘) 9 print("[x] Sent ‘Hello World!") 10 connection.close()
consume
1 import pika 2 3 connection = pika.BlockingConnection(pika.ConnectionParameters("192.168.16.23")) 4 channel = connection.channel() 5 channel.queue_declare(queue="holle",durable=True) 6 def callback(ch,method,properties,body): 7 print(ch,method,properties) 8 print("[x] Received %r" %body) 9 ch.basic_ack(delivery_tag=method.delivery_tag) 10 channel.basic_qos(prefetch_count=1) 11 channel.basic_consume(callback, 12 queue="holle", 13 no_ack=True) 14 15 16 print(‘[*] waiting for messages. to exit press ctrl+c‘) 17 channel.start_consuming()
redis
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
一、Redis安装和基本使用
1 2 3 4 |
|
启动服务端
1 |
|
启动客户端
1 2 3 4 5 |
|
二、Python操作Redis
1 2 3 4 5 6 7 |
|
1、操作模式
redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
1 2 3 4 5 6 7 8 |
|
2、连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
1 2 3 4 5 6 7 8 9 10 |
|
3、操作
String操作,redis中的String在在内存中按照一个name对应一个value来存储。如图:
set(name, value, ex=None, px=None, nx=False, xx=False)set name alex 在Redis中设置值,默认,不存在则创建,存在则修改 参数: ex,过期时间(秒) px,过期时间(毫秒) nx,如果设置为True,则只有name不存在时,当前set操作才执行 xx,如果设置为True,则只有name存在时,岗前set操作才执行
setnx(name, value) setnx aaa juck 设置值,只有name不存在时,执行设置操作(添加)
set(name, value, time) set ccc ccc ex 30 # 设置值 # 参数: # time_ms,过期时间(数字毫秒 或 timedelta对象
mset(*args, **kwargs) 批量设置值 如: mset(k1=‘v1‘, k2=‘v2‘) 或 mget({‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘})
get(name) 获取值
mget(keys, *args) 批量获取 如: mget(‘k‘,‘k2‘) 或 r.mget([‘k‘, ‘k2‘])
getset(name, value) getset k2 k2 设置新值并获取原来的值