linq to sql 的List<Table> 数据表缓存

3月18号去一家**文学 公司面试,失败了,面试主要是问些大数据查询,缓存和分布式服务这些事情。因为平时不关注那些PV 千万级数据访问的事情(只是因为工作条件,不太适合去考虑这个问题)。

今天把关于用linq to sql 缓存的东西说下。

因为我一直跟web打交道,所以只说些web缓存常用的东西(三种方式),

1.页面缓存

2.页面参数缓存

3.数据表缓存

其实1和2,是一种类似的方式,只是是否带参数而已。

1,页面缓存(output caching)

在aspx页面加上<%@ OutputCache Duration="60" VaryByParam="none" %> 即可

这里Duration 是指缓存时间,我这里设置为60秒,VaryByParam是参数缓存说明,如果没有就设置为none。另外还有一个重要的参数DiskCacheable="true|false" 意思是要不要把缓存放到硬盘上,如果设为false则缓存数据会放到内存中。

2,页面参数缓存

前面说了VaryByParam是参数缓存说明,除了为none,还可以是*号(任何参数),还有一个具体的带参名,如:Default.aspx?p=1 这里是通过get方法传递参数的,如果这里VaryByParam=“p”,那么p就是缓存参数说明,以后只要p值改变,就会改变缓存里面的内容。

3,数据表缓存

数据表缓存才是要说的重点,如果数据量大,那么数据表缓存就会用到,我这里是用linq to sql 来连接数据库的,缓存的也是List<Table>,有些人喜欢用Ado.net,用dataview也是可以了,看个人喜好。

using System.Web.Caching;  //引用数据缓存;

List<Usernamesview> li = new List<Usernamesview>();  //先创建一个list<table>;

protected void Page_Load(object sender, EventArgs e)
        {if (!IsPostBack)
            {
                li=(List<Usernamesview>)Cache["ds"];  //ds cache缓存对象名;
                if (li == null)
                {
                    GridviewBingdingAsc();
                }
                else
                {
                    GridView1.DataSource = li.ToList();
                    GridView1.DataBind();   

                }
            }

}

 private void GridviewBingdingAsc()
        {
            _100WTestNumberDataContext dc = new _100WTestNumberDataContext();
            Table<Usernamesview> tu = dc.GetTable<Usernamesview>();
            var s=(from sc in tu  select sc).Take(15000).OrderBy(T=>T.Addres);

            Cache.Insert("ds",s.ToList(),null,System.Web.Caching.Cache.NoAbsoluteExpiration,TimeSpan.FromSeconds(3));

            GridView1.DataSource = s.ToList();
            GridView1.DataBind();

            dc.Connection.Close();
            dc.Connection.Dispose();       
        }

这里说下Cache这个类, 这个类不仅仅用Insert,还有其他的方法,具体去查找msdn,我这里只说Insert这个方法,Insert包含几个参数,

Cache.Insert (String, Object, CacheDependency, DateTime, TimeSpan)

1是缓存的名称,2是缓存的数据对象,3是缓存键依赖项,通常为Null,4是过期时间,如果使用相对过期时间则设为NoAbsoluteExpiration,5是可调过期时间,

1:如果参数4使用了固定过期时间,参数5要设成NoSlidingExpiration。

如:Cache.Insert("ds", s.ToList(), null,DateTime.Now.AddMinutes(5) , System.Web.Caching.Cache.NoSlidingExpiration);

2:如果参数4是相对时间,

如:Cache.Insert("ds", s.ToList(), null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(5));

那么他就把缓存相对延后,如,有人在3分20秒时访问数据库,那么应该在8分20秒后过期,但是有人在5分20秒时访问数据库,那么过期时间就延迟到10分20秒了。

posted on 2011-03-22 10:05  祁东痞子  阅读(1227)  评论(0编辑  收藏  举报