作者 Julien Danjou 原文地址:https://realpython.com/blog/python/python-memcache-efficient-caching 译者:首席IT民工 在开发Python程序时,实现缓存是重要的一环。缓存技术能够在很大程度上提升性能,从而避免数据的重复计算,或是数据库访问过慢的问题。 Python内置了实现缓存的技术,包括简单的字典和诸如functools.lru_cache之类更加完整的数据结构。后者可以利用“最近最少使用”算法限制缓存的大小,做到任意缓存。 然而,依照定义,这些数据结构仅限于Python进程内部使用。这可能对大规模分布式应用导致问题,因为当你的程序的多个副本在大规模平台上运行时,使用这种本地内存中的数据结构将不允许对所缓存的内容进行共享。 因此,如果你的系统是基于分布式网络的,就需要缓存也基于分布式网络。现如今大量的网络服务器提供了缓存能力–我们在how to use Redis for caching with Django (如何使用Redis实现Django缓存)一文中已经提到过。 在这篇教程中你将看到,memcached是实现分布式缓存的一个很好的选择。首先是对基本的memcached使用方法的简介,然后你会学习到一些高级方法,比如检查和设置(cache and set),以及使用后备缓存以避免传统的缓存性能问题。 安装memcached Memcached提供了[很多平台的版本](https://github.com/memcached/memcached/wiki/Install) : 如果你运行的是Linux,安装命令是 apt-get install memcached 或 yum install memcached 你既可以通过预构造的安装包安装,也可以从源文件安装 对于macOS,使用Homebrew安装是最简单的。只要有Homebrew包管理器,直接运行 brew install memcached 对于Windows, 你需要自行编译memcached,或者寻找预编译的版本 安装完毕后,运行memecached命令即可启动它: $ memcached 在正式使用memcached的功能之前,你还需要安装一个memcached的客户端库。下面介绍安装的方法,以及基本的缓存访问操作。 使用Python存储和检索缓存值 即便你从未使用过memcached,也很容易理解。基本来说,memcached提供了一个超大的网络字典。这个字典的几个属性不同于经典的Python字典: 键和值都必须是bytes(字节) 到了过期时间后,键和值将被自动删除 因此,与memcached交互的两个基本操作是:set和get。正如你可能猜到了,他们分别表示给某个键赋值,和从某个键取值。 我个人偏爱的与memcached交互的Python库是 pymemcache,推荐使用。它用pip就可以安装: $ pip install pymemcache 以下代码显示了如何连接memcached和如何在你的Python程序中将它用作网络分布式缓存: memcached网络协议十分简单,其实现运行起来也非常快,使得它在数据存储上很管用。换作其他技术,这些数据要么访问起来很慢,要么需要重新计算。 这个例子简单明了,却演示了键值的跨网络存储,以及程序的多个分布式副本如何来访问键值。很简单,却很强大。这是很棒的迈向程序优化的第一步。 缓存数据的自动过期 在memcached中存储数据时,你可以设置过期时间,即mecached保存键和值的最长时间,单位是秒。到期以后,memcached会自动从缓存中删除他们。 […]