zoukankan      html  css  js  c++  java
  • SqlCacheDependency Application

    代码
    缓存设计:
             SqlCacheDependency类在所有受支持的 SQL Server 版本 (
    7.020002005) 上监视特定的 SQL Server 数据库表,以便在该表发生更改时,自动从 Cache 中删除与该表关联的项。SqlCacheDependency 类向应用程序的 Cache 添加依赖于 SQL Server 数据库表或 SQL 查询的项.
          建立连接对象,再创建一个SqlCommand实例,创建SqlCacheDependency实例,在这步之后再调用Command对象来获取数据(这个顺序很重要)。之后调用Cache的Insert语句建立一个依赖于一个具体查询数据集的Cache项。
    Example Code:
         
    public List<Bookmark> GetBookmarkByUserId(string userId, SqlCacheDependency dependency)
            {
                List
    <Bookmark> bookmarks = new List<Bookmark>();
                
    string cmdText=string.Format ("select Id,Name,Url,FolderId,Type from dbo.Bookmark where UserId='{0}'",userId);

                
    using (SqlConnection con = new SqlConnection(“connectionString”))
                {
                    con.Open();
                    SqlCommand cmd 
    = new SqlCommand(cmdText);
                    dependency 
    = new SqlCacheDependency(cmd);//添加sql缓存依赖 SqlCacheDependency数据库表发生更改时,将自动删除缓存项。

                    
    using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        
    while (dr.Read())
                        {
                            Bookmark mark 
    = new Bookmark()
                            {
                                Id 
    = dr.GetString(0),
                                Name 
    = dr.GetString(1),
                                Url 
    = dr.GetString(2),
                                Type 
    = dr.GetString(4)
                            };

                            bookmarks.Add(mark);
                        }
                    }
                }

                
    return bookmarks;
               
            }

            
    public List<Bookmark> GetBookamrks(string userId, int timeout)
            {

                List
    <Bookmark> bookmarks = new List<Bookmark>();

                
    string key = "userId_" + userId;
                bookmarks 
    = (List<Bookmark>)HttpRuntime.Cache[key];

                
    // Check if the data exists in the data cache
                if (bookmarks == null)
                {
                    SqlCacheDependency dependency 
    = null;
                    
    // If the data is not in the cache then fetch the data from the business logic tier
                    bookmarks = GetBookmarkByUserId(userId,dependency);
                    TimeSpan slidingExpiration 
    = TimeSpan.FromHours(timeout);
                    
    // Store the output in the data cache, and Add the necessary SqlCacheDependency object
                    
    //绝对到期
                    
    // HttpRuntime.Cache.Add(key, bookmarks, dependency, DateTime.Now.AddHours(timeout), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
                    
    //滑动过期
                    CacheItemRemovedCallback  callBack = new CacheItemRemovedCallback(onRemove);

                    HttpRuntime.Cache.Add(key, bookmarks, dependency, Cache.NoAbsoluteExpiration, slidingExpiration, CacheItemPriority.High, callBack);
                }

                
    return bookmarks;
            }
        
    //移除Bookmark时,同时移除Version
     public void onRemove(string key, object val, CacheItemRemovedReason reason)
            {
                
    if (HttpRuntime.Cache[key + "version"!= null)
                {
                    HttpRuntime.Cache.Remove(key 
    + "version");
                }
            }
        

  • 相关阅读:
    vim的三种模式
    vi/vim 三种模式的操作
    vim(vi)下的三种模式及其相关命令
    linux下查看最消耗CPU、内存的进程
    hdu 5288 OO’s Sequence
    宿主机mac os无法连接到虚拟机centos
    cloudstack给已有zone加入物理网络
    oracle刚開始学习的人经常使用操作100问
    七天学会ASP.NET MVC (四)——用户授权认证问题
    JEECG常见问题大全征集
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1728604.html
Copyright © 2011-2022 走看看