• 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秒了。

  • 相关阅读:
    Medium | LeetCode 148. 排序链表 | 归并排序(递归)
    Hard | LeetCode 4. 寻找两个正序数组的中位数 | 二分法
    Medium | LeetCode 341. 扁平化嵌套列表迭代器 | 递归 | 栈
    Hard | LeetCode 312. 戳气球 | 递归+记忆化数组 | 动态规划
    如何删除万能输入法
    javaweb 怎么获取路径
    Controller 返回 json那些小事
    螺旋矩阵
    javaweb怎么使用html
    tomcat中文乱码
  • 原文地址:https://www.cnblogs.com/liuming8208/p/1991019.html
Copyright © 2020-2023  润新知