python redis订阅_Python 学习笔记 - Redis

Redis 和Memcached类似 也是一个开源的内存存储系统,存储格式也是通过键值对的方式。不过和memcached比起来,memcached的value只支持字符串,而redis支持字符串,列表,集合,hash等等;这些数据类型都支持push/pop,add/remove等操作,而且都是原子性的,也就是类似数据库的事物特征一样,所有的操作要么全部完成,要么全部失败,然后回滚到之前的状态。

现在来看看他的简单使用和发布订阅的功能。

服务器安装[root@sydnagios ~]# wget http://download.redis.io/releases/redis-3.0.6.tar.gz

[root@sydnagios ~]# tar xzf redis-3.0.6.tar.gz

[root@sydnagios ~]# cd redis-3.0.6/

[root@sydnagios redis-3.0.6]# make

装好的界面如下,使用默认的配置文件,他的访问端口是6379make[1]: Leaving directory `/root/redis-3.0.6/src'

[root@sydnagios redis-3.0.6]# src/redis-server

24344:C 07 Nov 10:40:21.763 # Warning: no config file specified, using the default confif

24344:M 07 Nov 10:40:21.764 * Increased maximum number of open files to 10032 (it was or.

_._

_.-``__ ''-._

_.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 64 bit

.-`` .-```.  ```\/    _.,_ ''-._

(    '      ,       .-`  | `,    )     Running in standalone mode

|`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379

|    `-._   `._    /     _.-'    |     PID: 24344

`-._    `-._  `-./  _.-'    _.-'

|`-._`-._    `-.__.-'    _.-'_.-'|

|    `-._`-._        _.-'_.-'    |           http://redis.io

`-._    `-._`-.__.-'_.-'    _.-'

|`-._`-._    `-.__.-'    _.-'_.-'|

|    `-._`-._        _.-'_.-'    |

`-._    `-._`-.__.-'_.-'    _.-'

`-._    `-.__.-'    _.-'

`-._        _.-'

