共计 10932 个字符,预计需要花费 28 分钟才能阅读完成。
本篇文章是对 memcache 启动以及 telnet 命令进行了详细的分析介绍,需要的朋友参考下
1、启动 Memcache 常用参数
-U <num> UDP 监听端口 (默认: 11211, 0 时关闭)
-d 以守护进程方式运行
-u <username> 运行运行 Memcached 的账户 非 root 用户
-m <num> 最大的内存使用单位是 MB 默认是 64MB
-c <num> 软连接数量默认是 1024
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息
-h 打印帮助信息
-i 打印 memcached 和 libevent 的版权信息
-l <ip_addr> 绑定地址 (默认: 所有都允许, 无论内外网或者本机更换 IP,有安全隐患,若设置为 127.0.0.1 就只能本机访问)
-P <file> 将 PID 写入文件 <file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用
启动示例:
/usr/local/bin/memcached -l 127.0.0.1 -d -p 11211 -u nobody -m 1024
说明:
-l 127.0.0.1 只允许本机访问
-d 以后台守护进程运行
-p 11211 服务监听端口为 11211
-u nobody 用户名
-m 1024 申请最大内存空间为 1024MB
2、Memcache telnet 常用命令
memcache 命令格式
<command name> <key> <flags> <exptime> <bytes>
<data block> # key 的 value 值,根据命令行语法规则此处需换行
参数说明如下
<command name> | set/add/replace |
<key> | 关键字 |
<flags> | 客户机使用它存储关于键值对的额外信息 |
<exptime> | 该数据的存活时间,0 表示永远 |
<bytes> | 存储字节数 |
<data block> | 存储的数据块(可直接理解为 key-value 结构中的 value) |
命令用法及示例
COMMAND | DESCRIPTION | EXAMPLE |
---|---|---|
get | Reads a value | get mykey |
set | Set a key unconditionally | set mykey 0 60 5 |
add | Add a new key | add newkey 0 60 5 |
replace | Overwrite existing key | replace key 0 60 5 |
append | Append data to existing key | append key 0 60 15 |
prepend | Prepend data to existing key | prepend key 0 60 15 |
incr | Increments numerical key value by given number | incr mykey 2 |
decr | Decrements numerical key value by given number | decr mykey 5 |
delete | Deletes an existing key | delete mykey |
flush_all | Invalidate specific items immediately | flush_all |
Invalidate all items in n seconds | flush_all 900 | |
stats | Prints general statistics | stats |
Prints memory statistics | stats slabs | |
Prints memory statistics | stats malloc | |
Print higher level allocation statistics | stats items | |
stats detail | ||
stats sizes | ||
Resets statistics | stats reset | |
version | Prints server version. | version |
verbosity | Increases log level | verbosity |
quit | Terminate telnet session | quit |
3、stats 命令详解
pid | memcache 服务器的进程 ID |
uptime | 服务器已经运行的秒数 |
time | 服务器当前的 unix 时间戳 |
version | memcache 版本 |
pointer_size | 当前操作系统的指针大小(32 位系统一般是 32bit) |
rusage_user | 进程的累计用户时间 |
rusage_system | 进程的累计系统时间 |
curr_items | 服务器当前存储的 items 数量 |
total_items | 从服务器启动以后存储的 items 总数量 |
bytes | 当前服务器存储 items 占用的字节数 |
curr_connections | 当前打开着的连接数 |
total_connections | 从服务器启动以后曾经打开过的连接数 |
connection_structures | 服务器分配的连接构造数 |
cmd_get | get 命令(获取)总请求次数 |
cmd_set | set 命令(保存)总请求次数 |
get_hits | 总命中次数 |
get_misses | 总未命中次数 |
evictions | 为获取空闲内存而删除的 items 数(分配给 memcache 的空间用满后需要删除旧的 items 来得到空间分配给新的 items) |
bytes_read | 总读取字节数(请求字节数) |
bytes_written | 总发送字节数(结果字节数) |
limit_maxbytes | 分配给 memcache 的内存大小(字节) |
threads | 当前线程数 |
4、Memcache 启动 tips
a:监听内网地址
b:修改默认端口号
c:设置最大连接数,最大内存占用数
———————–
Memcached 常用命令以及使用说明详解
存储命令的格式
<command name> <key> <flags> <exptime> <bytes>
<data block> # key 的 value 值,根据命令行语法规则此处需换行
参数说明如下
<command name> | set/add/replace |
<key> | 关键字 |
<flags> | 客户机使用它存储关于键值对的额外信息 |
<exptime> | 该数据的存活时间,0 表示永远 |
<bytes> | 存储字节数 |
<data block> | 存储的数据块(可直接理解为 key-value 结构中的 value) |
1、添加
(1)、无论如何都存储的 set
这个 set 的命令在 memcached 中的使用频率极高。
set 命令不但可以简单添加,如果 set 的 key 已经存在,该命令可以更新该 key 所对应的原来的数据,也就是实现更新的作用。
可以通过“get 键名”的方式查看添加进去的记录:
如你所知,我们也可以通过 delete 命令删除掉,然后重新添加。
(2)、只有数据不存在时进行添加的 add
(3)、只有数据存在时进行替换的 replace
2、删除
可以看到,删除已存在的键值和不存在的记录可以返回不同的结果。
二、读取命令
1、get
get 命令的 key 可以表示一个或者多个键,键之间以空格隔开
2、gets
可以看到,gets 命令比普通的 get 命令多返回了一个数字(上图中为 13)。
这个数字可以检查数据是否发生改变。当 key 对应的数据改变时,这个多返回的数字也会改变。
3、cas
cas 即 checked and set 的意思,只有当最后一个参数和 gets 所获取的参数匹配时才能存储,否则返回“EXISTS”。
三、状态命令
1、stats
2、stats items
执行 stats items,可以看到 STAT items 行,如果 memcached 存储内容很多,那么这里也会列出很多的 STAT items 行。
3、stats cachedump slab_id limit_num
我们执行 stats cachedump 1 0 命令效果如下:
这里 slab_id 为 1,是由 2 中的 stats items 返回的结果(STAT items 后面的��字)决定的;
limit_num 看起来好像是返回多少条记录,猜的一点不错,不过 0 表示显示出所有记录,而 n(n>0)就表示显示 n 条记录,如果 n 超过该 slab 下的所有记录,则结果和 0 返回的结果一致。
通过 stats items、stats cachedump slab_id limit_num 配合 get 命令可以遍历 memcached 的记录
4、其他 stats 命令
如 stats slabs, stats sizes, stats reset 等等使用也比较常见。
四、其他常见命令
1、append
在现有的缓存数据 后添加缓存数据,如现有缓存的 key 不存在服务器响应为 NOT_STORED。
2、prepend
和 append 非常类似,但它的作用是在现有的缓存数据 前添加缓存数据。
3、flush_all
该命令有一个可选的数字参数。它总是执行成功,服务器会发送“OK\r\n”回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。
flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由 memcached 的懒惰检测和删除机制决定的)。
flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。
4、其他命令
memcached 还有很多命令,比如对于存储为数字型的可以通过 incr/decr 命令进行增减操作等等,这里只列出开发和运维中经常使用的命令,其他的不再一一举例说明。
补充:
简单认识.net framework 中的几种缓存
web 站点中缓存的重要性毋庸置疑。很多 asp.net 开发人员在开发 web 应用系统的时候优先考虑使用的缓存并不是第三方缓存解决方案(比如分布式缓存 memcached、Redis 等等),而应该是.net framework 已经提供的多种缓存解决方案。
下面结合自己的开发经验谈谈对.net framework 中缓存的认识。
1、System.Web.Caching.Cache
估计大部分做过 asp.net 开发的人都用过这个命名空间下的缓存,我们可以直接使用 HttpContext.Current.Cache 实例而不用实例化。
当然这个命名空间下的 Cache 类是允许您实例化的,需要定制自己的缓存系统的当然可以完全自己控制如何初始化这个类。我在园子里看到过有很多文章介绍 Cache 的 CRUD 辅助类库大多数都是针对 System.Web.Caching.Cache。
需要说明的是,我们还可以通过该命名空间下的 HttpRuntime.Cache 实现 web、控制台、winform 等不同表现形式下的缓存,而且完全无需自己实例化。HttpRuntime.Cache 是之前个人开发中使用比较多的一个类,现在比较偏爱.net framework4.0 中的增强型的缓存类 MemoryCache。
2、Output Cache
众所周知,输出缓存主要分页面输出缓存和页面部分缓存。说白了,就是缓存整个页面的 html 或者部分 html,本来没什么值得讨论的,但是最近看到 dudu 的这篇博客才恍然发现,想不到使用它还真是大有讲究,我以前怎么就没有发现这个问题呢?看来发现问题和解决问题的能力同样重要,有时候前者甚至更重要啊。
3、System.Runtime.Caching
现在个人开发中使用最多的类 MemoryCache 出自这个命名空间,使用前需要引用 using System.Runtime.Caching。MemoryCache 继承自 ObjectCache, IEnumerable, IDisposable,其中 ObjectCache 是个抽象类。用过 MemoryCache 的人都知道,这个 MemoryCache 有一个属性叫 Default,通常可以像下面这样使用:
private static ObjectCache memCache = MemoryCache.Default; 当然我们也完全可以通过 public MemoryCache(string name, NameValueCollection config = null)构造函数初始化缓存对象。
接着我们可以在 web.config 文件中配置每个 MemoryCache 实例运行的内存使用配额方案和配额检查周期,下面示例参考MSDN:
<memoryCache>
<namedCaches>
<add name=”Default” cacheMemoryLimitMegabytes=”10″ pollingInterval=”00:02:00″/>
</namedCaches>
</memoryCache>
</system.runtime.caching>
这些配置意义在于可以明确指定每个 MemoryCache 实例运行的内存使用配额方案和配额检查周期。比如我们可以通过配置来按需更改 MemoryCache.Default 实例的内存配额(不知道缓存可用最大内存是多少,可能还是传说中的 800M 左右)。缓存过期策略与其它的缓存框架大同小异,与 System.Web.Caching.Cache 的不同只是名称不叫 CacheDependency,而叫ChangeMonitor,并且提供了基于文件和目录的缓存依赖策略。关于缓存过期策略也比较有探讨的必要,不过个人开发中比较偏重于数据缓存和替换,目前还没有接触和使用过比较完美的过期策略解决方案。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148429.htm
本篇文章是对 memcache 启动以及 telnet 命令进行了详细的分析介绍,需要的朋友参考下
1、启动 Memcache 常用参数
-U <num> UDP 监听端口 (默认: 11211, 0 时关闭)
-d 以守护进程方式运行
-u <username> 运行运行 Memcached 的账户 非 root 用户
-m <num> 最大的内存使用单位是 MB 默认是 64MB
-c <num> 软连接数量默认是 1024
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息
-h 打印帮助信息
-i 打印 memcached 和 libevent 的版权信息
-l <ip_addr> 绑定地址 (默认: 所有都允许, 无论内外网或者本机更换 IP,有安全隐患,若设置为 127.0.0.1 就只能本机访问)
-P <file> 将 PID 写入文件 <file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用
启动示例:
/usr/local/bin/memcached -l 127.0.0.1 -d -p 11211 -u nobody -m 1024
说明:
-l 127.0.0.1 只允许本机访问
-d 以后台守护进程运行
-p 11211 服务监听端口为 11211
-u nobody 用户名
-m 1024 申请最大内存空间为 1024MB
2、Memcache telnet 常用命令
memcache 命令格式
<command name> <key> <flags> <exptime> <bytes>
<data block> # key 的 value 值,根据命令行语法规则此处需换行
参数说明如下
<command name> | set/add/replace |
<key> | 关键字 |
<flags> | 客户机使用它存储关于键值对的额外信息 |
<exptime> | 该数据的存活时间,0 表示永远 |
<bytes> | 存储字节数 |
<data block> | 存储的数据块(可直接理解为 key-value 结构中的 value) |
命令用法及示例
COMMAND | DESCRIPTION | EXAMPLE |
---|---|---|
get | Reads a value | get mykey |
set | Set a key unconditionally | set mykey 0 60 5 |
add | Add a new key | add newkey 0 60 5 |
replace | Overwrite existing key | replace key 0 60 5 |
append | Append data to existing key | append key 0 60 15 |
prepend | Prepend data to existing key | prepend key 0 60 15 |
incr | Increments numerical key value by given number | incr mykey 2 |
decr | Decrements numerical key value by given number | decr mykey 5 |
delete | Deletes an existing key | delete mykey |
flush_all | Invalidate specific items immediately | flush_all |
Invalidate all items in n seconds | flush_all 900 | |
stats | Prints general statistics | stats |
Prints memory statistics | stats slabs | |
Prints memory statistics | stats malloc | |
Print higher level allocation statistics | stats items | |
stats detail | ||
stats sizes | ||
Resets statistics | stats reset | |
version | Prints server version. | version |
verbosity | Increases log level | verbosity |
quit | Terminate telnet session | quit |
3、stats 命令详解
pid | memcache 服务器的进程 ID |
uptime | 服务器已经运行的秒数 |
time | 服务器当前的 unix 时间戳 |
version | memcache 版本 |
pointer_size | 当前操作系统的指针大小(32 位系统一般是 32bit) |
rusage_user | 进程的累计用户时间 |
rusage_system | 进程的累计系统时间 |
curr_items | 服务器当前存储的 items 数量 |
total_items | 从服务器启动以后存储的 items 总数量 |
bytes | 当前服务器存储 items 占用的字节数 |
curr_connections | 当前打开着的连接数 |
total_connections | 从服务器启动以后曾经打开过的连接数 |
connection_structures | 服务器分配的连接构造数 |
cmd_get | get 命令(获取)总请求次数 |
cmd_set | set 命令(保存)总请求次数 |
get_hits | 总命中次数 |
get_misses | 总未命中次数 |
evictions | 为获取空闲内存而删除的 items 数(分配给 memcache 的空间用满后需要删除旧的 items 来得到空间分配给新的 items) |
bytes_read | 总读取字节数(请求字节数) |
bytes_written | 总发送字节数(结果字节数) |
limit_maxbytes | 分配给 memcache 的内存大小(字节) |
threads | 当前线程数 |
4、Memcache 启动 tips
a:监听内网地址
b:修改默认端口号
c:设置最大连接数,最大内存占用数
———————–
Memcached 常用命令以及使用说明详解
存储命令的格式
<command name> <key> <flags> <exptime> <bytes>
<data block> # key 的 value 值,根据命令行语法规则此处需换行
参数说明如下
<command name> | set/add/replace |
<key> | 关键字 |
<flags> | 客户机使用它存储关于键值对的额外信息 |
<exptime> | 该数据的存活时间,0 表示永远 |
<bytes> | 存储字节数 |
<data block> | 存储的数据块(可直接理解为 key-value 结构中的 value) |
1、添加
(1)、无论如何都存储的 set
这个 set 的命令在 memcached 中的使用频率极高。
set 命令不但可以简单添加,如果 set 的 key 已经存在,该命令可以更新该 key 所对应的原来的数据,也就是实现更新的作用。
可以通过“get 键名”的方式查看添加进去的记录:
如你所知,我们也可以通过 delete 命令删除掉,然后重新添加。
(2)、只有数据不存在时进行添加的 add
(3)、只有数据存在时进行替换的 replace
2、删除
可以看到,删除已存在的键值和不存在的记录可以返回不同的结果。
二、读取命令
1、get
get 命令的 key 可以表示一个或者多个键,键之间以空格隔开
2、gets
可以看到,gets 命令比普通的 get 命令多返回了一个数字(上图中为 13)。
这个数字可以检查数据是否发生改变。当 key 对应的数据改变时,这个多返回的数字也会改变。
3、cas
cas 即 checked and set 的意思,只有当最后一个参数和 gets 所获取的参数匹配时才能存储,否则返回“EXISTS”。
三、状态命令
1、stats
2、stats items
执行 stats items,可以看到 STAT items 行,如果 memcached 存储内容很多,那么这里也会列出很多的 STAT items 行。
3、stats cachedump slab_id limit_num
我们执行 stats cachedump 1 0 命令效果如下:
这里 slab_id 为 1,是由 2 中的 stats items 返回的结果(STAT items 后面的��字)决定的;
limit_num 看起来好像是返回多少条记录,猜的一点不错,不过 0 表示显示出所有记录,而 n(n>0)就表示显示 n 条记录,如果 n 超过该 slab 下的所有记录,则结果和 0 返回的结果一致。
通过 stats items、stats cachedump slab_id limit_num 配合 get 命令可以遍历 memcached 的记录
4、其他 stats 命令
如 stats slabs, stats sizes, stats reset 等等使用也比较常见。
四、其他常见命令
1、append
在现有的缓存数据 后添加缓存数据,如现有缓存的 key 不存在服务器响应为 NOT_STORED。
2、prepend
和 append 非常类似,但它的作用是在现有的缓存数据 前添加缓存数据。
3、flush_all
该命令有一个可选的数字参数。它总是执行成功,服务器会发送“OK\r\n”回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。
flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由 memcached 的懒惰检测和删除机制决定的)。
flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。
4、其他命令
memcached 还有很多命令,比如对于存储为数字型的可以通过 incr/decr 命令进行增减操作等等,这里只列出开发和运维中经常使用的命令,其他的不再一一举例说明。
补充:
简单认识.net framework 中的几种缓存
web 站点中缓存的重要性毋庸置疑。很多 asp.net 开发人员在开发 web 应用系统的时候优先考虑使用的缓存并不是第三方缓存解决方案(比如分布式缓存 memcached、Redis 等等),而应该是.net framework 已经提供的多种缓存解决方案。
下面结合自己的开发经验谈谈对.net framework 中缓存的认识。
1、System.Web.Caching.Cache
估计大部分做过 asp.net 开发的人都用过这个命名空间下的缓存,我们可以直接使用 HttpContext.Current.Cache 实例而不用实例化。
当然这个命名空间下的 Cache 类是允许您实例化的,需要定制自己的缓存系统的当然可以完全自己控制如何初始化这个类。我在园子里看到过有很多文章介绍 Cache 的 CRUD 辅助类库大多数都是针对 System.Web.Caching.Cache。
需要说明的是,我们还可以通过该命名空间下的 HttpRuntime.Cache 实现 web、控制台、winform 等不同表现形式下的缓存,而且完全无需自己实例化。HttpRuntime.Cache 是之前个人开发中使用比较多的一个类,现在比较偏爱.net framework4.0 中的增强型的缓存类 MemoryCache。
2、Output Cache
众所周知,输出缓存主要分页面输出缓存和页面部分缓存。说白了,就是缓存整个页面的 html 或者部分 html,本来没什么值得讨论的,但是最近看到 dudu 的这篇博客才恍然发现,想不到使用它还真是大有讲究,我以前怎么就没有发现这个问题呢?看来发现问题和解决问题的能力同样重要,有时候前者甚至更重要啊。
3、System.Runtime.Caching
现在个人开发中使用最多的类 MemoryCache 出自这个命名空间,使用前需要引用 using System.Runtime.Caching。MemoryCache 继承自 ObjectCache, IEnumerable, IDisposable,其中 ObjectCache 是个抽象类。用过 MemoryCache 的人都知道,这个 MemoryCache 有一个属性叫 Default,通常可以像下面这样使用:
private static ObjectCache memCache = MemoryCache.Default; 当然我们也完全可以通过 public MemoryCache(string name, NameValueCollection config = null)构造函数初始化缓存对象。
接着我们可以在 web.config 文件中配置每个 MemoryCache 实例运行的内存使用配额方案和配额检查周期,下面示例参考MSDN:
<memoryCache>
<namedCaches>
<add name=”Default” cacheMemoryLimitMegabytes=”10″ pollingInterval=”00:02:00″/>
</namedCaches>
</memoryCache>
</system.runtime.caching>
这些配置意义在于可以明确指定每个 MemoryCache 实例运行的内存使用配额方案和配额检查周期。比如我们可以通过配置来按需更改 MemoryCache.Default 实例的内存配额(不知道缓存可用最大内存是多少,可能还是传说中的 800M 左右)。缓存过期策略与其它的缓存框架大同小异,与 System.Web.Caching.Cache 的不同只是名称不叫 CacheDependency,而叫ChangeMonitor,并且提供了基于文件和目录的缓存依赖策略。关于缓存过期策略也比较有探讨的必要,不过个人开发中比较偏重于数据缓存和替换,目前还没有接触和使用过比较完美的过期策略解决方案。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148429.htm