Python 操作 memcached

一、memcached 简介

许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现数据库的负担加重、数据库响应恶化、 网站显示延迟等不良影响。分布式缓存是优化网站性能的重要手段,大量站点都通过可伸缩的服务器集群提供大规模热点数据缓存服务。通过缓存数据库查询结果,减少数据库访问次数,可以显著提高动态Web应用的速度和可扩展性。

memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。 

二、memcached 常用操作

2.1 准备环境

首先我们在本地或者远程服务器上安装memcached服务,这里我们安装了docker环境,pull了memcached 镜像,然后将服务启在了远程服务器的容器里面。

docker run -d --name test -p $(ifconfig eth1|grep inet |awk '{print $2}'):22222:11211 docker.io/memcached  

接着我们在本地Windows上面进行操作的话,就需要安装 python-memcached 或者 python3-memcached,比如在 PyCharm 中 settings 的操作,如下所示 ( 也可在cmd操作pip install python3-memcached )

2.2 建立连接

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/5/17 22:21
# @Author  : zhouyuyao
# @File    : demon2.py
#!/usr/bin/env python

import memcache

mc = memcache.Client(['xxx.xxx.xxx.xxx:22222'],debug=1)   # 获取一个memcached对象,来操作memcached
#                                              debug=1 开启调试,表示运行出现错误时,可以显示错误信息

mc.set("some_key", "Some value")    
value = mc.get("some_key")
print(value)

# 结果 Some value

python-memcached模块原生支持集群操作,其原理是在内存中维护一个主机列表,且集群中主机的权重值和主机在列表中重复出现的次数成正比。

mc.set('name','zyy')                  # 设置key
mc.set('name','zhouyuyao')            # 设置key,key存在则更新
print(mc.get('name'))                 # 获取key,获取不存在的key,返回None

# 结果 zhouyuyao

2.3 常用方法

1)set方法

set(self, key, val, time=0, min_compress_len=0)
'''     参数解释:
        key表示key的名称
        val表示value
        time表示超时时间,代表永远不过期
'''

2)set_multi方法

set_multi(self, mapping, time=0, key_prefix='', min_compress_len=0)
'''     参数解释:
        mapping:键值对的字典
        time:过期时间
        key_prefix:key的前缀
        min_compress_len:是否压缩
'''
# 如 mc.set_multi({'k1':'zhouyuyao3','k2':'v2'})

3)add方法

add(self, key, val, time=0, min_compress_len=0, noreply=False):
'''     Add new key with value.
        Like L{set}, but only stores in memcache if the key doesn't
        already exist.
        @return: Nonzero on success.
        @rtype: int
     
        add只负责添加元素,如果该key存在了,则会抛出异常
'''

4)replace方法

replace(self, key, val, time=0, min_compress_len=0, noreply=False)
'''
        replace只负责替换元素,如果该key存在了,则会抛出异常
'''

5)get 和 get_multi 方法

get(key):根据key值获取value

get_multi方法:get_multi(self, keys, key_prefix='')
'''
       获取多个key的值,返回的是字典,keys是key的数组
'''

# 如下示例能得到相同的结果
print(mc.get_multi(('k1','k2'),key_prefix=''))
print(mc.get_multi(['k1','k2']))  

# 结果 {'k1': 'zhouyuyao3', 'k2': 'v2'}

6)delete 和 delete_multi 方法

delete(key) 删除某个key

delete_multi(keys) 给定一个keys的数组,把keys里面对应的key和value都删除

7)incr 和 decr 方法


incr方法:incr(self, key, delta=1)   # 递增

mc.set('age','22')
print(mc.incr("age" ,delta=2))

>>> mc.set("counter", "20")   # returns 1, indicating success
        1
        >>> mc.incr("counter")
        21
        >>> mc.incr("counter")
        22

decr方法:decr(self, key, delta=1)   # 递减

print(mc.decr("age" ,delta=2))

注意:memcached是存储在内存中,一旦服务器发生一场或者重启,里面的数据将丢失,因此使用memecached的时候,建议将一些不重要的但经常使用的数据放在里面。

参考资料:

1. https://blog.csdn.net/dutsoft/article/details/71101809 Python项目使用memcached缓存

2. https://www.cnblogs.com/wang-yc/p/5693268.html  Python3之Memcache使用

3. https://www.cnblogs.com/pycode/p/cache.html

4. http://baijiahao.baidu.com/s?id=1590466547756766727&wfr=spider&for=pc

猜你喜欢

转载自my.oschina.net/u/3314358/blog/1814560