热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MemcacheBasics

Memcached开源高性能分布式内存对象缓存系统key-value存储系统,用来存储小块的任意数据(字符串、对象)通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用
Memcached
  • 开源 高性能 分布式内存对象缓存系统
  • key-value存储系统, 用来存储小块的任意数据(字符串、对象)
  • 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
特征
  • 协议简单(基于文本行的协议)
  • 基于libevent的事件处理
  • 内置内存存储方式
  • Memcached不相互通信的分布式

注:
由于数据保存在内置的内存存储空间中,所以重启memcached会导致全部数据消失;
内容容量达到指定值之后,就基于LRU算法自动删除不使用的缓存;
Memcached服务器端没有分布式功能,这完全取决于客户端的实现。

启动参数
  • -p 使用端口,默认11211
  • -m 最大内存大小,默认64M
  • -vv 用very verbose模式启动,调试信息和错误输出到控制台
  • -d 作为daemon在后台启动
安装/启动

$ sudo apt-get install memcached # 安装
$ memcached -p 11211 64m -vv # 显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211,最大内存为64M。调试信息的内容大部分是关于存储的信息
$ memcached -p 11211 64m -d # 后台服务程序运行

连接实例

$ telnet HOST PORT
// 实例
$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set foo 0 0 3
bar
STORED
get foo
VALUE foo 0 3
bar
END
quit

set 命令

value 存储在指定的 key
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用

# 语法格式
set key flags exptime bytes [noreply]
value

  • key key-value的key
  • flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
  • exptime 在缓存中保存键值对的时间(秒为单位,0 永远)
  • bytes 存储字节数
  • noreply (可选)告知服务器不需要返回数据
  • value key-value的value

实例:

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmter 0 100 9
memcached
STORED # 数据设置成功则输出STORED,保存失败则输出ERROR
get fmter
VALUE fmter 0 9
memcached
END
quit

add 命令

value 存储在指定的 key
如果 add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_STORED

# 语法格式 [同set]
add key flags exptime bytes [noreply]
value

replace 命令

替换已存在的 keyvalue
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED

# 语法格式 [同set]
replace key flags exptime bytes [noreply]
value

append 命令

向已存在 keyvalue 后面追加数据
输出说明:
STORED 保存成功后输出。
NOT_STORED 该键在 Memcached 上不存在。
CLIENT_ERROR 执行错误。

# 语法格式 [同set]
append key flags exptime bytes [noreply]
value

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmt 0 100 9
memcached
STORED
get fmt
VALUE fmt 0 9
memcached
END
append fmt 0 100 5
redis
STORED
get fmt
VALUE fmt 0 14
memcachedredis
END
quit

prepend 命令

向已存在 keyvalue 前面追加数据
输出说明:
STORED 保存成功后输出。
NOT_STORED 该键在 Memcached 上不存在。
CLIENT_ERROR 执行错误。

# 语法格式 [同set]
prepend key flags exptime bytes [noreply]
value

CAS 命令

CAS(Check-And-Set/Compare-And-Swap) 命令用于执行一个”检查并设置”的操作
仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入
检查是通过cas_token参数进行的, 这个参数是memcached指定给已经存在的元素的一个唯一的64位值

# 语法格式 [同set]
cas key flags exptime bytes unique_cas_token [noreply]
value

  • unique_cas_token 通过 gets 命令获取的一个唯一的64位值

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmt 0 100 9
memcached
STORED
gets fmt
VALUE fmt 0 9 9
memcached
END
cas fmt 0 100 5 9
redis
STORED
get fmt
VALUE fmt 0 5
redis
END
quit

输出信息说明
STORED 保存成功后输出。
ERROR 保存出错或语法错误。
EXISTS 在最后一次取值后另外一个用户也在更新该数据。
NOT_FOUND Memcached 服务上不存在该键值。

get 命令

获取存储在 key 中的 value ,若key不存在,返回空

# 语法格式
get key [key1, key2, ...]

gets 命令

获取带有 cas_token存 的 value,若key不存在,返回空

# 语法格式
gets key [key1, key2, ...]

delete 命令

删除已存在的 key

# 语法格式
delete key [noreply]
delete key [key1, key2, ...]

返回参数
DELETED 删除成功
ERROR 语法错误/删除失败
NOT_FOUND key不存在

