///
/// 清空方法的缓存
///
public void ClearCachedResults()
{
_cache.Clear();
}
这样,我们处理好后,在一个业务调用类里面进行设置缓存标志即可,如下代码所示。
///
/// 获取用户全部简单对象信息,并放到缓存里面
///
///
[Cache(ExpirationPeriod = 1)]
public static List GetSimpleUsers(int userid)
{
Thread.Sleep(500);
//return CallerFactory.Instance.GetSimpleUsers();
//模拟从数据库获取数据
List list = new List();
for (int i = 0; i < 10; i++)
{
var info = new SimpleUserInfo();
info.ID = i;
info.Name = string.Concat("Name:", i);
info.FullName = string.Concat("姓名:", i);
list.Add(info);
}
return list;
}
为了测试缓存的处理,以及对Redis的支持情况,我编写了一个简单的案例,功能如下所示。
测试代码如下所示。
//测试缓存
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine(" 测试缓存: ");
//测试反复调用获取数值的耗时
DateTime start = DateTime.Now;
var list = CacheService.GetSimpleUsers(1);
int end = (int)DateTime.Now.Subtract(start).TotalMilliseconds;
Console.WriteLine(" first: " + end);
Console.WriteLine(" List: " + list.Count);
//Second test
//检查不同的方法参数,对缓存值的影响
start = DateTime.Now;
list = CacheService.GetSimpleUsers(2);
end = (int)DateTime.Now.Subtract(start).TotalMilliseconds;
Console.WriteLine(" Second: " + end);
Console.WriteLine(" List2: " + list.Count);
}
//更新缓存
private void button2_Click(object sender, EventArgs e)
{
Console.WriteLine(" 更新缓存: ");
//首先获取对应键的缓存值
//然后对缓存进行修改
//最后重新加入缓存
var key = "CacheManagerAndPostSharp.CacheService.GetSimpleUsers";
var item = MethodResultCache.GetCache(key);
var argument = new List(){1};
var result = item.GetCachedResult(argument);
Console.WriteLine("OldResult:" + result.ToJson());
List newList = result as List;
if(newList != null)
{
newList.Add(new SimpleUserInfo() { ID = new Random().Next(), Name = RandomChinese.GetRandomChars(2) });
}
item.CacheCallResult(newList, argument);
}
//清空缓存
private void button3_Click(object sender, EventArgs e)
{
Console.WriteLine(" 清空缓存: ");
//首先获取对应键的缓存值
var key = "CacheManagerAndPostSharp.CacheService.GetSimpleUsers";
var item = MethodResultCache.GetCache(key);
var argument = new List(){1};
//然后清空方法的所有缓存
item.ClearCachedResults();
//最后重新检验缓存值为空
var result = item.GetCachedResult(argument);
Console.WriteLine("Result:" + result !=null ? result.ToJson() : "null");
}
好久不来iteye,今天又来看看,哈哈,今天碰到在编码时,反射中会抛出
Illegal overloaded getter method with ambiguous type for propert这么个东东,从字面意思看,是反射在获取getter时迷惑了,然后回想起java在boolean值在生成getter时,分别有is和getter,也许我们的反射对象中就有is开头的方法迷惑了jdk,
泛型
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,任意化的缺点就是要实行强制转换,这种强制转换可能会带来不安全的隐患
泛型的特点:消除强制转换 确保类型安全 向后兼容
简单泛型的定义:
泛型:就是在类中将其模糊化,在创建对象的时候再具体定义
class fan
安装lua_nginx_module 模块
lua_nginx_module 可以一步步的安装,也可以直接用淘宝的OpenResty
Centos和debian的安装就简单了。。
这里说下freebsd的安装:
fetch http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4
ma
public class IsAccendListRecursive {
/*递归判断数组是否升序
* if a Integer array is ascending,return true
* use recursion
*/
public static void main(String[] args){
IsAccendListRecursiv
function init() {
var tt = document.getElementById("tt");
var childNodes = tt.childNodes[0].childNodes;
var level = 0;
for (var i = 0; i < childNodes.length; i++) {
在安装hadoop时,执行JPS出现下面错误
[slave16][email protected]:/tmp/hsperfdata_hdfs# jps
Error occurred during initialization of VM
java.lang.Error: Properties init: Could not determine current working