SQL时间戳使用之缓存依赖
2012-12-01 01:46
465 查看
通过时间戳来实现缓存依赖的一种方式
1.创建时间戳存储表
#########################使用方法
通过调用存储过程(pr_IsUpdateData),来判断是否更新替换本地内存中的数据。
1.创建时间戳存储表
USE [iwomKeyWord] GO /****** Object: Table [dbo].[CachedTimemap] Script Date: 12/01/2012 01:25:04 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[CachedTimemap]( [ID] [int] IDENTITY(1,1) NOT NULL, [tableName] [char](30) NOT NULL, [value] [int] NULL, [timemap] [timestamp] NULL, CONSTRAINT [PK_CachedTimemap] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[CachedTimemap] WITH NOCHECK ADD CONSTRAINT [CK_isExitTable] CHECK ((object_id([tableName],'U') IS NOT NULL)) GO ALTER TABLE [dbo].[CachedTimemap] CHECK CONSTRAINT [CK_isExitTable] GO ALTER TABLE [dbo].[CachedTimemap] ADD CONSTRAINT [DF_CachedTimemap_value] DEFAULT ((1)) FOR [value] GO2.创建一个标量函数来获得时间戳表的名称
USE [iwomKeyWord] GO /****** Object: UserDefinedFunction [dbo].[GetTimemapName] Script Date: 12/01/2012 01:39:03 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Arvin> -- Create date: <2012-11-30> -- Description: <获得表名> -- ============================================= ALTER FUNCTION [dbo].[GetTimemapName] ( @TABLENAME CHAR(30) ) RETURNS CHAR(30) AS BEGIN DECLARE @FLAG INT SET @FLAG=0 SELECT @FLAG=1 WHERE @TABLENAME LIKE 'dbo.%' IF(@FLAG=1) SET @TABLENAME=Substring(@TABLENAME,5,25) RETURN @TABLENAME END3.创建存储过程:查看表数据是否存在更新()
USE [iwomKeyWord] GO /****** Object: StoredProcedure [dbo].[pr_IsUpdateData] Script Date: 12/01/2012 01:42:15 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <arvin> -- Create date: <2012-11-30> -- Description: <判断一个表的数据是否更新> -- ============================================= ALTER PROCEDURE [dbo].[pr_IsUpdateData] @tableName char(30), @beforeTimemap timestamp, @timemapValue timestamp out AS BEGIN SET NOCOUNT ON; DECLARE @currentTimemap timestamp DECLARE @COUNT INT SET @COUNT=0 SET @TABLENAME=dbo.GetTimemapName(@TABLENAME) SELECT @COUNT=1 FROM dbo.CachedTimemap WHERE [tableName]=@TABLENAME IF(@COUNT=0) BEGIN SET @timemapValue=0xFFFFFFFFFFFFFFFF RETURN END SELECT @currentTimemap=[timemap] FROM dbo.CachedTimemap WHERE [tableName]=@TABLENAME IF(@currentTimemap=ISNULL(@beforeTimemap,0)) SET @timemapValue=0 ELSE SET @timemapValue=@currentTimemap END4.创建存储过程:更新时间戳
USE [iwomKeyWord] GO /****** Object: StoredProcedure [dbo].[pr_UpdateCachedTimemap] Script Date: 12/01/2012 01:44:26 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <arvin> -- Create date: <2012-11-30> -- Description: <更新时间戳表> -- ============================================= ALTER PROCEDURE [dbo].[pr_UpdateCachedTimemap] @tableName char(30) AS BEGIN SET NOCOUNT ON; DECLARE @beforeTimemap timestamp DECLARE @COUNT INT SET @COUNT=0 SET @TABLENAME=dbo.GetTimemapName(@TABLENAME) SELECT @COUNT=1 FROM dbo.CachedTimemap WHERE [tableName]=@TABLENAME IF(@COUNT=0) INSERT INTO dbo.CachedTimemap ([tableName])VALUES(@TABLENAME) UPDATE [dbo].[CachedTimemap] SET [value] = 1 WHERE [tableName]=@tableName END5.在需要实现缓存依赖的表创建触发器,与时间戳更新存储过程关联
USE [iwomKeyWord] GO /****** Object: Trigger [dbo].[TR_updateCachedTimemap] Script Date: 12/01/2012 01:47:06 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER TRIGGER [dbo].[TR_updateCachedTimemap] ON [dbo].[WarnKeyWord] AFTER INSERT,DELETE,UPDATE AS BEGIN SET NOCOUNT ON; DECLARE @return_value int EXEC @return_value = [dbo].[pr_UpdateCachedTimemap] @tableName = N'WarnKeyWord' END
#########################使用方法
通过调用存储过程(pr_IsUpdateData),来判断是否更新替换本地内存中的数据。
相关文章推荐
- [转]使用基于轮询的SQL数据缓存依赖
- [转]使用基于轮询的SQL数据缓存依赖
- 使用基于轮询的SQL数据缓存依赖
- 在ASP.NET 2.0中操作数据之五十九:使用SQL缓存依赖项SqlCacheDependency
- C#中缓存的简单方法及使用Sql设置缓存依赖项
- 没有为SQL缓存通知启用数据库"某某某" ,使用Sql缓存依赖前,先调用EnableTableForNotifications通知数据库SqlCacheDependencyAdmin.Enabl
- asp.net mvc5中使用缓存依赖SqlCacheDependency
- 使用 SQL 缓存依赖项,数据库缓存依赖 (附实例)
- asp.net mvc5中使用缓存依赖SqlCacheDependency
- sqlCachedependency【数据缓存依赖】 的使用
- asp.net mvc5中使用缓存依赖SqlCacheDependency
- 使用基于轮询的SQL数据缓存依赖
- 使用SQL数据缓存依赖功能的步骤
- 高效使用使用SQL缓存依赖
- 使用SqlCacheDependency依赖项让数据库变化后缓存失效
- asp.net mvc5中使用缓存依赖SqlCacheDependency
- IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】
- SqlCacheDependency使用轮流检测技术(轮询)使缓存无效
- HQL或SQL使用?带来的好处:减少SQL解析时间、降低内存开销、防止SQL注入
- IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】