怎么用命令查看tomcat在memcached中的缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用命令查看tomcat在memcached中的缓存相关的知识,希望对你有一定的参考价值。

一、存储命令

存储命令的格式:

1
2

<command name> <key> <flags> <exptime> <bytes>
<data block>

参数说明如下:

<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:
<system.runtime.caching>
<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,并且提供了基于文件和目录的缓存依赖策略。关于缓存过期策略也比较有探讨的必要,不过个人开发中比较偏重于数据缓存和替换,目前还没有接触和使用过比较完美的过期策略解决方案。
参考技术A 一、查看代码:
使用命令【stats items】查询查询到所有的slab,再使用命令【cachedump 1 0】命令找出所有的Key信息。但过期的key也会被查询出来,所以需要对all keys执行一遍查询,过滤掉过期的key:

Iterator<Map<String, String>> iterSlabs = client.getStats("items").values().iterator();
Set<String> set = new HashSet<String>();
while(iterSlabs.hasNext())
Map<String, String> slab = iterSlabs.next();
for(String key : slab.keySet())
String index = key.split(":")[1];
set.add(index);



//统计
List<String> list = new LinkedList<String>();
for(String v : set)
String commond = "cachedump ".concat(v).concat(" 0");
Iterator<Map<String, String>> iterItems = client.getStats(commond).values().iterator();
while(iterItems.hasNext())
Map<String, String> items = iterItems.next();
list.addAll(items.keySet());



return client.getBulk(list);

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

tomcat有没有运行成功如何查看

首先启动linux
然后进入到tomcat安装目录 cd/tomcat*
/apache-tomcat-6.0.26/bin下运行 #./startup.sh start 开始运行命令

停止tomcat时运行命令: #./shutdown.sh start

远程查看tomcat的控制台:
进入tomcat/logs/文件夹下
键入指令:tail -f catalina.out 就可以查看控制台了
或者是使用bin目录下的catalina.sh run命令,如果能进入控制台,说明tomcat启动成功
参考技术A 据说开发工具IDEA新版本自带有Tomcat,暂且不管。

今天从下载到安装、再到配置运行,了解一遍Tomcat。

毕竟若是这其中的很多问题都不知道,都不会解决,以后也不好意思说自己有开发经验。

一、Tomcat的引入
先了解下服务器基本概念。

服务器硬件:就可以将其理解成一台电脑,只不过服务器的处理能力一般都比常用电脑强大。
服务器软件:也就是一个应用程序,服务器硬件需要安装软件才能提供服务。
而Tomcat就是一个Web应用服务器软件,当然服务器软件还有其它的很多,但都不管,目前只学Tomcat。

原因很简单,因为它是开源免费的。

1下载Tomcat

网上搜索Tomcat找到其官网即可下载:

①Tomcat8

现在最新版已经到Tomcat10了,下哪个版本就看个人的选择了,我选择的是Tomcat8。

②下载安装包

如果是Linux系统,下载zip,也就是第一个。
如果是苹果系统,下载tar.gz,也就是第二个。
如果是32位Windows系统,下载32-bit。
如果是64位Windows系统,下载64-bit。
下载好后会得到一个压缩包,也就是③

④Tomcat文件夹

个人对这些文件夹的理解也不算透彻,大致说下自己的理解:

bin文件夹:运行程序的地方。
conf文件夹:configuration的简写,在里面可以配置各种参数。
lib文件夹:library的简写,就是库的意思,我看了下里面全都是Java各种jar包。莫非Tomcat就是使用Java语言开发的?
logs文件夹:也就是存放日志的地方。
temp文件夹:存放缓存的地方。
webapps文件夹:app是应用的意思,也就是存放web应用的地方。
2Tomcat启动与关闭

Tomcat是免安装版的,不用一步步安装直接就可以启动。

①bin文件夹

批处理文件startup.bat,点击即可运行Tomcat。
批处理文件shutdown.bat,点击即可关闭Tomcat。
如何判断Tomcat是否运行成功?

②在浏览器输入路径localhost:8080

localhost也就是本地ip,Tomcat的默认端口就是8080。也就是说输入该路径,即可访问本地运行的Tomcat。

如果运行成功,会出现一个官方提供的页面。
如果运行失败,会无响应。
二、Tomcat安装各种问题
1点击startup.bat一闪而退

解决方法:先将startup.bat文件使用编辑器打开(注意是右键在记事本或者notpad++打开,而不是运行),在文本最后加上一个pause。

再点击即可根据提示找寻是出了什么问题:

以上是关于怎么用命令查看tomcat在memcached中的缓存的主要内容,如果未能解决你的问题,请参考以下文章

linux 下查看进程用啥命令

如何查看 memcache 中的数据

怎么看tomcat 版本?

如何查看Memcached运行状态

memcached tomcat maven 学习记录

如何在Windows平台下安装Memcached