zoukankan      html  css  js  c++  java
  • 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秒了。

  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/liuming8208/p/1991019.html
Copyright © 2011-2022 走看看