Memcached操作
标准协议和字段
Memcached的标准协议字段包含以下部分:
- 键,key,任意字符,最大250字节,不能有空格和换行
- 标志位,32比特,不能为0
- 超时时间,单位是秒,0代表永不超时,最长30天,30天之后,就会出现一个类似于准确的时间戳
- CAS值,64比特,唯一值,不重复
- 任意字符,缓存中存储的字节数,也就是字节长度。
CAS值是可选项,通过-c可以禁用,对于一个项目还有其他很多属性值,但是这些属性值client都不会用到,所以也就不太关心了。
No reply不回复
在绝大多数的ASCII命令中,都支持不回复的,但是通常不建议在ASCII中使用这种协议,这样容易造成错误和请求对齐。之所以使用这种不回复的机制,就是为了避免当出现修改操作命令之后需要等待响应回复的等待时间的出现。
在二进制协议中,就是使用这种不回复的机制,如果client支持二进制协议,那就是相当好的。
存储命令
Set:最常用的命令,用来存储数据,修改已经存在的数据,新数据通常放在LRU顶部
Add:存储数据,前提是该数据在memcached中不存在,如果该数据已经在memcached中已经存在,那么add操作是会失败的,但是会将该数据移动到LRU的最顶部。
Replace:当数据存在时,才会去存储替换数据,基本上用不到。
Append:将新数据放在所有数据的最后面,但是不允许超过允许的最大长度,在管理列表时有点作用,该item必须要在memcached中存在,将值添加到原值的后面。
Prepend:和append类似,将新数据放在数据的前面。
Append和prepend实际上是修改键对应的值。
Cas:Check And Set (or Compare And Swap),当距离上一次读去数据之后,该数据备用被更新,才会去存储该数据,

Set设置name为键,12是一个标志位,不能有重复,默认情况下如果通过client去写,不用关心,client会自己定义,不能为0,后面的0是表示永不超时,4代表为设置的值的长度为4,超过4设置就会报错。


当对数据使用set进行修改时,会直接修改所有属性。

Append和prepend修改数据值
Memcached_client.set('name','bobo',time=0)
Memcached_client.add('name1','bobo1',time=0)
Memcached_client.append('name1',' bobo2',time=0)
print(Memcached_client.get('name'))
print(Memcached_client.get('name1'))

检索获取数据
Get:用来检索数据,通过输入键key,memcached返回对应的值,可以同时获取多个键对应的值。
Gets:通过CAS值来检索数据,同时返回给item的CAS值。

删除数据
Delete:如果memcached中存在,就删除对应的键值对。

排序
如果item对象是一个64位整型存储的,可以通过incr/decr来进行排序,只能对正数进行排序,不能对负数进行排序。
超时flush_all
将memcached中的数据全部标记为不可用,通常情况下会跟一个参数,也就是时间,大概多久之后数据失效,这个操作不会影响服务的正常运行,也不会清空cache,只是将这些数据标记为不可用。
Memcached安全思考
Memcached作为一个中间件,能加速访问,由于并不带认证,容易受到攻击破环,所以不建议将memcached放在外网或者是所有人都能访问到的地方,如果只是为了加速用户访问,建议放在服务器后面,由服务器去调度memcached,如果memcached和服务安装在同一台服务器上,尽量用127.0.0.1来启动服务。如果是跨主机的通信,建议还是使用防火墙来做限制。
Memcached操作的更多相关文章
- php Memcache/Memcached操作手册
php Memcache/Memcached使用教程 Memcache和Memcached 其实是一个东西,只是php中要是用的扩展不一样, 2009年左右有人丰富memcache的用法和性能,编写了 ...
- Memcached操作以及用法
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...
- [Memcached]操作
telnet连接memcached 查看端口是否可访问 # telnet 172.16.1.1 11211 Trying 172.16.1.1... Connected to 172.16.1.1. ...
- CentOS7下安装Mysql和Memcached 以及 使用C#操作Mysql和Memcached
我本身是学.net的,但是现在很多主流SQL和NOSQL都是部置在linux下,本着好学的精神,前段时间装了个虚拟机,在其装上CentOS64位的服务器系统,对于英文0基础,linux0基础的我来说, ...
- 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 #!/ ...
- Python Memcached Script
介绍 利用 python 书写了 memcached 的启动等一类操作 尽量的实现脚本的复用性,以及脚本的可扩展性,已达到一劳永逸的效果, 并且添加了 memcached 监控搭建 memcached ...
- Java client 访问 memcached
在测试项目中引入了memcached作为缓存层,以下是memcached的缓存配置和调用过程. linux下memcached安装过程 直接参考以前的博文linux下安装memcached过程 不再 ...
- Memcached应用总结
Memcached应用总结 memcached是一款高性能的分布式缓存系统,凭借其简单方便的操作,稳定可靠的性能广泛应用于互联网应用中,网上关于memcached介绍的资料也很多,最经典的资料就是&l ...
- Memcached 使用与简单监测
Introduce Memcached作为一个高并发内存Cached系统被很多大公司使用,最近也一直在用Memcached做项目也积累了一些相关经验. 本篇博文主要记录Memcached的一些基本使用 ...
随机推荐
- 解决Linux系统下Mysql数据库中文显示成问号的问题
当我们将开发好的javaWEB项目部署到linux系统上,操作数据库的时候,会出现中文乱码问题,比如做插入操作,发现添加到数据库的数据中文出现论码,下面就将解决linux下mysql中文乱码问题! 打 ...
- jquery datatable 实例操作
var dataTables = $(".table").dataTable({ data: d,//为ajax的值,没有直接用插件自带的请求数据方式,个人觉得data的方式好控制 ...
- 【PAT】A1034Head of a Gang
昨天准备学完图相关的知识,但是学起来挺懵的,理解起来不难,但自己一回想,又什么都想不起来. 翻来覆去看图的遍历,还是觉得有点没到位. 所以做题来检测一下,果然学和自己做是两码事. 先看的书,又看的柳婼 ...
- 常见设计模式 (python代码实现)
1.创建型模式 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对 ...
- VMware Workstation中安装linux系统(CentOS)超详细(部分转载)
首先准备一下VMware虚拟机和linux镜像文件,链接如下: 对于32位windows机子安装的是10.0.7版本的VMware Workstation,链接: https://pan.baidu. ...
- python基础语法、数据结构、字符编码、文件处理 练习题
考试范围 '''1.python入门:编程语言相关概念2.python基础语法:变量.运算符.流程控制3.数据结构:数字.字符串.列表.元组.字典.集合4.字符编码5.文件处理''' 考试内容 1.简 ...
- How to move lobsegment and lobindex to a different Tablespace
Hi, Assuming that I have table "TEST" in USERS TableSpace CREATE TABLE TEST ( TEST_ID NUMB ...
- Python小数据池和字典操作
小数据池 #id 查看内存地址 #多个代码块可以使用小数据池 #一个代码块中有一个问题,就是重复使用 #数字 -5~256 #字符串 字符串 乘法总数长度不能超过20, 0,1除外 #不能有特殊字符 ...
- react 报错的堆栈处理
react报错 Warning: You cannot PUSH the same path using hash history 在Link上使用replace 原文地址https://reactt ...
- 动态生成的dom元素如何绑定事件
两种类型1.$('li').bind('click',function(){}); 当你用js动态添加li的时候,你添加的li不具有你绑定的事件.这种写法与$('li').click(function ...