python——操做Redis

  在使用django的websocket的时候,发现web请求和其余当前的django进程的内存是不共享的,猜想django的机制多是每来一个web请求,就开启一个进程去与web进行交互,一次来达到利用cpu多核的目的。可是这样一来,内存共享的问题就变成了焦点。这周试了一下redis,果真很好用。html

  redis是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,redis支持各类不一样方式的排序。与memcached同样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了master-slave(主从)同步。python

  上面的话好像很专业的样子,这里咱们简单的理解为,其实redis就是一个消息中间件,能够做为多个进程的消息中转站,是比以前咱们用的manage模块更方便自由的共享内存。git

  redis的安装和启动本身到网上去找,因为操做系统等环境差别,这里很少赘述。咱们要使用python操做redis,还须要一个redis模块。能够直接使用pip安装。github

  假设咱们已经启动了redis,也安装好了相关的python模块,redis的启动默认端口是6379,如今就来看看redis应该如何使用。web

1.基本操做redis

  以前咱们已经知道,redis是以key-value的形式存储的,因此咱们在操做的时候。首先咱们将redis所在主机的ip和发布端口做为参数实例化了一个对象r,而后执行set('name','Eva_J'),这样咱们就在内存中存储了一个key为name,值为‘Eva_J’的项。咱们能够理解为{'name':'Eva_J'},当咱们要读取的以后,只须要get('name'),就会获得'Eva_J'的值。django

2.链接池缓存

redis-py使用connection pool来管理对一个redis server的全部链接,避免每次创建、释放链接的开销。默认,每一个Redis实例都会维护一个本身的链接池。能够直接创建一个链接池,而后做为参数Redis,这样就能够实现多个Redis实例共享一个链接池。服务器

三、管道websocket

redis-py默认在执行每次请求都会建立(链接池申请链接)和断开(归还链接池)一次链接操做,若是想要在一次请求中指定多个命令,则可使用pipline实现一次请求指定多个命令,而且默认状况下一次pipline 是原子性操做。

四、发布订阅

发布者:服务器

订阅者:Dashboad和数据处理

Demo以下:

定义一个redishelper类,创建与redis链接,定义频道为fm92.4,定义发布public及订阅subscribe方法。

订阅者:导入刚刚咱们写好的类,实例化对象,调用订阅方法,就可使用while True接收信息了。

发布者:导入刚刚咱们写好的类,实例化对象,调用发布方法,下例发布了一条消息‘hello’

更多与共享内存相关的内容参见:http://www.cnblogs.com/wupeiqi/articles/5132791.html

更多与redis相关的内容参见:https://github.com/andymccurdy/redis-py/

相关文章
相关标签/搜索