首页 > 代码库 > python RabbitMQ队列/redis

python RabbitMQ队列/redis

RabbitMQ队列  

安装 http://www.rabbitmq.com/install-standalone-mac.html

安装python rabbitMQ module 

1
2
3
4
5
6
7
pip install pika
or
easy_install pika
or
源码
  
https://pypi.python.org/pypi/pika

实现最简单的队列通信

技术分享

 

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()
View Code

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()
View Code

 

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
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
tar xzf redis-3.0.6.tar.gz
cd redis-3.0.6
make

启动服务端

1
src/redis-server

启动客户端

1
2
3
4
5
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

二、Python操作Redis

1
2
3
4
5
6
7
sudo pip install redis
or
sudo easy_install redis
or
源码安装
 
详见:https://github.com/WoLpH/redis-py

1、操作模式

redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

1
2
3
4
5
6
7
8
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import redis
 
= redis.Redis(host=‘10.211.55.4‘, port=6379)
r.set(‘foo‘‘Bar‘)
print r.get(‘foo‘)

2、连接池

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import redis
 
pool = redis.ConnectionPool(host=‘10.211.55.4‘, port=6379)
 
= redis.Redis(connection_pool=pool)
r.set(‘foo‘‘Bar‘)
print r.get(‘foo‘)

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 
设置新值并获取原来的值

  

 

python RabbitMQ队列/redis