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

    Pyhton浅谈-Python与中间件之Memcache(4) 

    一 、缓存的由来:

      我们使用应用程序时,应用程序通过与数据库进行交互来显示给用户,但是,当用户访问量增加,那么应用程序每秒处理的请求会增多,数据库服务器压力增加(数据量增大,内存增高),数据库就会出现一些问题:查询速度减慢,

    网站出现延迟…,缓存的出现很好的解决了这个问题:

     图 1 应用程序和数据库进行交互

    二、缓存的运行原理:

      如图:当用户发出请求时,应用程序首先去缓存查找数据(2),如果缓存没有(3),那么应用程序回去数据库查找(4),随后返还给应用程序(1),再去缓存缓存一份(2),这样可以较大的增加数据库运行效率。

      

    图 2 缓存的运行原理

    三、Memcache介绍:

      Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

      Memcache特点:

        开源,协议简单;

        高效,C语言开发,基于libevent处理;

        速度快,内存存储;

        C/S架构,TCP连接方便;

        数据存满时,通过LRU (Least Recently Used) 机制进行删除;

    四、Memache安装(以CentOS为例):

      1.安装 :

      yum install -y memcached

      2.查看位置:

      whereis memcached 、 which memcached

      3.查看帮助:

      /usr/bin/memcached -h

      4.启动程序:

      /usr/bin/memcached -p 11211 -m 128m -vv -u root

      -p 端口(默认为11211

      -m 设置的缓存大小

      -vv 打印详情

      -u 用户

      5.存入信息:

      官方指令文档:https://github.com/memcached/memcached/blob/master/doc/protocol.txt

      命令格式:<command name> <key> <flags> <exptime> <bytes>

      <command name> 命令

      <key> 关键字

      <flags> 标志位(为0即可)

      <exptime> 存活时间(0为永久存活)

      <bytes> 大小  注意:需要与下面的存储数据的大小一样,否则会报错

      添加数据:

      set myname 0 60 5

      catt1e(大小为5个Bytes)

      查找数据:

      get myname(key)

      6.退出:

      quit

    五、Python操作—pymemcache:

      如下为Python操作pymemcache,主要实现功能为:存取数据,如若memcache缓存(get_cache)没有,则去get_data里面取,随后将信息缓存(mid_cache),如若缓存有数据,则去缓存里取数据。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:catt1e
    
    
    import time
    import json
    from pymemcache.client.base import Client
    
    
    def get_data():
        '''获取数据
        1. 从mysql获取
        2. 从其他接口获取
        '''
    
        data = {'ch':['ch001','ch002'], 'mudan':['牡丹A','牡丹B']}
        time.sleep(3)
        return data
    
    def show_data(data):
        for k, v in data.items():
            print(k, v) 
    
    
    def mid_cache(k, data):
        '''缓存数据
        '''
        client = Client(('192.168.0.115', 11211))
        ret = client.set(k, json.dumps(data))
        return ret
    
    def get_cache(k):
        '''从k取缓存数据'''
        client = Client(("192.168.0.115", 11211))
        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)
        if data:
            print('from cache...')
            show_data(data)
        else:
            print('no data, 第一次取')
            data = get_data()
            mid_cache(k, data)    
    
    if __name__ == '__main__':
        main()
    

      

      pymemcache官方文档:

      https://pymemcache.readthedocs.io/en/latest/getting_started.html#serialization

  • 相关阅读:
    B. Connecting Universities DFS,无向树
    HDU 5808 Price List Strike Back bitset优化的背包。。水过去了
    uva 6910
    HDU 5778 abs 数学
    Invitation Cards POJ 1511 SPFA || dij + heap
    HDU 2243 考研路茫茫——单词情结 求长度小于等于L的通路总数的方法
    cmd链接mysql
    如何设置远程访问mysql
    ERROR 1045 (28000): Access denied for user'root'@'localhost'(using password:YES)51Testing软件测试网-H*?U)}$h }P6H4H
    String ,StringBuffer,StringBuilder的区别(转)
  • 原文地址:https://www.cnblogs.com/catt1e/p/12570884.html
Copyright © 2011-2022 走看看