memcache 原理 监测 查看状态 stats 结构

 Mencache内存存储方式:slab/LRU,采用预先申请固定大小的内存页(slab/page),然后再把内存分成多个块(chunk)

先放一张从网上找到的memcache内存结构图,觉得非常的赞:

再来一张memcache slab内存分配图,最讨厌看图了,但是看到这图对memcache的内存分配豁然开朗,于是决定以后要多看图。

Item内存结构图

item就是存放在chunk中的实际数据,

新建Item分配内存过程

快速定位slab classid
计算key+value+suffix+32结构体,如90byte (key键长+suffix+value值长+结构大小(32字节)
如果>1MB,无法存储丢弃
取最小冗余的slab class
如:有48,96,120,存90会选择96

按顺序寻找可用chunk
slot:检查slab回收空间slot里是否有剩余chunk
delete:delete时标记到slot
exptime:get时检查的过期对象标记到slot
end_page_ptr:检查page中是否有剩余chunk
memory:内存还有剩余则开辟新的slab
LRU:Slab内部扫描Item双向链表50次

Memcache命令

连接memcache测试: telnet  ip port,如telnet 127.0.0.1 11211

存储命令格式

<command> <key> <flags> <exptime> <bytes> [<version>]\r\n
<datablock>\r\n

 

commandset无论如何都进行存储
add只有数据不存在时进行添加
repalce只有数据存在时进行替换
append往后追加:append <key> datablock <status>
prepend往前追加:prepend <key> datablock <status>

cas按版本号更改
key字符串,<250个字符,不包含空格和控制字符
flags客户端用来标识数据格式的数值,如json,xml,压缩等
exptime存活时间 s 以秒为单位,0为永远,<30天60*60*24*30为秒数,>30天为unixtime
bytesbyte字节数,不包含\r\n,根据长度截取存/取的字符串,可以是0,即存空串
datablock文本行,以\r\n结尾,当然可以包含\r或\n

 

例:

##存入数据,特别注意bytes(也就是下面那个5),bytes指明datablock字节数(\r\n算两个字节)。如果bytes与你实际输入的datablock字节数不一致,会报client_error错误。
set testzhong_liu 0 3600 5
ab
c
STORED

get testzhong_liu
VALUE testzhong_liu 0 5
ab
c
END

 

读取命令格式:

<command> <key>[ key1[ key2...]\r\n

get testzhong_liu testcook
VALUE testzhong_liu 0 5
ab
c
END

计数命令incr/decr

incr/decr <key> <int>

key必需存在

value必需是数值

删除命令delete

delete <key> [<time>]

统计命令

stats
STAT pid 1014                  //Memcache进程ID
STAT uptime 8122               //Memcached运行时间,单位:秒
STAT time 1357359669           //Memcached当前的UNIX时间
STAT version 1.4.7             //Memcached的版本号
STAT libevent 2.0.19-stable    
STAT pointer_size 64
STAT rusage_user 0.144009      //该进程累计的用户时间,单位:秒
STAT rusage_system 0.064004    //该进程累计的系统时间,单位:秒
STAT curr_connections 10       //当前连接数量
STAT total_connections 34      //Memcached运行以来接受的连接总数
STAT connection_structures 11  //Memcached分配的连接结构的数量
STAT cmd_get 64                //查询请求总数
STAT cmd_set 10                //存储(添加/更新)请求总数
STAT cmd_flush 0               //flush请求总数
STAT get_hits 60               //查询成功获取数据的总次数
STAT get_misses 4              //查询成功未获取到数据的总次数
STAT delete_misses 0           
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 10753          //Memcached从网络读取到的总字节数
STAT bytes_written 227141      //Memcached向网络发送的总字节数
STAT limit_maxbytes 67108864   //Memcached在存储时被允许使用的字节总数
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 8416                //Memcached当前存储内容所占用字节数
STAT curr_items 4              //Memcached当前存储的内容数量
STAT total_items 7             //Memcached启动以来存储过的内容总数
STAT evictions 0               //LRU释放对象数,用来释放内存
STAT reclaimed 0
END



stats settings

stats items

stats sizes

stats slabs

其他命令

-version
-flush_all
-quit
-echo|nc 快捷方式
echo get testzhong_liu | nc localhost 11210  

知识点:

windows下修改memcached运行参数:
1>开始>运行:regedit(回车)
2>在注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
3>默认的ImagePath键的值是:"c:\memcached\memcached.exe" -d runservice,改为:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55
4>我的电脑(右键)>管理>服务 找到memcache的服务,重新启动一次即可生效。

参考:http://blog.csdn.net/zhxp_870516/article/category/1310409/1

转载于:https://www.cnblogs.com/mengzhongshi/p/3511668.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫——多线程糗事百科案例

Queue&#xff08;队列对象&#xff09; Queue是python中的标准库&#xff0c;可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源&#xff0c;加锁是个重要的环节。因为python原生的list,dict等&#xff0c;都是not thread safe的…

LeetCode 1625. 执行操作后字典序最小的字符串(BFS)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 以及两个整数 a 和 b 。其中&#xff0c;字符串 s 的长度为偶数&#xff0c;且仅由数字 0 到 9 组成。 你可以在 s 上按任意顺序多次执行下面两个操作之一&#xff1a; 累加&#xff1a;将 a 加到 s 中所有下标为奇数的元素…

C++ 0x 使用可变参数模板类 实现 C# 的委托机制

1 #ifndef _ZTC_DELEGATE_H_2 #define _ZTC_DELEGATE_H_3 4 #include <vector>5 #include <functional>6 7 ///8 // C 使用 可变参数模板类, 来实现9 // C#中的 委托 10 // Anchor: ztc 11 // Date : 2014-01-10 12 /// 13 14 template<typename R, typename …

爬虫技巧:在pycharm 下 调试 scrapy项目

&#xff08;1&#xff09; 用pycharm导入scrapy项目 &#xff08;2&#xff09;选择自己编写的scrapy&#xff0c;run一下 &#xff08;3&#xff09;点击菜单栏的run &#xff0c;选择Edit Configurations。 &#xff08;4&#xff09;选择运行的spider文件 &#xff08;5&am…

LeetCode 1626. 无矛盾的最佳球队(最大上升子序DP)

文章目录1. 题目2. 解题1. 题目 假设你是球队的经理。对于即将到来的锦标赛&#xff0c;你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而&#xff0c;球队中的矛盾会限制球员的发挥&#xff0c;所以必须选出一支 没有矛盾 的球队。 如果一名…

爬虫最基本的工作流程:内涵社区网站为例

网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff09;就是模拟客户端发送网络请求&#xff0c;接收请求响应&#xff0c;一种按照一定的规则&#xff0c;自动地抓取互联网信息的程序。 只要是浏览器能做的事情&#xff0c;原则上&#xff0c;爬虫都能够做…

LeetCode 网易-2. 古老的游戏机

文章目录1. 题目2. 解题1. 题目 小易有一个古老的游戏机&#xff0c;上面有着经典的游戏俄罗斯方块。因为它比较古老&#xff0c;所以规则和一般的俄罗斯方块不同。 首先&#xff0c;荧幕上一共有 n 列&#xff0c;每次都会有一个 1 x 1 的方块随机落下&#xff0c;在同一列中…

RDD(弹性分布式数据集)

1、什么是RDD RDD&#xff08;分布式弹性数据集&#xff09;是对分布式计算的抽象&#xff0c;代表要处理的数据&#xff0c;一个数据集,RDD是只读分区的集合。数据被分片&#xff0c;分成若干个数据分片&#xff0c;存储到不同的节点中&#xff0c;可以被并行的操作&#xff…

爬虫Scrapy框架基本流程图入门:以东莞阳光网为例

一、Scrapy简单介绍 Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。 所谓网络爬虫&#xff0c;就是一个在网上到处或定向抓取数据的程序&#xff0c;当然&#xff0…

Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件

本文介绍如何设置Eclipse代码自动补全功能。轻松实现输入任意字母均可出现代码补全提示框。Eclipse代码自动补全功能默认只包括 点"." &#xff0c;即只有输入”."后才出现自动补全的提示框。想要自动补全总是去按 “Alt / ”也很麻烦。 其实只需简单在Eclips…

RDD持久化、广播、累加器

1、持久化 RDD的持久化包括两个方面&#xff1a;①操作RDD的时候怎么保存结果&#xff0c;这个部分属于action算子的部分②在实现算法的时候要进行cache、persist&#xff0c;还有checkpoint进行持久化。 1.1 persist和cache Spark稍微复杂一点的算法里面都会有persit的身影…

LeetCode 网易-1. 分割环(前缀和 + 哈希)

文章目录1. 题目2. 解题1. 题目 小易有 n 个数字排成一个环&#xff0c;你能否将它们分成连续的两个部分(即在环上必须连续)&#xff0c;使得两部分的和相等&#xff1f; 输入描述&#xff1a; 第一行数据组数 T &#xff0c;对于每组数据 第一行数字 n &#xff0c;表示数字…

RDD的依赖与分区

1 宽依赖和窄依赖 RDD从具体的依赖的角度讲&#xff0c;有窄依赖和宽依赖2种情况。 窄依赖&#xff1a;指每个父RDD的一个Partition最多被子RDD的一个Partition所使用&#xff0c;例如map、filter等都会产生窄依赖&#xff1b; 宽依赖&#xff1a;指一个父RDD的Partition会被…

爬虫案列:京东商城长裤信息获取

1、创建Scrapy项目 使用全局命令startproject创建项目&#xff0c;创建新文件夹并且使用命令进入文件夹&#xff0c;创建一个名为jingdong的Scrapy项目。 [python] view plaincopy scrapy startproject jingdong 2.使用项目命令genspider创建Spider [python] view plaincopy …

ACwing 2. 01背包问题(DP)

文章目录1. 题目2. 解题1. 题目 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 …

Redis-Scrapy分布式爬虫:当当网图书为例

Scrapy-Redis分布式策略&#xff1a; Scrapy_redis在scrapy的基础上实现了更多&#xff0c;更强大的功能&#xff0c;具体体现在&#xff1a; reqeust去重&#xff0c;爬虫持久化&#xff0c;和轻松实现分布式 假设有四台电脑&#xff1a;Windows 10、Mac OS X、Ubuntu 16.04、…

Saprk排序

1、基础排序算子sortBy和sortByKey 在Spark中存在两种对RDD进行排序的函数&#xff0c;分别是 sortBy和sortByKey函数。sortBy是对标准的RDD进行排序&#xff0c;它是从Spark0.9.0之后才引入的。而sortByKey函数是对PairRDD进行排序&#xff0c;也就是有Key和Value的RDD。下面…

ACwing 3. 完全背包问题(DP)

文章目录1. 题目2. 解题1. 题目 有 N 种物品和一个容量是 V 的背包&#xff0c;每种物品都有无限件可用。 第 i 种物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。…

Crontab定时任务访问url实例

以下操作均是在ubuntu 下操作的&#xff1a; 1、进入crontab文件的编写状态&#xff1a; crontab -e 2、第一次进入编写crontab文件的界面&#xff0c;系统会提示选择相应的编辑器&#xff0c;一般我们选择vi编辑器就可以了&#xff1a;选择/usr/bin/vim.tiny 12345Select a…

ACwing 4. 多重背包问题 I(DP)

文章目录1. 题目2. 解题1. 题目 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件&#xff0c;每件体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使物品体积总和不超过背包容量&#xff0c;且价值总和最大。 输出最大价值。 输入格式…