Python使用Memcache

前戏

  Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象减少读取数据库的次数,从而减小数据库的压力,提高动态,数据库网站的速度。Memcached基于一个存储 键/值对的hashmap。其守护进程是用C编写的,但是客户端可以用任何语言来编程,并通过Memcached协议和守护进程通信。

Memcached安装及基本使用

Memcached服务端的安装

#依赖libevent,先安装
yum install libvent-devel*
#用wget去http://memcached.org下载最新源码
tar -zxvf memcached-1.4.29.tar.gz
#编译安装
./configure && make && make test && sudo make install  

Memcached的启动

memcached -d -m 10 -u root -p 12000 -c 256 -P /tmp/memcached.pid

参数概述:
            -d 启动一个线程;
            -m 分配给Memcached使用的内存数量,单位是MB;
            -u 运行Memcached的用户;
            -l 监听的服务器IP地址(可选)
            -p 设置Memcache监听的端口,最好是1024以上的端口;
            -c 最大运行的并发连接数,默认是1024,按照服务器的负载量来设定
            -P 设置保存Memcached的pip文件

 Memcached的基本操作命令

memcached的操作分为三类:
    存储操作:      set
                  add
                  replace
                  append
                  prepend
                  cas
    获取操作:
                  get
                  gets
    其他命令:
                  delete
                  stats

使用python操作Memcached

在python中使用Memcached,首先安装memcache:install python-memcached

连接使用

import memcache

m = memcache.Client([‘192.168.12.12:8800‘],debug=True)
m.set(‘liu‘,‘qingyang‘)
res = m.get(‘liu‘)
print(res)
#打印qingyang#debug=True表示运行错误时,显示错误信息,生产环境中不需要

集群支持

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

    主机                    权重
192.0.0.1                  1
192.0.0.2                  2
192.0.0.3                  1
#内存主机列表:HostList = ["192.0.0.1","192.0.0.2","192.0.0.2","192.0.0.3"]

set操作

#set:设置一个键值对,如果key不存在,就创建;如果存在,就更新value;
#set_multi:设置多个键值对,如果key不存在,就创建;如果存在,就更新values。

import memcache
m = memcache.Client(["192.0.0.1:8800"],debug=True)
m.set(‘liu‘,111)
m.set_mulit({‘liu‘:111,‘wu‘:222})

get操作

#get 获取一个键值对
#get_multi 获取多个键值对

import memcache

m = memcache.Client([‘192.0.0.1:8800‘],debug=True)
print(m.get(‘liu‘))
print(m.get_multi([‘liu‘,‘wu‘]))

add操作

#add 添加一个键值对,如果key已经存在,操作将会报错:MemCached: while expecting ‘STORED‘, got unexpected response ‘NOT_STORED‘
#add 和 set 都是存储操作,但是set可以更新value,add不可以。
import memcache

m = memcache.Client([‘192.0.0.1:8800‘],debug=True)
m.set(‘liu‘,‘111‘)
m.add(‘wu‘,222)     #如果已经存在‘wu‘的key,会报错

replace操作

#replace 替换,修改key的值,如果key不存在,则报错:MemCached: while expecting ‘STORED‘, got unexpected response ‘NOT_STORED‘
import memcache

m=memcache.Client([‘192.0.0.1:8800‘],debug=True)
m.replace(‘liu‘,222)
m.replace(‘li‘,333)   #如果不存在‘li‘的key,会报错

delete操作

#delete 删除指定的一个键值对,如果没有指定的key,不会报错
#delete_multi 删除多个键值对
import memcache

m=memcache.Client([‘192.0.0.1:8800‘],debug=True)
m.delete(‘liu‘)
m.delete(‘wu‘)
m.delete_multi([‘liu‘,‘wu‘])

append,prepend操作

#append:修改指定key的值,在值的后面追加数据,无指定key会报异常
#prepend:修改指定key的值,在值的前面插入数据
import memcache

m=memcache.Client([‘192.0.0.1:8800‘],debug=True)
m.append(‘cc‘,‘dd‘)
m.append(‘ds‘,‘dsdsds‘)    #不存在ds,会报异常

