zoukankan      html  css  js  c++  java
  • Pyhton学习-Python与中间件之Redis(5)

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

      

  • 相关阅读:
    第一课:数据库介绍篇
    爬虫day03 cast
    python excel
    爬虫 cast_day05_多进程_多线程_协程_selenium的使用
    进程_线程_协程回顾!
    进程_线程_协程回顾 2!
    day 06 爬虫
    看正月点灯笼老师的笔记 —动态规划2.1
    动态规划——放苹果

  • 原文地址:https://www.cnblogs.com/catt1e/p/12570986.html
Copyright © 2011-2022 走看看