`-.__.-'

24344:M 07 Nov 10:40:21.766 # WARNING: The TCP backlog setting of 511 cannot be enforced.

24344:M 07 Nov 10:40:21.766 # Server started, Redis version 3.0.6

24344:M 07 Nov 10:40:21.766 # WARNING overcommit_memory is set to 0! Background save may.

24344:M 07 Nov 10:40:21.766 # WARNING you have Transparent Huge Pages (THP) support enab.

24344:M 07 Nov 10:40:21.766 * The server is now ready to accept connections on port 6379

然后别忘记打开防火墙端口[root@sydnagios ~]# firewall-cmd --add-port=6379/tcp --permanent

success

[root@sydnagios ~]# systemctl restart firewalld

接下来用同一个目录下的客户端程序测试一下,成功设置和获取数据[root@sydnagios redis-3.0.6]# src/redis-cli

127.0.0.1:6379> set foo bar

OK

127.0.0.1:6379> get foo

"bar"

127.0.0.1:6379>

现在看看Python下如何调用。

首先安装redis模块C:\WINDOWS\system32>pip install redis

Collecting redis

Using cached redis-2.10.5-py2.py3-none-any.whl

Installing collected packages: redis

Successfully installed redis-2.10.5

第一个例子:import redis

r=redis.Redis(host='sydnagios',port=6379)

r.set('name','John')

print(r.get('name'))

-------

b'John'

除了直接连接 也可以通过连接池连接,默认每个redis实例有自己的连接池,通过这种方式,可以多个实例共享一个连接池import redis

pool=redis.ConnectionPool(host='sydnagios',port=6379)

r=redis.Redis(connection_pool=pool)

print(r.get('name'))

redis和memcached比起来,因为他支持多种数据结构,因此对应的操作函数也很多,几乎是memcached的10倍

批量设置,批量获取pool=redis.ConnectionPool(host='sydnagios',port=6379)

r=redis.Redis(connection_pool=pool)

r.mset(name='kevin',age=14)

print(r.mget('name','age'))

-----------

[b'kevin', b'14']

自增import redis

pool=redis.ConnectionPool(host='sydnagios',port=6379)

r=redis.Redis(connection_pool=pool)

r.incrby('age',10)

print(r.get('age'))

-------

b'24'

删除import  redis

r=redis.Redis(host='sydnagios',port=6379)

r.delete('set1')

Hash批量操作import redis

pool=redis.ConnectionPool(host='sydnagios',port=6379)

r=redis.Redis(connection_pool=pool)

r.hmset('computer',{'Macbook':20000,'Surface3':5000,'iPhone7':9000})

print(r.hmget('computer','Macbook'))

--------

[b'20000']

list操作import  redis

r=redis.Redis(host='sydnagios',port=6379)

r.lpush('list1','apple')

r.lpush('list1','pear')

print(r.llen('list1'))

print(r.lpop('list1'))

print(r.llen('list1'))

------

2

b'pear'

1

set操作,集合的元素不可以重复import  redis

r=redis.Redis(host='sydnagios',port=6379)

r.sadd('set1','orange')

r.sadd('set1','mango')

print(r.scard('set1'))

print(r.smembers('set1'))

---------

2

{b'mango', b'orange'}

管道

默认redis-py在执行一次操作请求的时候会自动连接,然后断开;我们可以通过管道,一次性传入多条操作然后执行。# !/usr/bin/env python

# -*- coding:utf-8 -*-

import redis

pool = redis.ConnectionPool(host='sydnagios', port=6379)

r = redis.Redis(connection_pool=pool)

# pipe = r.pipeline(transaction=False)

pipe = r.pipeline(transaction=True)

r.set('name', 'alex')

r.set('age', 16)

pipe.execute()

因为redis的函数实在太多 这里就不一一赘述了。

现在来看一个redis的使用场景,发布和订阅。

简单的说,发布者可以对一个频道发布数据,然后凡是订阅了这个频道的人都可以收到信息。

s3.pyimport redis

class RedisHelper:

def __init__(self):

self.__conn = redis.Redis(host='sydnagios')

def publish(self, msg, chan):

self.__conn.publish(chan, msg)

return True

def subscribe(self, chan):

pub = self.__conn.pubsub()

pub.subscribe(chan)

pub.parse_response()

return pub

s4.py(订阅者)import s3

obj = s3.RedisHelper()

data = obj.subscribe('fm111.7')

print(data.parse_response())

s5.py(发布者)import s3

obj = s3.RedisHelper()

obj.publish('alex db', 'fm111.7')

先执行订阅者的代码,进入等待状态,然后执行发布者的程序,对指定的channel发送数据‘alex db’,订阅者一方会收到以下数据[b'message', b'fm111.7', b'alex db']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

egret中loadingUI的自定义

loadingUI中是加载资源,此时如果想自定义loadingUI界面,那么此刻正在加载的图片肯定不能用了。 解决方法就是使用服务器资源 直接加载服务器资源就好了 class LoadingUI extends egret.Sprite { public constructor(){ super(); this.c…

python不支持的数据类型有achar bint cfloat dlist_第1篇:Cython的数据类型(第二部分)

Cython的C指针与C一样,尽管指针性与变量而不是类型相关联,但可以在类型或变量附近声*号。%%cythoncdef int *acdef int *b但这样在变量a,b写在一行,cython编译器会发出警告的信息,因此建议每个变量单独声明%%cythoncdef int *a,*bCython中的指针的解引操…

java 调用dll 方法 postmessage实现后台模拟按键_VB实现模拟键盘及模拟鼠标(后台操作)...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼接下来来研究下模拟鼠标模拟鼠标的常数整理,如下:WM_MOUSEFIRST 0x0200 //移动鼠标时发生WM_MOUSEMOVE 0x0200 //移动鼠标时发生,同WM_MOUSEFIRSTWM_LBUTTONDOWN 0x0201 //按下鼠标左键WM_LBUTTO…

【micropython】用python来进行BadUSB的USB-HID测试(含无线控制)

转载请注明:小五义http://www.cnblogs.com/xiaowuyi QQ群:64770604 本文以TPYBoardv101开发板为例讲解了利用micropython进行BadUSB的usb-HID设备测试的主要方法,使用mt7681模块进行了一个简单的实验,实现了手机摇控键盘输入的测…

php返回类中方法,php如何获取类中所有的方法名

php获取类中所有的方法名的方法:可以利用【get_class_methods()】函数来获取,【get_class_methods()】函数可以返回指定类中所有的方法名,并且会将方法名保存到数组中。【相关学习推荐:php编程(视频)】php获取类所有方法名的方法&…

C#学习之向量运算符重载

//未重载运算符,但编译通过;C#不允许重载运算符‘’,但如果重载‘’运算符,编译器会自动使用‘’运算符的重载来执行‘’运算符的操作; //‘-’、‘*’、‘&’和‘/’等所有赋值运算都遵循此规则; 1、若…

如何安装php5.5,源码安装php5.5

centos6.6首先上传php-5.5.10至服务器安装依赖环境yum -y install gcc gcc-c autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-d…

PHP 表单文件上传的原理,php多文件上传功能实现原理及代码

今天对多图片上传功能小小的研究了一下,把下面的代码整理出来,方便以后自己使用以及供大家交流1、upload.html页面,即先是input typefile的文件:图片上传第一张图片第二张图片第三张图片第四张图片第五张图片2、do_upload.php页面…

php的c方法,thinkphp的c方法的使用

这篇文章主要介绍了关于thinkphp的c方法的使用,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下用过thinkphp的朋友都知道,C()方法在整个框架中用的非常普遍,C方法的实现非常简单,但是功能非常…

Fiddler中session的请求/响应类型与图标对照表

转载于:https://www.cnblogs.com/chengchengla1990/p/5681978.html

php打印矩阵,PHP实现顺时针打印矩阵(螺旋矩阵)的方法示例

这篇文章主要介绍了PHP实现顺时针打印矩阵(螺旋矩阵)的方法,涉及PHP基于数组遍历、运算模拟打印实现螺旋矩阵功能的相关操作技巧,对PHP感兴趣的朋友可以参考下本篇文章。本文实例讲述了PHP实现顺时针打印矩阵的方法。分享给大家供大家参考,具体如下:问题…

NOIP2014 uoj20解方程 数论(同余)

又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0a1xa2x^2..anx^n0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数&#x…

php transfer-encoding: chunked,php – 使用chunked transfer encoding和gzip

我最近开始在我的网站上使用gzip,它在除Opera之外的所有浏览器上都起到了一种魅力作用,它给出了一个错误,即由于数据损坏而无法解压缩内容.从我可以从测试和谷歌搜索中收集到的,使用gzip和chunked传输编码可能是一个问题.请求像css文件这样的小文件时没有错误这一事实也指向了这…

@override

目录 用处 作用 注意 用处: 继承抽象类,必须实现抽象方法,方法上要加override 实现接口时,必须实现接口里定义的方法,方法上要加override 作用: 可以检查方法签名的拼写错误 改变父类中的一些行为 Override…

java实现语音发送,Java实现发送手机短信语音验证功能代码实例

这篇文章主要介绍了java实现发送手机短信语音验证功能代码实例,www.cppcns.com文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下利用第三方平台可以实现发送手机短信验证码和语音验证码的功能,本文使用…

c++父类和子类转化致命的代码错误

最近在工作中,出现了严重的代码错误,对象的基类和子类的继承,代码大致如下: class A { };class B : public A { }void main() {A* a;(用于子类对象来进行赋值) new 子类;//错误代码如下B* b (B*) a;b.方法; }//在这个…

JAVA获得天气json数据的方法,获取从天气预报接口返回回来的json数据

WampServer集成环境安装与配置实习到了第三个礼拜了,原来我们小组是以开发php为主的,我们项目的服务器也是用php做的,因此我觉得很有必要学一下php的相关知识,首先当然是搭建环境了,写篇博客分享下经验. 目录: 一.软件下载 二 ...C++与Lua交互(三)通过上一篇…

大专学的pHp找什么工作,大专毕业能做什么工作 毕业都去干嘛了

大专毕业能做什么工作,大专毕业后都去干嘛了,我梳理了基本信息,看来一下!大专毕业能做什么工作专科生毕业之后从业的职位基础包含了社会发展的各个方面。一般能够从业自身技术专业有关的工作中,如果有做生意的技能&…

SpringMVC启动过程详解(li)

通过对SpringMVC启动过程的深入研究,期望掌握Java Web容器启动过程;掌握SpringMVC启动过程;了解SpringMVC的配置文件如何配置,为什么要这样配置;掌握SpringMVC是如何工作的;掌握Spring源码的设计和增强阅读…

fusioncharts json java,FusionCharts使用教程:利用XML/JSON属性加载外部LOGO

在使用FusionCharts图表时,你可以在运行时加载外部Logo并显示于图表中。Logo可以是GIF/JPEG/PNG或SWF文件。你可以使用chart元素的logoURL属性来加载一个Logo。XMLJSON{"chart":{ "yaxisname":"Sales Figure", "caption":&…