• python浅学【网络服务中间件】之Memcached


    一、缓存的由来:

    • 提升性能

      绝大多数情况下,select 是出现性能问题最大的地方。一方面,select 会有很多像 join、group、order、like 等这样丰富的语义,而这些语义是非常耗性能的;另一方面,大多 数应用都是读多写少,所以加剧了慢查询的问题。

      分布式系统中远程调用也会耗很多性能,因为有网络开销,会导致整体的响应时间下降。为了挽救这样的性能开销,在业务允许的情况(不需要太实时的数据)下,使用缓存是非常必要的事情。

    • 缓解数据库压力

      当用户请求增多时,数据库的压力将大大增加,通过缓存能够大大降低数据库的压力。

    二、memcached的特点:

    什么是Memcached:

    Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

    Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

    Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

    Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

    本质上,它是一个简洁的key-value存储系统。

    一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

    特点如下:

      (1)开源------协议简单
      (2)高效------C语言开发 基于libevent处理
      (3)速度快------内存存储
      (4)c/s架构------tcp连接方便
      (5)数据存满时------通过lru机制进行删除

        注意:数据存储在内存中,断电消失,不是数据持久化数据库

    支持语言:

    • Perl
    • PHP
    • Python
    • Ruby
    • C#
    • C/C++
    • Lua
    • 等等

    三、memcached的安装和常见操作:

    安装(centos7安装) yum install memcached

    daemon后台启动

    $ /usr/local/bin/memcached -p 11211 -m 64m -d

    这里使用的memcached启动选项的内容如下。
    选项说明

    -p 使用的TCP端口。默认为11211

    -m 最大内存大小。默认为64M

    -vv 用very vrebose模式启动,调试信息和错误输出到控 制台

    -d 作为daemon在后台启动

    上面四个是常用的启动选项,其他还有很多,通过 $ /usr/local/bin/memcached –h 查看帮助

    关于memcached的简单操作(增删改查)不做书写,请移步学习:https://www.runoob.com/memcached/memcached-tutorial.html

    四、使用python对memcached进行操作:

    pip install pymemcache  #安装库

    连接memcahed服务:

    from pymemcache.client.base import Client
    
    client = Client(('localhost', 11211))  #创建连接
    client.set('some_key', 'some_value')  #将key的value上传缓存
    result = client.get('some_key')  #获取key的值

    简单的序列化操作:

    tv = {'ch':['ch1','ch2'], 'mudan':['md1', 'md2']}
    cli.set('menu_tv', json.dumps(tv)) 

    然后一顿操作(简单的操作)如下:

     1 import time
     2 import json
     3 from pymemcache.client.base import Client
     4  
     5  
     6 # 演示缓存流程
     7 def get_data():
     8     '''生成数据'''
     9     data = {'ch': ['ch1', 'ch2'], 'md': ['mdA', 'mdB']}
    10     time.sleep(3)
    11     return data
    12  
    13  
    14 def show_data(data):
    15     '''显示数据内容'''
    16     for k, v in data.items():
    17         print(k, v)
    18  
    19  
    20 def mind_data(k, data):
    21     '''将数据加入到缓存中'''
    22     client = Client(('192.168.66.189', 11211))
    23     res = client.set(k, json.dumps(data))
    24     return res
    25  
    26  
    27 def get_cache(k):
    28     '''获取数据'''
    29     try:
    30         client = Client(('192.168.66.189', 11211))
    31         data = json.loads(client.get(k))
    32         return data
    33     except Exception as e:
    34         print(e)
    35         return False
    36  
    37  
    38 if __name__ == '__main__':
    39     k = 'test'
    40     data = get_cache(k)
    41     if data:
    42         show_data(data)
    43     else:
    44         data = get_data()
    45         show_data(data)
    46         mind_data(k, data)
  • 相关阅读:
    wikioi 1514 and ZJOI2006 书架
    HDU 4762 Cut the Cake(公式)
    HDU 4762 Cut the Cake(公式)
    呵呵,cnblog排名进4000了,留念一下!
    呵呵,cnblog排名进4000了,留念一下!
    电子书下载:C# Database Basics
    电子书下载:C# Database Basics
    (原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)
    (原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)
    部署GlusterFS及Heketi
  • 原文地址:https://www.cnblogs.com/riyir/p/12550350.html
Copyright © 2020-2023  润新知