1、memcached介绍

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

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

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

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

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

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

memcached分布式缓存服务器的特点:协议简单、基于libevent的事件处理、内置内存存储方式、memcached不互相通信的分布式

2、Memcached安装和基本使用

Memcached 支持许多平台:Linux、FreeBSD、Solaris、Mac OS,也可以安装在Windows上。

linux系统安装memcached首先要安装Libevent库:

sudo apt-get install libevent libevent-deve          自动下载安装(Ubuntu/Debian)
yum install libevent libevent-devel 自动下载安装(Redhat/Fedora/Centos)

安装memcached:

sudo apt-get install memcached     #ubuntu/debian
yum install memcached #redhat/fedora/centos
portmaster databases/memcached #freeBSD

memcached命令的运行:

$ /usr/local/memcached/bin/memcached -h    #获得帮助

如果使用自动安装memcached命令位于/usr/local/bin/memcached。

启动选项:

-p <num>   TCP监听端口(default: 11211)
-U <num>    UDP监听端口(default: 11211, 0 is off)
-s <file>    UNIX套接字路径侦听
-a <mask>    UNIX套接字的访问掩码,八进制(默认值:0700)
-l <addr>    侦听接口地址默认为所以地址可以指定主机加端口可以使用逗号分隔多个地址
-d    作为守护进程运行
-r   最大文件描述符
-u <username>   指定运行用户
-m <num>    最大内存(默认为64 MB)
-M    内存耗尽时返回错误而不删除项目
-c <num>    最大同时连接数默认为1024
-k    锁定所有分页内存
-v    显示错误或警告事件
-vv    相信错误
-vvv    详细错误信息及内部状态转换
-h    打印此帮助
-i    打印内存缓存和许可证
-P <file>    指定PID文件,只与-d选择一起使用
-f <factor>    块大小生长因子,默认值为1.25
-n <bytes>    为键值标志的最小空间,默认为48
-L    使用大内存页,增加的内存页大小可以减少TLB命中数提高性能
-D <char>    使用<char>作为密钥前缀和IDS之间的分隔符
-t <num>    使用的线程数,默认为4
-R    每个事件的最大请求数默认为20
-C   禁用CAS的使用
-b <num>    设置积压队列限制默认值1024
-B   绑定协议——ASCII、二进制或AUTO(默认)之一
-I    重写每个板页的大小。调整最大项目大小(默认值:1MB,MI:1K,MAX:128M)
-S    打开SASL认证
-o    逗号分隔的扩展或实验选项列表

[root@python bin]# memcached -d -m  -u nobody -l 192.168.146.129 -p  -c  -P /tmp/memcached.pid
[root@python bin]# netstat -lntup|grep
tcp 192.168.146.129: 0.0.0.0:* LISTEN /memcached
udp 192.168.146.129: 0.0.0.0:* /memcached

memcached存储命令:
set命令用于将value存储在指定的key键中,如果set的key已经存储,该命令可更新该key所对应的原来数据,实现更新的作用
set key flags exptime bytes [noreply]
key:键值key-value结构中的key,用于查找缓存值
flags:可以包括键值对的整理参数,客户机使用它存储关于键值对的额外信息
exptime:在缓存中保存键值对的时间长度,以秒为单位0表示永远
bytes:在存储中存储的字节数
noreply:该参数告知服务器不需要返回数据
value:存储的值

set www
panjiayua
STORED
get www
VALUE www
panjiayua
END

add 命令用于将 value(数据值) 存储在指定的 key(键) 中

add web
junai
STORED

replace 命令用于替换已存在的 key(键) 的 value(数据值)

replace web
aijun
STORED
get web
VALUE web
aijun
END

append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据

append web   

STORED
get web
VALUE web
aijun1314

prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据

prepend web
im
STORED
get web
VALUE web
imaijun1314
END

memcached查找命令:

get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空
gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
delete 命令用于删除已存在的 key(键)
incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作

memcached统计命令:

stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等
stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)
stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats sizes 命令用于显示所有item的大小和个数;该信息返回两列,第一列是 item 的大小,第二列是 item 的个数
flush_all 命令用于清理缓存中的所有 key=>value(键=>值) 对;该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作

3、python操作memcached

import memcache
#链接memcached服务器,指定IP和端口,debug表示显示错误信息
mc = memcache.Client(['192.168.146.129:11211'],debug=True)
#设置键值对
mc.set('foo','pythonTomemcache')
#查看键值
print(mc.get('foo'))

add:添加一个键值对,如果存在key,重复执行add则异常

mc.add('k1','v1')

replace: 修改某个key的值,如果key不存在,则异常

mc.replace('k2','v2')

set:设置一个键值对,如果key不存在,则创建,如果key存在则修改

mc.set('k3','v3')

set_multi:设置多个键值对,如果key不存在,则创建,如果key存在,则修改

mc.set_multi({'key1':'value1','key2':'value2'})

delete:在memcached中删除指定的一个键值对

mc.delete('key1')

delete_multi:在memcached中删除指定的多个键值对

mc.delete_multi(['key1','key2','key3'])

get:获取一个键值对

get_multi:获取多个键值对