m.prepend(‘cc‘,‘aa‘)

decr,incr操作

#incr:自增,将Memcached中的某一个值增加N,(N默认为1),如果值非数字,会报错
#decr:自减,将Memcached中的某一个值减少N,(N默认为1),如果值非数字,会报错
import memcache

m=memcache.Client([‘192.0.0.1:8800‘],debug=True)
m.incr(‘liu‘)
m.decr(‘liu‘,30)

gets cas使用

#为了避免在生产环境中产生脏数据,使用gets和cas,类似MySQL中的事务
import memcache

mc=memcache.Client([‘192.0.01:8800‘],debug=True)
m.set(‘count‘,999)
print(m.gets(‘count‘))
# 如果有人在gets之后和cas之前修改了product_count,那么,下面的设置将会执行失败,抛出异常,从而避免非正常数据的产生
m.cas(‘count‘,998)
#cas也能创建一个不存在key的键值对
m.cas(‘w‘,90)
print(m.gets(‘w‘))
#每次执行gets时,会从memcache中获取一个自增的数字,通过cas去修改gets的值时,会携带之前获取的自增值和memcache中的自增值进行比较,如果相等,则可以提交,如果不想等,那表示在gets和cas执行之间,又有其他人执行了gets(获取了缓冲的指定值), 如此一来有可能出现非正常数据,则不允许修改。

  

原文地址:https://www.cnblogs.com/liuqingyang/p/10987876.html

时间: 2024-10-12 21:59:04

Python使用Memcache的相关文章

Python操作 Memcache、Redis、RabbitMQ

Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. memcached安装: memcached -d -m 10 -u root -l 192.168.132.130 -p

Python操作Memcache

Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memcached安装和基本使用 Memcached安装: 1 wget http://memcached.org/late

Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy、

Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 1.Memcached安装配置 #安装倚赖包 yum install libevent-devel #安装软件 yum -y

python之Memcache使用

简介 Memcached是一个高性能的分布式内存对象缓存系统,用于动态WEB应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态,数据库网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编程,并通过memcached协议与守护进程通信. Memcached安装 服务端安装memcached: 用wget 去http://memcached.org下载最新源码 tar -zxvf m

Python操作 Memcache、Redis、RabbitMQ、SQLAlchemy

Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 安装 yum -y install libevent-devel wget http://memcached.org/lat

使用Python操作memcache

Python连接memcached的库有很多,处于简单以及高效的原则,最终选择了pymemcache, 优点 完全实现了memcached text协议 对于send/recv操作可以配置timeout 支持"noreply"特性,该可行可以先出的提高写的速度 使序列化/反序列化更简单 可以将网络异常,memecached错误当成是缓存丢失 安装pymemcachepip install pymemcache 使用pymemcache 基本操作 from pymemcache.clie

Day11 - Python操作memcache、redis缓存、rabbitMQ队列

本周课前必备: 1. Memcached 2. Python操作Memcached模块: https://pypi.python.org/pypi/python-memcached 3. Redis 4. Python操作Redis模块:pip3 install redis 5. RabbitMQ 6. Python操作RabbitMQ模块:pip install pika http://www.cnblogs.com/wupeiqi/articles/5132791.html

python操作memcache/redis/rabbitmq

数据库操作: - 数据库 - 表 a. 单表 b. 一对多 用户类型: 1 超级用户 2 普通用户 3 二笔用户 用户: 方式器 3(设置数字,约束=外键(表,列)) 刘浩 6 何磊 3 何磊 3 c. 多对多 主机:主机名 .... 1 c1.com 2 c1.com 3 c1.com 4 c1.com 用户表:用户名 .... 1 严选育 2 卢饶 3 泥泞 4 利用三 装B: 用户 主机 时间 4 1 83 4 2 83 4 1 93 4 2 93 3 2 93 相亲: 1 严选育 2 卢

192.168.62.124python运维开发(十一)----python操作缓存memcache、redis

内容目录: 缓存 memcache redis memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memcached安装配置 #安装依赖包 yum install libeve