MemcachedUI-一款基于.NET MVC编写的Memcached监控软件
一、起源
服务器上使用了Memcached做缓存加速,但是想查看Memcached状态的时候都只能telnet 127.0.0.1 11211 这样来查看,甚是累人,就想能不能做一款web端的软件,方便在PC and 手机上查看,所以就有了这一款软件(属于闲暇时光写的,如有不对,请指正)
二、安装Memcached And 新建Web项目
安装教程略过,因为网上有许多教程,如有不懂请留言问我吧,我电脑上安装了4个Memcached作为测试用

新建一个MVC的项目(其他也行,随自己),并在Nuget上搜索安装包Memcached.ClientLibrary
三、主要代码演示与讲解
首先,我们新建一个类MemcachedHelper,代码如下
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Memcached.ClientLibrary;
using Newtonsoft.Json; namespace MemcachedUI.Web.Models
{
public class MemcachedHelper
{
private MemcachedClient _mc; public MemcachedHelper(string[] servers)
{
//初始化池
SockIOPool pool = SockIOPool.GetInstance();
pool.SetServers(servers);
pool.InitConnections = ;
pool.MinConnections = ;
pool.MaxConnections = ;
pool.SocketConnectTimeout = ;
pool.SocketTimeout = ;
pool.MaintenanceSleep = ;
pool.Failover = true;
pool.Nagle = false;
pool.Initialize();
_mc = new MemcachedClient { EnableCompression = false };
} /// <summary>获取Memcached的状态
///
/// </summary>
/// <returns></returns>
public Hashtable Stats()
{
return _mc.Stats();
} /// <summary>获取设置的服务器集群
///
/// </summary>
/// <returns></returns>
public static ServersModel GetServerList()
{
StreamReader sr = System.IO.File.OpenText(System.Web.HttpContext.Current.Server.MapPath("~/Config/Servers.json"));
StringBuilder jsonArrayTextTmp = new StringBuilder();
string input;
while ((input = sr.ReadLine()) != null)
{
jsonArrayTextTmp.Append(input);
}
sr.Close();
ServersModel model = JsonConvert.DeserializeObject<ServersModel>(jsonArrayTextTmp.ToString());
return model;
}
}
}
Memcached的列表放在/Config/Servers.json文件中,这里是我本地的4个Memcached实例
{
"Data": [
{
"ServerName": "本地服务器-1",
"Address": "127.0.0.1:11211"
},
{
"ServerName": "本地服务器-2",
"Address": "127.0.0.1:11212"
},
{
"ServerName": "本地服务器-3",
"Address": "127.0.0.1:11213"
},
{
"ServerName": "本地服务器-4",
"Address": "127.0.0.1:11214"
}
]
}
HomeController主要为展示页面
public ActionResult Index()
{
var model = MemcachedHelper.GetServerList();
string[] servers = model.Data.Select(t => t.Address).ToArray(); ViewBag.ht = new MemcachedHelper(servers).Stats();
ViewBag.ServerList = model;
return View();
} public ActionResult Node(string server)
{
ViewBag.ht = new MemcachedHelper(new string[] { server }).Stats();
return View();
}
首页集群页面代码如下
@{
ViewBag.Title = "集群视图";
}
@using System.Collections;
@using MemcachedUI.Web.Models
<div class="row">
@{
ServersModel model = ViewBag.ServerList;
Hashtable ht = (Hashtable)ViewBag.ht;
foreach (DictionaryEntry de in ht)
{
Hashtable info = (Hashtable)de.Value;
string servsername = de.Key.ToString();
foreach (var datum in model.Data)
{
if (datum.Address == de.Key.ToString())
{
servsername = datum.ServerName;
continue;
}
}
<div class="col-md-3">
<div class="panel panel-primary">
<div class="panel-heading" onclick="">
@Html.Raw(servsername) 概况
</div>
<div class="panel-body">
<div class="container-fluid">
<div><label>服务器进程ID</label>:@Html.Raw(info["pid"].ToString())</div>
<div><label>服务器运行时间</label>:@Html.Raw(info["uptime"].ToString())</div>
<div><label>服务器当前的UNIX 时间</label>:@Html.Raw(info["time"].ToString())</div>
<div><label>版本号</label>:@Html.Raw(info["version"].ToString())</div>
<div><label>服务器操作系统位数</label>:@Html.Raw(info["pointer_size"].ToString())</div>
<div><label>当前连接数</label>:@Html.Raw(info["curr_connections"].ToString())</div>
<div><label>总连接数</label>:@Html.Raw(info["total_connections"].ToString())</div>
<div><label>获取请求数量</label>:@Html.Raw(info["cmd_get"].ToString())</div>
<div><label>存储请求数量</label>:@Html.Raw(info["cmd_set"].ToString())</div>
<div><label>flush请求的数量</label>:@Html.Raw(info["cmd_flush"].ToString())</div>
<div><label>获取成功的总次数</label>:@Html.Raw(info["get_hits"].ToString())</div>
<div><label>获取失败的总次数</label>:@Html.Raw(info["get_misses"].ToString())</div>
<div><label>删除失败次数</label>:@Html.Raw(info["delete_misses"].ToString())</div>
<div><label>删除命中次数</label>:@Html.Raw(info["delete_hits"].ToString())</div>
<div><label>递增失败次数</label>:@Html.Raw(info["incr_misses"].ToString())</div>
<div><label>递增命中次数</label>:@Html.Raw(info["incr_hits"].ToString())</div>
<div><label>递减命中次数</label>:@Html.Raw(info["decr_misses"].ToString())</div>
<div><label>递减失败次数</label>:@Html.Raw(info["decr_hits"].ToString())</div>
<div><label>Cas 原子设置操作失败次数</label>:@Html.Raw(info["cas_misses"].ToString())</div>
<div><label>Cas 命中次数</label>:@Html.Raw(info["cas_hits"].ToString())</div>
<div><label>Cas 操作找到key, 但是版本过期,没有设置成功</label>:@Html.Raw(info["cas_badval"].ToString())</div>
<div><label>认证次数(包括成功和失败)</label>:@Html.Raw(info["auth_cmds"].ToString())</div>
<div><label>认证失败次数</label>:@Html.Raw(info["auth_errors"].ToString())</div>
<div><label>总共获取的数据量</label>:@Html.Raw(info["bytes_read"].ToString())</div>
<div><label>总写入数量数</label>:@Html.Raw(info["bytes_written"].ToString())</div>
<div><label>总允许写入的数据量</label>:@Html.Raw(info["limit_maxbytes"].ToString())</div>
<div><label>允许的总连接数</label>:@Html.Raw(info["accepting_conns"].ToString())</div>
<div><label>监听失败的次数</label>:@Html.Raw(info["listen_disabled_num"].ToString())</div>
<div><label>需要的工作线程数</label>:@Html.Raw(info["threads"].ToString())</div>
<div><label>conn_yields</label>:@Html.Raw(info["conn_yields"].ToString())</div>
<div><label>已用缓存空间</label>:@Html.Raw(info["bytes"].ToString())</div>
<div><label>当前缓存item数量</label>:@Html.Raw(info["curr_items"].ToString())</div>
<div><label>总的存储缓存item数量</label>:@Html.Raw(info["total_items"].ToString())</div>
<div><label>通过删除item释放内存的次数</label>:@Html.Raw(info["evictions"].ToString())</div>
</div>
</div>
</div>
</div>
}
}
</div>
运行截图



