在本地和32位的服务器上都是可以的,很是郁闷
已经弄了一个月了,还是没搞清楚
请各位大神支支招看看是哪里出了问题,小弟先谢过了
下面是我的缓存类代码
public static class Class1 { private readonly static System.Web.Caching.Cache cache = System.Web.HttpRuntime.Cache; /// <summary> /// 根据KEY清除缓存 /// </summary> /// <param name="strCacheKey"></param> public static void removeCache(string strCacheKey) { cache.Remove(strCacheKey); } /// <summary> /// 根据KEY获取缓存中的数据 /// </summary> public static object getCache(string strCacheKey) { return cache.Get(strCacheKey); } /// <summary> /// 保存数据到缓存 /// </summary> public static void setCache(string strCacheKey, object data) { cache.Insert(strCacheKey, data, null, DateTime.Now.AddDays(1), TimeSpan.Zero); } }
下面是我说的跨页无法读取的两个页面代码
也贴出来让大家看看那里有问题吧
public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { return; } if (Class1.getCache("aa") == null) { Class1.setCache("aa", "page_load"); } }
protected void btn2_Click(object sender, EventArgs e) { object obj = Class1.getCache("aa"); if (obj == null) { ClientScript.RegisterStartupScript(GetType(), "e", "alert('Not Value');", true); } else { ClientScript.RegisterStartupScript(GetType(), "e", string.Format("alert('content:{0}');", obj), true); } } }
public partial class WebForm2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btn1_Click(object sender, EventArgs e) { object obj = Class1.getCache("aa"); if (obj == null) { ClientScript.RegisterStartupScript(GetType(), "e", "alert('Not Value');", true); } else { ClientScript.RegisterStartupScript(GetType(), "e", string.Format("alert('content:{0}');", obj), true); } } protected void btn2_Click(object sender, EventArgs e) { Class1.setCache("aa", TextBox1.Text); } protected void btn3_Click(object sender, EventArgs e) { Class1.removeCache("aa"); } }
webform2设置的Key:aa value:aa 缓存无法在webform1页面获取 ,在本页可以
还有一个问题,我之前做的缓存无法清除 我怀疑跟上面是一个原因
如下:
HttpRuntime.Cache.Remove("Templtes");//模版缓存
HttpRuntime.Cache.Remove("LableAll");//所有标签缓存
执行完这些代码之后,我读取_LableAll
public static DataTable _LableAll //所有标签缓存 { get { if (System.Web.HttpRuntime.Cache["LableAll"] == null) { System.Web.HttpRuntime.Cache.Insert("LableAll", GetAllLable(), null, DateTime.Now.AddDays(1), TimeSpan.Zero); //用来存储所有的标签的内容 } return (DataTable)System.Web.HttpRuntime.Cache["LableAll"]; } }
还是直接读取的缓存
GetAllLable()是一个方法,获取所有标签的方法,返回一个DataTable
如果有知道的,麻烦告知一下,被老板骂死了
就一个清除缓存,做了这么久
我自己也快崩溃了
谢谢。就200豆豆
在64位的服务器上,应用程序池是不是设置了Web Garden(相关博文)?
你好,我刚刚看了一下 我们的服务器确实是设置了Web Garden 为27 ,
但是我在32位服务器上面设置了Web Garden为6 也可以跨页访问我设置的缓存的,
@alone__: HttpRuntime.Cache只在同一个进程中有效,使用Web Garden建议缓存使用Memcached。
@alone__: HttpRuntime.Cache是服务器端缓存,Memcached是分布式缓存
@alone__: 不是大材小用
@alone__:
下载安装Couchbase(http://www.couchbase.com/),然后配置为Memcached服务器;
然后在项目中引用EnyimMemcached(https://github.com/enyim/EnyimMemcached),通过它访问Memcached服务器。
园友子里的相关博文:初用 Couchbase Server
@alone__: 嗯,安装到服务器,你用的是什么浏览器?
@alone__: 换Chrome或Firefox试试
@alone__: 下载时可以选择x64
@dudu: dudu老大,出问题了, 我下载32位的Couchbase安装在32位的服务器上做测试,安装好了之后index.html页面一直是加载状态
ie下面还报错,现在无法传图 我把消息发给你看看
“行:161
char:1
错误:‘ViewSection’未定义
代码:0
url:http://localhost:8091/index.html”
@alone__: 服务器上用的是什么浏览器?
@alone__: 是的,是IE的增强安全机制让js没有加载,安装Firefox。我现在配置新服务器,首先做的就是安装Firefox。
@dudu: 麻烦你了,我还想问一下
Available Samples
1 beer-sample
2 gamesim-sample
这个怎么选 1还是2
@alone__: 都不选
@alone__: Administrator
@alone__: 你找一个支持.NET Framework 2.0的memcached客户端即可
@dudu:
public static class CacheHelper { readonly static object obj = new object(); readonly static MemcachedClient mc;// 获得客户端实例 static CacheHelper() { if (mc==null) { lock (obj) { if (mc==null) { mc = new MemcachedClient(); mc.EnableCompression = false; mc.PoolName = Global.MEMCACHED_INSTANCE_NAME;//设置连接池实例名称 } } } } public static void SetCache(string key,object data)//设置缓存,期限为一天 { mc.Set(key, data, DateTime.Now.AddDays(1)); } public static object GetCache(string key)//通过key获取对应的缓存 { if (mc.KeyExists(key)) { return mc.Get(key); } return null; } public static void RemoveCache(string key)//删除指定key的缓存 { if (mc.KeyExists(key)) { mc.Delete(key); } } }
@dudu:dudu老大, 我还有一个问题想问你,
这个Memcached缓存是根据需要缓存的内容大小来申请缓存空间的,
如果缓存内容突然变多了,它是怎么处理的。还能缓存吗。
我缓存的内容是动态改变的,我是直接把Dictionary<string,string>缓存起来的,
开始很小,慢慢的会增加
还有,听说默认设置缓存的内容不能超过1MB,
哪里能设置?
问题有点多,嘿嘿,麻烦您能告诉我吗
@alone__: 既然是静态类的静态构造函数,if (mc==null) 与 lock (obj) 都是没必要的
@alone__:
缓存的内容的确不能超过1MB,我也没找到修改的地方。如果有很多内容超过1M,建议用Couchbase的NoSQL功能(在配置bucket时选择couchbase),而且能持久化。
另外注意的是,缓存的实体的类都要加上[Serializable]标记。
@alone__: 是静态构造函数是线程安全的,http://stackoverflow.com/questions/7095/is-the-c-sharp-static-constructor-thread-safe
@alone__: couchbase有专门的客户端,详见http://www.couchbase.com/communities/net/getting-started
@dudu:dudu老大, 我打算用很多个Dictionary 一一缓存这样效率有保障吗
@alone__: 不了解为什么要缓存Dictionary,我们没遇到过这样的场景
@dudu: 怎么说呢,我存数据的时候key是确定的,取数据也一样,
但是我移除缓存的时候,key是 不确定的
但是可以确定key里面一定包含某个值,
我的key是组合key
@dudu:
我举个例子吧,我有一头猪
卖到日本可能是100日币,卖到美国又是70美元(假如)
我现在需要缓存一头猪对应多少日币和多少美元
cache就是“猪+日本”(key)=100(value) and “猪+美国”=70
如果我还养鸭子,那就是“鸭+日本”=50 and “鸭+美国”=20
但是现在猪涨价了,猪对应的缓存需要更新
我需要移除猪的缓存,但我只知道它是猪 我没辙了,
所以我需要把key设为猪,然后猪对应的日币和美元都存到Dictionary里面
dictionary里面 就是“猪+日本”=“100” and “猪+美国”=“70”
cache里面就是“猪”=Dictionary(猪) “鸭”=dictionary(鸭)
大概就是这样
能看懂吗
@alone__: 如果key不确定,说明设计有问题
@alone__: 不能看懂,相信你自己能解决这个问题
@dudu: 好吧, 我说的有点多,你也不必懂
现在我还有一个问题,memcachedClient有类似Dictionary遍历所有key的属性keys吗
@alone__: 没有,你这样的设计是有问题的
@alone__: Key的不确定
@dudu: 谢谢,麻烦你了。
我只能先把功能实现在来考虑合不合理的问题了
要不然,得滚蛋了。
@dudu: FlushAll是清除全部缓存的方法吗
@alone__: 这个我没用过
@dudu: 老大要我直接把缓存数据写入硬盘,
或者为缓存单独写一个服务
总之就是不肯装couchbase server服务端,
这种方法没用了 ,
请问dudu老大有相关方面的资料吗
我现在一头雾水,单独写服务,我勒个去 没写过不会呀,
@alone__: 可以考虑做成WCF服务
@dudu:
谢谢,
http://www.cnblogs.com/zeroone/archive/2012/04/18/2454776.html
你看这篇文章最后一段说的那种可以吗?
跟你说的WCF哪一种比较好
@alone__: 那种方式我没研究过
@dudu: dudu老大 WCF支持.netframework2.0吗?
@alone__: 不支持
@dudu: 我想问,如果我用。netframe4.0的话,
用wcf做缓存 可以直接用Httpruntime.Cache来存数据吗
@alone__: 可以
@dudu:
我在服务端明明只写了一个参数,
为啥在客户端调用的时候多出一个参数来,
bool expiressSpecified(就这个)
@dudu: 我传object类型,
怎么老报不能生成XML异常
怎么解决啊,
楼主,我把你的代码复制到我的本地,测试一点问题都没有,
我的也是64位的系统,
你把你的IIS重新启动一下试试呢,
或是直接把机器重启一下试试,
还有就是请问下你,你的服务器是什么版本的什么系统呢.?
重启没用,重启过很多次了
每次传dll文件到bin目录服务器都重启,而且频繁的时候服务器直接挂了
至于你说的服务器版本,我也不知道诶,
我只有一个ftp能给服务器传文件和下文件
不过我想很可能是window server 2008
不管怎么样,谢了