热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Pyhton浅谈Python与中间件之Redis

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Pyhton浅谈-Python与中间件之Redis相关的知识,希望对你有一定的参考价值。Pyhto

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Pyhton浅谈-Python与中间件之Redis相关的知识,希望对你有一定的参考价值。



Pyhton浅谈-Python与中间件之Redis(5) 

一、Redis也可以作为缓存中间件使用:

  Redis是典型的NoSQL的代表,也可以使用Python操作Redis,在此不做过多介绍,见博客:https://www.cnblogs.com/catt1e/p/12565345.html,此博客主要介绍Redis作为缓存中间件;

 

二、Redis与Memcache的比较:

  

 

 

 

 

三、Python处理Redis:
  此代码与上篇文章Memcache大同小异,但是Redis支持可以从不同的数据库中存取数据(代码中表现为db_type),代码主要功能与上篇文章Python对于pymemcache的处理大同小异,在此不做赘述,直接看代码:、


#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:catt1e
import time
import json
import redis
def get_data(db_type=\'tv\'):
\'\'\'获取数据
1. 从mysql获取
2. 从其他接口获取
\'\'\'
data = None
if db_type == \'tv\':
data = {\'ch\':[\'ch001\',\'ch002\'], \'mudan\':[\'牡丹A\',\'牡丹B\']}
elif db_type == \'pc\':
data = {\'lenovo\':[\'le-001\',\'le-002\'], \'dell\':[\'dell-1\',\'dell-2\']}
time.sleep(3)
return data
def show_data(data):
for k, v in data.items():
print(k, v)
def mid_cache(k, data, db_type="tv"):
\'\'\'缓存数据
\'\'\'
try:
client = None
if db_type == \'tv\':
client = redis.StrictRedis(host=\'localhost\', port=6379, db=0)
elif db_type == \'pc\':
client = redis.StrictRedis(host=\'localhost\', port=6379, db=1)
ret = client.set(k, json.dumps(data))
return ret
except Exception as e:
print(e)
return False
redis_type = {
"tv": 0,
"pc": 1
}

def get_cache(k, db_type="tv"):
\'\'\'从k取缓存数据\'\'\'
client = redis.StrictRedis(host=\'localhost\', port=6379, db=redis_type[db_type])
try:
data = client.get(k)
return json.loads(data)
except Exception as e:
print(e)
return False
def main():
k = \'tv\'
data = get_cache(k, db_type="pc")
if data:
print(\'from cache...\')
show_data(data)
else:
print(\'no data, 第一次取\')
data = get_data(db_type="pc")
mid_cache(k, data, db_type="pc")
if __name__ == \'__main__\':
main()

  

四、Redis订阅和发布功能:

  1.订阅和发布功能:

  

 

   2.Pyhton操作Redis订阅和发布功能:

   代码主要功能介绍:此代码分为redis_pub.py(发布端)和redis_sub.py(订阅端)两个,发布端可以在频道channels上发布信息,订阅端会监听发布端的消息,随后并输出所监听到的消息:


#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:catt1e
# redis_pub.py 发布端

import redis
client = redis.Redis()
channels = ["Jay", "SHE", \'Beyond\']
def main():
print("可以发布到任意一个频道:")
for i in channels:
print(i)
while True:
ch = input("输入频道:")
print("输入发送的信息(q:退出):")
msg = input(\'>>\')
if msg == \'q\':
break
client.publish(ch, msg)
if __name__ == \'__main__\':
main()

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:catt1e
# redis_sub.py订阅端
import redis
client = redis.StrictRedis()
channels = ["Jay", "SHE", \'Beyond\']
# 得到pubsub对象
# 通过对象订阅频道
# listen监听频道
def subscribe():
s1 = client.pubsub()
s1.subscribe(channels)
s2 = client.pubsub()
s2.subscribe(\'SHE\')

s3 = client.pubsub()
s3.subscribe(channels[:2])
show_msg(s1, \'s1\')
show_msg(s2, \'s2\')
show_msg(s3, \'s3\')
def show_msg(sub_obj, sub_name):
for msg in sub_obj.listen():
if msg["type"] == "message":
print(f\'{sub_name} get {msg["data"].decode()} from {msg["channel"]}\')
def main():
subscribe()
if __name__ == \'__main__\':
main()

  



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • yum安装_Redis —yum安装全过程
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Redis—yum安装全过程相关的知识,希望对你有一定的参考价值。访问https://redi ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 达人评测 酷睿i5 12450h和锐龙r7 5800h选哪个好 i512450h和r75800h对比
    本文介绍了达人评测酷睿i5 12450h和锐龙r7 5800h选哪个好的相关知识,包括两者的基本配置和重要考虑点。希望对你在选择时提供一定的参考价值。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
author-avatar
荷塘一只嫩藕
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有