incr/decr 命令

对已存在的 key的数字值进行自增或自减操作
操作的数据必须是十进制的32位无符号整数

# 语法格式
incr key increment_value
derc key decrement_value

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmt 0 100 2
15
STORED
incr fmt 8
23
decr fmt 7
16

返回参数
NOT_FOUND key不存在
CLIENT_ERROR 自增值不是对象(数字)
ERROR 其他错误,如语法错误

stats 命令

输出 Memcached 服务信息

# 语法格式
stats

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 9541 # memcached的服务端进程id
STAT uptime 12165 # 服务器已运行时间(秒)
STAT time 1467873285 # 服务器当前UNIX时间戳
STAT version 1.4.25 Ubuntu # memcache版本
STAT libevent 2.0.21-stable
STAT pointer_size 64 # 操作系统指针大小
STAT rusage_user 0.264000 # 进程累计用户时间
STAT rusage_system 0.212000 # 进程累计系统时间
STAT curr_connections 5 # 当前连接数量
STAT total_connections 14 # Memcached运行以来连接总数
STAT connection_structures 6 # Memcached分配的连接结构数量
STAT reserved_fds 20
STAT cmd_get 27 # get命令请求次数
STAT cmd_set 18 # set命令请求次数
STAT cmd_flush 0 # flush命令请求次数
STAT cmd_touch 0 # touch命令请求次数
STAT get_hits 19 # get命令命中次数
STAT get_misses 8 # get命令未命中次数
STAT delete_misses 0 # delete命令未命中次数
STAT delete_hits 1 # delete命令命中次数
STAT incr_misses 0 # incr命令未命中次数
STAT incr_hits 1 # incr命令命中次数
STAT decr_misses 0 # decr命令未命中次数
STAT decr_hits 1 # decr命令命中次数
STAT cas_misses 2 # cas命令未命中次数
STAT cas_hits 1 # cas命令命中次数
STAT cas_badval 2 # 使用擦拭次数
STAT touch_hits 0 # touch命令命中次数
STAT touch_misses 0 # touch命令未命中次数
STAT auth_cmds 0 # 认证命令处理的次数
STAT auth_errors 0 # 认证失败数目
STAT bytes_read 934 # 读取总字节数
STAT bytes_written 906 # 发送总字节数
STAT limit_maxbytes 67108864 # 分配的内存总大小(字节)
STAT accepting_conns 1 # 服务器是否达到过最大连接(0/1)
STAT listen_disabled_num 0 # 失效的监听数
STAT time_in_listen_disabled_us 0
STAT threads 4 # 当前线程数
STAT conn_yields 0 # 连接操作主动放弃数目
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 218 # 当前存储占用的字节数
STAT curr_items 3 # 当前存储的数据总数
STAT total_items 12 # 启动以来存储的数据总数
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0 # LRU释放的对象数目
STAT reclaimed 0 # 已过期的数据条目来存储新数据的数目
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END

stats items 命令

显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)

# 语法格式
stats items

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats items
STAT items:1:number 3
STAT items:1:age 11655
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:crawler_reclaimed 0
STAT items:1:crawler_items_checked 0
STAT items:1:lrutail_reflocked 0
END

stats slabs 命令

用于显示各个slab的信息,包括chunk的大小、数目、使用情况等

# 语法格式
stats slabs

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 3
STAT 1:free_chunks 10919
STAT 1:free_chunks_end 0
STAT 1:mem_requested 218
STAT 1:get_hits 19
STAT 1:cmd_set 18
STAT 1:delete_hits 1
STAT 1:incr_hits 1
STAT 1:decr_hits 1
STAT 1:cas_hits 1
STAT 1:cas_badval 2
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END

stats sizes 命令

显示所有item的大小和个数
该信息返回两列,第一列是 item 的大小,第二列是 item 的个数

# 语法格式
stats sizes

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats sizes
STAT 96 3
END

flush_all 命令

清理缓存中的所有 key-value
可选参数 time,用于在指定的时间后执行清理缓存操作

# 语法格式
flush_all [time] [noreply]

实例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmt 0 0 9
memcached
STORED
get fmt
VALUE fmt 0 9
memcached
END
flush_all
OK
get fmt
END

推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
author-avatar
MwMw在不在_669_301_603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有