Memcached 缓存个体,对象,泛型,表
转自 :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() + ";";
}
}
}
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 压缩
,当flag=MEMCACHE_COMPRESSED的时侯,数据很小的时候不会采用zlib压缩,只有数据达到一定大小才对数据进行zlib压缩。(没有具体的测试数据进行压缩的最小值是多少)
expire 过期时间,0 为永不过期,可使用 unix 时间戳格式或距离当前时间的秒数,设为秒数时不能大于 2592000(30
天)
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 压缩
,当flag=MEMCACHE_COMPRESSED的时侯,数据很小的时候不会采用zlib压缩,只有数据达到一定大小才对数据进行zlib压缩。(没有具体的测试数据进行压缩的最小值是多少)
expire 过期时间,0 为永不过期,可使用 unix 时间戳格式或距离当前时间的秒数,设为秒数时不能大于 2592000(30
天)
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 压缩
,当flag=MEMCACHE_COMPRESSED的时侯,数据很小的时候不会采用zlib压缩,只有数据达到一定大小才对数据进行zlib压缩。(没有具体的测试数据进行压缩的最小值是多少)
expire 过期时间,0 为永不过期,可使用 unix 时间戳格式或距离当前时间的秒数,设为秒数时不能大于 2592000(30
天)
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_key,another_key不存在 $var = array();
//如果some_key,another_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);
?>
Memcached 缓存个体,对象,泛型,表的更多相关文章
- Tomcat集群下获取memcached缓存对象数量,统计在线用户数据量
项目需要统计在线用户数量,系统部署在集群环境下,使用会话粘贴的方式解决Session问题.要想得到真实在线用户数,必须是所有节点的总和. 这里考虑使用memcached存放用户登录数据,key为use ...
- 受教了,memcache比较全面点的介绍,受益匪浅,适用memcached的业务场景有哪些?memcached的cache机制是怎样的?在设计应用时,可以通过Memcached缓存那些内容?
基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...
- Memcached缓存入门篇
Asp.Net中使用Couchbase——Memcached缓存入门篇 前言 本文的主要目的就是简单的进行使用Memcached.这是Memchahed的官网http://memcached.org/ ...
- Memcached缓存系统介绍及安装
1.什么是Memcached 1.1.Memcached概述 Memcached是一个免费的开源的.高性能的.具有又分布式内存对象的缓存系统,它通过减轻数据库负载加速动态WEB应用, 1.2.Memc ...
- Linux 下 Memcached 缓存服务器安装配置
Linux 下 Memcached 缓存服务器安装配置 [日期:2011-08-06] 来源:Linux社区 作者:Linux [字体:大 中 小] [安装Memcache服务器端]我目前的平台 ...
- MemCached缓存操作
Web项目在运行时,通常需要从数据库中进行读写.随着操作数据量的增大,以及访问量的集中,数据库的负载增加,数据库响应变慢,网站访问速度变慢的情况.Memcached就是用来解决这些问题的. Memca ...
- Python项目使用memcached缓存
前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...
- openstack (3)---------部署memcached缓存服务,keystone服务
一.memcached概念 Memcached 是一个开源的.高性能的分布式内存对象缓存系统.通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用.减轻数据库负载 ...
- Memcached 缓存系统简介
memcached官网:http://memcached.org/ What is Memcached? Memcached是一个自由开源的,高性能,高并发,分布式内存对象缓存系统. Memcache ...
随机推荐
- HOG特征-理解篇
网上去找关于HOG的资料,发现理解性的较少,并且较为冗长,为方便大家理解便自己写了篇,希望能对奋斗在特征提取第一线的同志们有所帮助: HOG即histogram of oriented gradien ...
- node.js在windows下的学习笔记(6)---安装Express
Express是什么呢? express.js是nodejs的一个MVC开发框架,并且支持jade等多种模板.对于WEB应用程序而言,会有许多诸如模板和路由这样的公共模式在的,虽然也可以自己编写代码解 ...
- 重装系统后QQ聊天记录恢复方法
重装系统后QQ聊天记录恢复方法 近日又一次安装了系统,又一次安装了腾讯的.TM,TM也是安装在之前的文件夹底下,可是聊天记录和之前的自己定义表情都不见了,看来没有自己主动恢复回来. 我这里另一个特殊的 ...
- Android使用的开发MediaRecorder录制视频
MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用Medi ...
- [设计模式1]--单例模式(SINGLETON)
搞笑解释: 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我 定义: 单例模式确保某一个类只有一个实例,而且自行实例化并向整 ...
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- Android_SeekBar
xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- Android 自学之列表选择框Spinner
列表选择框(Spinner)与Swing编程里面的Spinner不同,这里的Spinner其实就是一个列表选项框. Spinner是ViewGroup的间接子类,因此他也可作为容器使用. Spinne ...
- posix thread概述
1. 基本概念 一个Unix进程可以理解为一个线程加上地址空间.文件描述符和其他数据.异步表明事情相互独立发生, 除非有强加的依赖性. 并发指实际可能是穿行发生的事情好像同时发生一样.并行指并发序列同 ...
- unique函数 (STL)
转自http://www.cnblogs.com/heyonggang/archive/2013/08/07/3243477.html 类属性算法unique的作用是从输入序列中“删除”所有相邻的重复 ...