网站平台建设实训总结,莒南建设局网站,lnmp wordpress,网站集约化建设的好处最近#xff0c;为提高数据查询速度#xff0c;想做点缓存#xff0c;通过网上了解#xff0c;觉得#xff0c;最好使用的就是Memcached#xff1b;下面简单给大家介绍下Memcached#xff1b; 下面是两位大牛关于Memcached的介绍#xff1b;大家可以看看 http://zhoufo…最近为提高数据查询速度想做点缓存通过网上了解觉得最好使用的就是Memcached下面简单给大家介绍下Memcached 下面是两位大牛关于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的状态了。 这些数据所代表的意义如下 pid32u服务器进程ID。 uptime32u 服务器运行时间单位秒。 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_structures32u 服务器分配的连接结构的数量。 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() ;; } } } memcache 的限制 memcache单个缓存值限制为1M(1000000bytes)超过这个限制的时候会出如下错误。 ValueError: Values may not be more than 1000000 bytes in length; received 2000000 bytes memcache的keys限制为250 bytes超过这个长度会报错。 ValueError: Keys may not be more than 250 bytes in length, received 14670 bytes memcache的时间设置没限制但服务器会自动清理缓存官方好像说过最长为1个月时间(3600*24*30)。 2.6.Memcache::add 2.5.1.说明 bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] ) 添加一个要缓存的数据如果作为这个缓存的数据的键在服务器上还不存在的情况下, 2.5.2.参数 key 缓存数据的键 其长度不能超过250个字符 var 值整型将直接存储其他类型将被序列化存储 其值最大为1M flag 是否使用 zlib 压缩 ,当flagMEMCACHE_COMPRESSED的时侯数据很小的时候不会采用zlib压缩只有数据达到一定大小才对数据进行zlib压缩。没有具体的测试数据进行压缩的最小值是多少 expire 过期时间0 为永不过期可使用 unix 时间戳格式或距离当前时间的秒数设为秒数时不能大于 259200030 天 2.5.3.返回值 成功返回 TRUE失败返回 FALSE如果这个键已经存在其他方面memcache:;add()的行为与memcache::set相似 2.5.4.范例 ? $memcache_obj memcache_connect(localhost, 11211); /* procedural API */ memcache_add($memcache_obj, ‘var_key‘, ‘test variable‘, FALSE, 30); /* OO API */ $memcache_obj-add(‘var_key‘, ‘test variable‘, FALSE, 30); ? 2.6.Memcache::replace 2.6.1.说明 bool Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] ) 替换一个指定 已存在key 的的缓存变量内容 2.6.2.参数 key 缓存数据的键 其长度不能超过250个字符 var 值整型将直接存储其他类型将被序列化存储其值最大为1M flag 是否使用 zlib 压缩 ,当flagMEMCACHE_COMPRESSED的时侯数据很小的时候不会采用zlib压缩只有数据达到一定大小才对数据进行zlib压缩。没有具体的测试数据进行压缩的最小值是多少 expire 过期时间0 为永不过期可使用 unix 时间戳格式或距离当前时间的秒数设为秒数时不能大于 259200030 天 2.6.3.返回值 成功返回 TRUE失败返回 FALSE。 2.6.4.范例 ?php $memcache_obj memcache_connect(‘memcache_host‘, 11211); /* procedural API */ memcache_replace($memcache_obj, test_key, some variable, FALSE, 30); /* OO API */ $memcache_obj-replace(test_key, some variable, FALSE, 30); ? 2.7.Memcache::set 2.7.1.说明 bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] ) 设置一个指定 key 的缓存变量内容 2.7.2.参数 key 缓存数据的键 其长度不能超过250个字符 var 值整型将直接存储其他类型将被序列化存储其值最大为1M flag 是否使用 zlib 压缩 ,当flagMEMCACHE_COMPRESSED的时侯数据很小的时候不会采用zlib压缩只有数据达到一定大小才对数据进行zlib压缩。没有具体的测试数据进行压缩的最小值是多少 expire 过期时间0 为永不过期可使用 unix 时间戳格式或距离当前时间的秒数设为秒数时不能大于 259200030 天 2.7.3.返回值 成功返回 TRUE失败返回 FALSE。 2.7.4.范例 ?php /* procedural API */ /* connect to memcached server */ $memcache_obj memcache_connect(‘memcache_host‘, 11211); /* set value of item with key ‘var_key‘ using 0 as flag value, compression is not used expire time is 30 second */ memcache_set($memcache_obj, ‘var_key‘, ‘some variable‘, 0, 30); echo memcache_get($memcache_obj, ‘var_key‘); /* OO API */ $memcache_obj new Memcache; /* connect to memcached server */ $memcache_obj-connect(‘memcache_host‘, 11211); /* set value of item with key ‘var_key‘, using on-the-fly compression expire time is 50 seconds */ $memcache_obj-set(‘var_key‘, ‘some really big variable‘, MEMCACHE_COMPRESSED, 50); echo $memcache_obj-get(‘var_key‘); ? 2.8.Memcache::get 2.8.1.说明 string Memcache::get ( string $key [, int $flags ] ) array Memcache::get ( array $keys [, array $flags ] ) 获取某个 key 的变量缓存值 2.8.2.参数 key 缓存值的键 flags 如果是传址某个变量获取缓存值被set或是add的flag结果将被存于该变量 2.8.3.返回值 返回缓存的指定 key 的变量内容或者是在失败或该变量的值不存在时返回 FALSE 如果传出的key的数组中的key都不存在返回的结果是一个空数组反之则返回key与缓存值相关联的关联数组 2.8.4.范例 /* procedural API */ $memcache_obj memcache_connect(‘memcache_host‘, 11211); $var memcache_get($memcache_obj, ‘some_key‘); /* OO API */ $memcache_obj new Memcache; $memcache_obj-connect(‘memcache_host‘, 11211); $var $memcache_obj-get(‘some_key‘); /* You also can use array of keys as a parameter. If such item wasn‘t found at the server, the result array simply will not include such key. */ /* procedural API */ $memcache_obj memcache_connect(‘memcache_host‘, 11211); $var memcache_get($memcache_obj, Array(‘some_key‘, ‘another_key‘)); //如果some_keyanother_key不存在 $var array(); //如果some_keyanother_key存在 $var array(‘some_key‘‘缓存值‘, ‘another_key‘‘缓存值‘); /* OO API */ $memcache_obj new Memcache; $memcache_obj-connect(‘memcache_host‘, 11211); $var $memcache_obj-get(Array(‘some_key‘, ‘second_key‘)); ? 2.9.Memcache::delete 2.9.1.说明 bool Memcache::delete ( string $key [, int $timeout ] ) 删除某一个变量的缓存 2.9.2.参数 key 缓存的键 键值不能为null和‘’当它等于前面两个值的时候php会有警告错误。 timeout 删除这项的时间如果它等于0这项将被立刻删除反之如果它等于30秒那么这项被删除在30秒内 2.9.3.返回值 成功返回 TRUE失败返回 FALSE。 2.9.4.范例 ?php /* procedural API */ $memcache_obj memcache_connect(‘memcache_host‘, 11211); /* after 10 seconds item will be deleted by the server */ memcache_delete($memcache_obj, ‘key_to_delete‘, 10); /* OO API */ $memcache_obj new Memcache; $memcache_obj-connect(‘memcache_host‘, 11211); $memcache_obj-delete(‘key_to_delete‘, 10); ? 转载于:https://www.cnblogs.com/panshengqiang/p/3605599.html