转自 :http://www.cnblogs.com/panshengqiang/p/3605599.html
下面是两位大牛关于Memcached的介绍;大家可以看看
http://zhoufoxcn.blog.51cto.com/792419/528212
http://leepiao.blog.163.com/blog/static/48503130201104103344851/
如下是我的总结:
Memcached是一个命令行窗口程序,可以在命令行窗口中启动也可以封装在系统服务中启动。在启动Memcached时需要提供一些必须的参数,指定Memcached运行时监听的端口和最大使用的内存大小等。如果缓存的数据大小超过指定内存,那么Memcached就会按照LRU(Least Recently Used)算法自动“删除”不使用的缓存(标记为失效),新增的缓存数据就可以使用这些标记为失效的数据所占用的内存,这样就不用担心Memcached超出所指定内存的问题。此外,为了提高性能,在缓存数据过期后Memcached并不是从物理内存中删除缓存的数据,仅仅在取出改数据的时候检查它是否已经过了有效期。
目前有多种平台的Memcached版本,比如Linux、FreeBSD、Solaris (memcached 1.2.5以上版本)、Mac OS X及Windows平台,在Windows平台上还有32位和64位版本。
Memcached有一套协议,利用这套协议可以对Memcached进行数据存取和查看Memcached的状态,很多程序语言都依据这套协议来操作Memcached,比如PHP、Java、C、C++及C#等。
获取了对应平台的Memcached版本就可以运行Memcached了。在这里仅以Windows平台上的32位Memcached为例
1 把memcached文件夹放在指定路径,我选择了C盘根目录
2 使用管理员身份(切记)在命令行按照memcached;
memcached.exe -d install
3
在客户端还可以通过telnet来查看和操作Memcached,前提是服务器端和客户端都支持Telnet协议,在Windows7和Windows2008中默认都不支持,需要在控制面板中安装和启用。
首先打开控制面板,然后点击“打开或关闭Windows功能”,如下图所示:
点击“打开或关闭Windows功能”之后会看到当前系统启用的功能的状态,根据当前机器选择打开Telnet服务器端或者客户端功能,如下图所示:
经过上面的操作之后就可以在客服端远程查看Memcached的状态或者操作Memcached了。下面的命令就是连接到Memcached:
telnet localhost 11121
连接之后会出现一个命令行窗口,在这个命令行窗口中输入"stats"就可以看到当前Memcached的状态,如下就是刚刚启动的Memcached的状态数据:
STAT pid 852
STAT uptime 1399
STAT time 1300979378
STAT version 1.2.5
STAT pointer_size 32
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 3
STAT total_connections 5
STAT connection_structures 4
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT evictions 0
STAT bytes_read 23
STAT bytes_written 415
STAT limit_maxbytes 67108864
STAT threads 1
END
通过这个数据我们就可以了解Memcached的状态了。
这些数据所代表的意义如下:
pid:32u,服务器进程ID。
uptime:32u, 服务器运行时间,单位秒。
time :32u, 服务器当前的UNIX时间。
version :string, 服务器的版本号。
curr_items :32u, 服务器当前存储的内容数量 Current number of items stored by the server
total_items :32u, 服务器启动以来存储过的内容总数。
bytes :64u, 服务器当前存储内容所占用的字节数。
curr_connections :32u, 连接数量。
total_connections :32u, 服务器运行以来接受的连接总数。
connection_structures:32u, 服务器分配的连接结构的数量。
cmd_get :32u, 取回请求总数。
cmd_set :32u, 存储请求总数。
get_hits :32u, 请求成功的总次数。
get_misses :32u, 请求失败的总次数。
bytes_read :64u, 服务器从网络读取到的总字节数。
bytes_written :64u, 服务器向网络发送的总字节数。
limit_maxbytes :32u, 服务器在存储时被允许使用的字节总数。
上面的描述中32u和64u表示32位和64位无符号整数,string表示是string类型数据。
在.NET中应用Memcached
下面是一个Enyim Memcached的例子:
缓存单体;对象,泛型;表都可以
需要引用dll Memcached.ClientLibrary
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Memcached.ClientLibrary;
using System.Collections;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SockIOPool pool = SockIOPool.GetInstance();
string[] servers = { "127.0.0.1:11211" };
pool.SetServers(servers);
pool.MinConnections = 3;
pool.MaxConnections = 5;
pool.InitConnections = 3;
pool.SocketConnectTimeout = 5000;
pool.Initialize();
}
private void button1_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
client.EnableCompression = false;
client.Set("key1", "单体测试");
MessageBox.Show("key1:单体测试");
//Person demo = new Person { UserId = 1, UserName = "李刚" };
//client.Set("demo", demo);
//client.Get("demo");
//Console.WriteLine("———————–Memcached Set 设置值————————–");
//client.Set("key1", "value1");
//Console.WriteLine(client.Get("key1"));
//Console.WriteLine("———————–Memcached Add 设置值————————–");
//client.Add("key2", "value2");
//Console.WriteLine(client.Get("key2"));
//client.Set("key2", "value1 value2");
//Console.WriteLine(client.Get("key2"));
//Console.WriteLine("———————–Memcached Replace 设置值————————–");
//client.Replace("key2", "value3");
//Console.WriteLine(client.Get("key2"));
//Console.WriteLine("———————–Memcached 键值是否存在————————–");
//if (client.KeyExists("key2"))
//{
// Console.WriteLine("键key2 存在");
//}
//if (client.KeyExists("hechen") == false)
//{
// Console.WriteLine("键hechen 不存在");
//}
//Console.WriteLine("———————–Memcached 删除数据————————–");
//client.Add("key4", "value4");
//Console.WriteLine("key4==>" + client.Get("key4"));
//client.Delete("key4");
//if (!client.KeyExists("key4"))
//{
// Console.WriteLine("key4 已将删除");
//}
//Console.WriteLine("———————–Memcached 数据过期————————–");
//client.Add("key5", "value5", DateTime.Now.AddMilliseconds(5000));
//Console.WriteLine(client.Get("key5"));
//System.Threading.Thread.Sleep(6000);
//Console.WriteLine("过期: " + client.Get("key5"));
}
private void button2_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
txt01.Text = client.Get("key1").ToString();
}
private void button4_Click(object sender, EventArgs e)
{
Person person = new Person { UserId = 1, UserName = "李刚" };
MemcachedClient client = new MemcachedClient();
client.EnableCompression = false;
client.Set("key2", person);
MessageBox.Show("key2:对象PersonUserId = 1, UserName =李刚");
}
private void button3_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
object demo = client.Get("key2");
Person cc = demo as Person;
txt01.Text = cc.UserId.ToString() + ";" + cc.UserName.ToString();
}
private void button6_Click(object sender, EventArgs e)
{
ArrayList arraylist = new ArrayList();
arraylist.Add("泛型集合测试1");
arraylist.Add("泛型集合测试2");
arraylist.Add("泛型集合测试3");
MemcachedClient client = new MemcachedClient();
client.EnableCompression = false;
client.Set("key3", arraylist);
MessageBox.Show("key3:泛型集合测试1,泛型集合测试2,泛型集合测试3");
}
private void button5_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
object demo = client.Get("key3");
ArrayList arraylist = demo as ArrayList;
int count = arraylist.Count;
txt01.Text = arraylist[0].ToString() + ";" + arraylist[1].ToString() + ";" + arraylist[2].ToString() + ";";
}
private void button8_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
string str = "";
dt.Columns.Add("id");
dt.Columns.Add("name");
DataRow dr = dt.NewRow();
for (int i = 0; i < 3; i++)
{
dr = dt.NewRow();
dr["id"] = "00" + i.ToString();
dr["name"] = "姓名" + i.ToString();
dt.Rows.Add(dr);
str += dr["id"] + "," + dr["name"] + ";";
}
MemcachedClient client = new MemcachedClient();
client.EnableCompression = false;
client.Set("key4", dt);
MessageBox.Show("key4:" + str);
}
private void button7_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
object demo = client.Get("key4");
DataTable dt = demo as DataTable;
int count = dt.Rows.Count;
txt01.Text = dt.Rows[0][0].ToString() + "," + dt.Rows[0][1].ToString() + ";" + dt.Rows[1][0].ToString() + "," + dt.Rows[1][1].ToString() + ";" + dt.Rows[2][0].ToString() + "," + dt.Rows[2][1].ToString() + ";";
}
}
}
原文:http://www.cnblogs.com/lijiasnong/p/4934381.html