mc.get('key3')
mc.get_multi(['key1','key2'])

append:修改指定key的值,在该值后面追加内容

prepend:修改指定key的值,在该值前面插入内容

mc.append('k1','after')
mc.prepend('k2','before')

incr:自增,将memcached中的某个值增加N(默认为1)

decr:自减,将memcached中的某分值减少N(默认为1)

mc.set('k1',10)
mc.incr('k1',2)
print(mc.get('k1'))
mc.decr('k1',3)
print(mc.get('k1'))

gets:gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空

cas:执行一个检查并设置的操作,它仅在当前客户端最后一次取值后,该Key对应的值没有被其他客户端修改的情况下, 才能够将值写入。

mc.cas('key5','')
print(mc.gets('key5'))

------------------------------------------------------------

python3之memcached的更多相关文章

  1. Python-Django使用MemcachedCache缓存

    最近工作中使用到缓存,简单记录之... 关于django的几种缓存方式,就不在做介绍了,网上一搜一大把:1.8.2官方文档, Django 缓存,Python菜鸟之路:django缓存 学习了之后,选 ...

  2. 17.Python笔记之memcached&redis

    作者:刘耀 博客:www.liuyao.me 博客园:www.cnblogs.com/liu-yao 一.Memcached 1.介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动 ...

  3. Python3 与 C# 并发编程之~ 线程篇

      2.线程篇¶ 在线预览:https://github.lesschina.com/python/base/concurrency/3.并发编程-线程篇.html 示例代码:https://gith ...

  4. Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery

    前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...

  5. Python自动化开发 - Python操作Memcached、Redis、RabbitMQ

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  6. RabbitMQ、Memcached、SQLAlchemy

    一.RabbitMQ 1.基础概念 rabbitMQ说白了就是一个消息队列,类似于Queue,也是生产者与消费者模型.只不过做了扩展,所不同的是Queue在内存中的消息队列,而RabbitMQ是部署在 ...

  7. Python操作Memcached使用Python-memcached模块

    安装Python的memcached驱动模块 pip install python-memcached 简单的操作示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/ ...

  8. Python3之redis使用

    简介 redis是一个key-value存储系统,和Memcache类似,它支持存储的value类型相对更多,包括string(字符串),list(列表),set(集合),zset(有序集合),has ...

  9. Python3之Memcache使用

    简介 Memcached是一个高性能的分布式内存对象缓存系统,用于动态WEB应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态,数据库网站的速度.Memcached ...

随机推荐

  1. #Linux第四周学习总结——扒开系统调用的三层皮(上)

    Linux第四周学习总结--扒开系统调用的三层皮(上) 一.用户态.内核态和中断 系统调用通过库函数. 1.用户态和内核态 区分(不同的指令执行级别): 用户态:在相应的低执行状态下,代码的掌控范围受 ...

  2. Spherical Hashing,球哈希

    1. Introduction 在传统的LSH.SSH.PCA-ITQ等哈希算法中,本质都是利用超平面对数据点进行划分,但是在D维空间中,至少需要D+1个超平面才能形成一个封闭.紧凑的区域.而球哈希方 ...

  3. 第二章:蓝色巨人 IBM公司

    COBOL(面向商业的通用语言) DEC(数字设备公司)华生实验室 造成失败的原因: 1,没有经营终端消费型产品 2,技术的流失 3.没有在意对手 成为的方法:合并,保守,谨慎 研究员的工作: 1,发 ...

  4. wia驱动扫描仪

    .net wia驱动扫描仪 通过各种途径,将当前比较流行的驱动扫描仪封装成了一个简单实用的class,调用扫描仪时,只需要重新创建个对象即可,代码如下: using System;using Syst ...

  5. Android map转json格式,附上Jackson包下载地址,导入过程

    android中的map转json,需要下载jackson包,下载地址: http://www.java2s.com/Code/Jar/j/Downloadjacksonall199jar.htm 下 ...

  6. [转帖]第二个显示屏上禁用Windows任务栏

    http://os.51cto.com/art/201812/589207.htm 这个过程非常简单,你可以在一分钟内摆脱第二个屏幕上的任务栏. 您需要做的就是按照以下步骤操作: --打开设置,然后转 ...

  7. day8——ajax传参到action(Struts2)

    第一种:url+?+参数 jsp中: $(function(){ $("[name='delemp']").click(function(){ $this = $(this); $ ...

  8. SpringBoot(十四)_springboot使用内置定时任务Scheduled的使用(一)

    为什么使用定时? 日常工作中,经常会用到定时任务,比如各种统计,并不要求实时性.此时可以通过提前设置定时任务先把数据跑出来,后续处理起来更方便. 本篇文章主要介绍 springboot内置定时任务. ...

  9. Strategic Game HDU - 1054(最小顶点覆盖)

    最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联: ...以为自己很聪明..用边连边...最后还是点连点  哎.... hc 写的  匈牙利足够///// #include <iostr ...

  10. poj1741 Tree(点分治)

    题目链接:http://poj.org/problem?id=1741 题意:求树上两点之间距离小于等于k的点对的数量 思路:点分治模板题,推荐一篇讲的非常好的博客:https://blog.csdn ...