• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
Redis-深入了解
发布日期:2016-4-15 16:4:58

  Redis-深入了解

  今天的主题是:

  1.   redis-py深入了解
  2.   redis-py StrictRedis类与Reids类区别
  3.   redis-py 连接方式
  4.   redis-py pipeline方式
  5.   reids-py pub/sub 发布与订阅
  6.   redisco深入了解
  7.     mysql深入了解

  本期介绍redis-py

  一、开始

  >>> import redis

  >>> r = redis.StrictRedis(host='localhost', port=6379, db=0)

  >>> r.set('name', 'quxl')

  True

  >>> r.get('name')

  'quxl'

  二、 API 参考

  Redis的官方文档做了很多事情,并且详细的解释了每个命令。redis-py提供两个类,一是Redis,二是StrictRedis,用于实现Redis的命令。StrictRedis则用于实现大部分官方的命令,并且使用官方的语法与命令(比如,SET命令对应与StrictRedis.set方法)。当然也有例外,如下面所示:

  1.   SELECT : 没有实现。出于底层线程安全考虑。
  2.   DEL : ‘del’ 是python的关键字,因此redis-py 以’delete’代替。
  3.   CONFIG GET|SET : 分别以config_get or config_set 实现。
  4.   MULTI/EXEC : 以Pipeline的一部分实现。Pipeline的默认行为是MULTI/EXEC的封装。默认情况下Pipline的操作是原子操作,要改变这种行为可以传入transaction=False。
  5.   SUBSCRIBE/LISTEN: 与Pipeline类似。PubSub类实现了该功能。调用Redis 客户端 实例的pubsub方法你将会得到PubSub类的实例,你可以订阅或监听频道消息。PubSub 的使用后续详细讲解。

  变化就是上面这5点。Redis是StrictRedis的子类,重写了一些方法,调整了参数,入下面这3点。使之更Pythonic。

  1.   LREM:参数 ‘num’ 和 ‘value’ 的顺序交换了一下,cli是 lrem queueName 0 ‘string’ 。 这里的0时所有的意思。 但是Redis这个类,把控制和string调换了。
  2.   ZADD:实现时 score 和 value 的调换了下顺序。
  3.   SETEX: time 和 value 的调换了下顺序。

  更多的信息请参考Redis-py官网文档

  三、连接

  python-py连接redis-server 共有如下5种:

  第1种:ConnectionPool(连接池):

  默认情况下,Connection 是一个普通的 TCP 连接。

  r = redis.StrictRedis(host="loaclhost",port=7369,db=1) #默认情况会产生一个连接

  第2种:

  UnixDomainSocketConnection(UNIX Domain Sockets)

  >>> r = redis.Redis(unix_socket_path='/tmp/redis.sock')#以UNIX doamin Sockets连接

  第3种: 连接池:

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

  >>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

  >>> r = redis.Redis(connection_pool=pool) #Redis 类以连接池连接redis-server

  >>> r = redis.StrictRedis(connection_pool=pool) #Strict 类以线连接池连接redis-server

  第4种: redis的pipeline机制

  默认情况下一次pipline操作就是一次原子操作,要么都成功要么都失败,与事物类似。

  import redis

  pool = redis.ConnectionPool(host='localhost', port=7369)

  r = redis.Redis(connection_pool=pool)

  pipe = r.pipeline()

  pipe.set('one', 'first')

  pipe.set('two', 'second')

  pipe.execute()

  pipe.set('one'. 'first').rpush('list', 'hello').rpush('list', 'world').execute()

  要改变这种方式,可以传入transaction=False,

  pipe = r.pipeline(transaction=False)

  第5种: Pub/Sub 订阅与发布

  Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能。基于事件的系统中的Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:

  •     订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;
  •     发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。

  import redis

  r = redis.StrictRedis()

  pb = r.pubsub()

  pb.subscribe('quxl')

  for msg in pb.listen():

  print msg

  import redis

  r = redis.StrictRedis()

  r.publist('quxl','我好困')

  此时监听者就会得到如下响应:

  {'pattern': None, 'type': 'message', 'channel': 'quxl', 'data': '\xe6\x88\x91\xe5\xa5\xbd\xe5\x9b\xb0'}

  四、参考资料:

以下是参考资料,若想要更详细的信息,请参阅下面的网址内容:

  [1]:https://github.com/andymccurdy/redis-py

  [2]:http://blog.sina.com.cn/s/blog_62b832910100xok2.html

  [3]:http://redis-py.readthedocs.org/en/latest/

  [4]:http://blog.csdn.net/stevenliyong/article/details/5305066

以后会更新一些mysql的信息,欢迎阅读。