四、后语
本文只是简单的将各个属性代表的意思给读取出来,大家可以根据自己的要求修改,如添加命中率等
闲暇时间写的,如有不对,请指正,谢谢
MemcachedUI-一款基于.NET MVC编写的Memcached监控软件的更多相关文章
- 几款开源的图形化Redis客户端管理软件
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/98.html?1455870209 Redis是一个超精简的基于内存的键值 ...
- 几款开源的图形化Redis客户端管理软件推荐
Redis是一个超精简的基于内存的键值对数据库(key-value),一般对并发有一定要求的应用都用其储存session,乃至整个数据库.不过它公自带一个最小化的命令行式的数据库管理工具,有时侯使用起 ...
- 简易的highcharts公共绘图模块封装--基于.net mvc
运行效果: 之所以选择这个图表插件,是因为它较其他同类插件轻量且中文文档详细完整,Demo丰富,配置使用简单.具体内容请登录中文官网:http://www.hcharts.cn/ 项目详细: 项目环境 ...
- 基于Spring MVC 实现拦截器
Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...
- PureMVC--一款多平台MVC框架
官网:http://puremvc.org/ 下载:https://github.com/PureMVC/puremvc-csharp-multicore-framework/tree/1.1.0 A ...
- SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器
SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器 天幕如遮,唯我一刀可碎千里华盖,纵横四海而无阻,是谓碎遮 --取自<有匪> 写在前面 这段时间很多时间都在忙着编写该项目 ...
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构
基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业 ...
- 基于C#和Asp.NET MVC开发GPS部标监控平台
基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)
http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通 ...
随机推荐
- VSCode 绿色版(zip压缩包) 添加右键菜单 使用VSCode 打开文件或文件夹
微软官方下载VSCode 可以下载exe安装外还可以下载zip 压缩包 下载地址: https://code.visualstudio.com/Download 但是zip压缩包却没有了 右键使用VS ...
- python的语法小结
break 与continue的区别: 1.break是直接中断全部循环 2.continue则是在只不执行此次所循环的东西,其它循环依旧执行,比方说只是跳过第4次循环,第5次循环照常进行. \n 表 ...
- Git的安装和使用
在CentOS 6.x/7.x上安装git及最新版 方式一.yum安装 # yum install git 通过yum方式安装,版本比较旧,CentOS6.5上安装好是1.7.1版.如果想安装最新版或 ...
- ntelliJ IDEA 仿照vs2017快捷键设置,以及字体颜色设置
因后期工作需要使用java技术栈,所以近期抽空下载了intelliJ IDEA工具,但是作为一个Net开发者,在使用了vs以后,感觉在使用别的开发工具感觉就是没法和vs相比,毕竟vs被称为宇宙最强id ...
- unittest_API自动化脚本应用
import urllib.request import urllib.parse import json import unittest from HTMLTestRunner import HTM ...
- 卸载HDP大数据平台
使用以下说明卸载HDP: 停止所有已安装的HDP服务.请参阅HDP参考指南中的停止HDP服务. 如果安装了Knox,请在所有群集节点上运行以下命令: 对于RHEL / CentOS / Oracle ...
- APIView源码简单分析图
APIView源码简单分析 !声明:下面这个dispatch分发方法不在是父类View里的dispatch了,APIView重新封装了这个dispatch.(整个核心就是initialize_requ ...
- python视频地址和链接
算法 链接:http://pan.baidu.com/s/1nvHmcZJ 密码:fwjg常用库 链接:http://pan.baidu.com/s/1o8uPvPg 密码:yp3w进阶-高级代码 链 ...
- 从git远程仓库Checkout项目到本地
一.登录coding 并且项目已创建好 已经是项目的组员 二.打开idea 1.弹出如下页面 复制远程项目上的SSH(URL)到下框URL 并且Test测试 成功就Clone即可 2.Clone ...
- Python序列结构--字典
字典:反映对应关系的映射类型 字典(dict)是包含若干“键:值”元素的无序可变序列 字典中元素的“键”可以是python中任意不可变数据,例如整数.实数.复数.字符串.元组等类型可哈希数据,“键”不 ...