主頁 > 資料庫 > SQL Server解惑——標識列的限制和跳號現象

SQL Server解惑——標識列的限制和跳號現象

2020-09-10 06:57:29 資料庫

 

1:每個表只能創建一個標識列,

 

如下測驗所示,如果表中有一個標識列,新增一個標識列就會遇到錯誤Multiple identity columns specified for table 'TEST'. Only one identity column per table is allowed.

 

CREATE TABLE dbo.TEST
(
    ID        INT IDENTITY(1,1) ,
    NAME        VARCHAR(32)
);
 
ALTER TABLE dbo.TEST ADD  ID1 INT IDENTITY(10,1)

 

clip_image001

 

2:標識列不能被更新,

 

 

   如果你更新標識列,就會遇到類似下面這樣的錯誤,

 

   Cannot update identity column 'xxx'.

 

 

3:SQL Server不能通過ALTER陳述句修改標識列的increment值大小,

 

如果非要調整標識列的increment值大小,只能通過重建表來實作,如果想通過增加列或洗掉列的方法,非常麻煩,很多情況下也是不行的,例如,有些情況下需要你對新增的自增標識列更新資料才能保證資料一致性,還有一種非常規方法就是修改系統基表sys.syscolpars,這個后續整理一篇,

 

 

4:SQL Server不能通過ALTER陳述句修改表標識列的SEED的大小但是可以DBCC CHECKIDENT命令調整,SEED可以調大也可以調小,但是有一些限制!

 

#查看某個表中的自增列當前的值:

DBCC CHECKIDENT (TableName,NORESEED)

 

#調整標識列的當前值(SEED)為50

DBCC CHECKIDENT('dbo.TEST', RESEED, 50);

 

通過DBCC CHECKIDENT命令調整SEED值大小,也是有限制的,如下實驗所示:

 

USE AdventureWorks2014;
GO
IF EXISTS (SELECT 1 FROM sys.objects WHERE type='U' AND name='TEST')
BEGIN
    DROP TABLE test;
END
GO
CREATE TABLE dbo.TEST
(
    ID        INT IDENTITY(1,1) ,
    NAME    VARCHAR(32)
);
 
INSERT INTO dbo.TEST
        (  NAME )
SELECT  'K1' UNION ALL
SELECT  'K2' UNION ALL
SELECT  'K3' UNION ALL
SELECT  'K4' UNION ALL
SELECT  'K5' UNION ALL
SELECT  'K6';
 
SET IDENTITY_INSERT dbo.TEST ON;
GO
INSERT INTO dbo.TEST
        ( ID, NAME )
SELECT 13, 'k13';
GO
SET IDENTITY_INSERT dbo.TEST OFF;
GO
 
DBCC CHECKIDENT(test)
 
DBCC CHECKIDENT('test', RESEED ,9);
 
 
 
INSERT INTO dbo.TEST
        (  NAME )
SELECT  'K9'  UNION ALL
SELECT  'K10' UNION ALL
SELECT  'K11' UNION ALL
SELECT  'K12' UNION ALL
SELECT  'K13' ;
SELECT * FROM dbo.TEST;

clip_image002

 

如果你修改一下表結構,標識列為主鍵或有唯一約束的話,

 

CREATE TABLE dbo.TEST
(
    ID        INT IDENTITY(1,1) PRIMARY KEY,
    NAME      VARCHAR(32)
);

 

那么上面腳本運行到插入資料時就會報主鍵沖突,錯誤如下所示:

 

 

Msg 2627, Level 14, State 1, Line 38

Violation of PRIMARY KEY constraint 'PK__TEST__3214EC2731C41DF1'. Cannot insert duplicate key in object 'dbo.TEST'. The duplicate key value is (13).

 

 

那么接下來,我們將上面的腳本稍微調整一下,你會看到完全不同的結果,如下所示:

 

USE AdventureWorks2014;
GO
IF EXISTS (SELECT 1 FROM sys.objects WHERE type='U' AND name='TEST')
BEGIN
    DROP TABLE test;
END
GO
CREATE TABLE dbo.TEST
(
    ID        INT IDENTITY(1,1) ,
    NAME      VARCHAR(32)
);
 
INSERT INTO dbo.TEST
        (  NAME )
SELECT  'K1' UNION ALL
SELECT  'K2' UNION ALL
SELECT  'K3' UNION ALL
SELECT  'K4' UNION ALL
SELECT  'K5' UNION ALL
SELECT  'K6';
 
SET IDENTITY_INSERT dbo.TEST ON;
GO
INSERT INTO dbo.TEST
        ( ID, NAME )
SELECT 13, 'k13';
GO
SET IDENTITY_INSERT dbo.TEST OFF;
GO
 
 
 
DBCC CHECKIDENT('test', RESEED ,9);
GO
DBCC CHECKIDENT(test);
GO
 
INSERT INTO dbo.TEST
        (  NAME )
SELECT  'K9'  UNION ALL
SELECT  'K10' UNION ALL
SELECT  'K11' UNION ALL
SELECT  'K12' UNION ALL
SELECT  'K13' ;
SELECT * FROM dbo.TEST;

clip_image003

 

這個是實驗測驗時意外發現的一個問題,當時,它導致我得出不同的實驗結果,結論也搞錯了,問題出在DBCC CHECKIDENT (table_name),如果表的當前標識值小于標識列中存盤的最大標識值,則使用標識列中的最大值對其進行重置,我使用DBCC CHECKIDENT(test)本意是來查看標識列的當前值,所以正確的做法應該用DBCC CHECKIDENT(test, NORESEED)這條命令,其實這里也衍生了一個問題,由于可以人為調整SEED的值,所以標識列的值的唯一性,必須通過PRIMARY KEYUNIQUE約束或者通過UNIQUE索引來實作,將欄位設定為標識列并不能保證值的唯一值,

 

 

5: 不能通過ALTER陳述句將已經存在的一個欄位改為標識列

 

CREATE TABLE dbo.TEST
(
    ID        INT ,
    NAME      VARCHAR(32)
);
 
--這種語法是不允許的
ALTER TABLE dbo.TEST  ALTER COLUMN ID IDENTITY(10,1) 

 

6:在記憶體優化表中,種子和增量必須分別設定為 1、1, 將種子或增量設定為 1 以外的值會導致以下錯誤:記憶體優化表不支持使用 1 以外的種子和增量值,另外,必須同時指定種子和增量,或者二者都不指定, 如果二者都未指定,則取默認值 (1,1)

 

 

7:如果事務回滾會導致標識列跳號,如下實驗所示,這種現象和Oracle、MySQL資料庫的行為一致,

 

--事務回滾導致標識列自增跳號
INSERT INTO dbo.TEST
        (  NAME )
SELECT  'K1' UNION ALL
SELECT  'K2' UNION ALL
SELECT  'K3' UNION ALL
SELECT  'K4' UNION ALL
SELECT  'K5' UNION ALL
SELECT  'K6';
 
BEGIN TRAN
INSERT INTO dbo.TEST
        (  NAME )
SELECT  'K7';
ROLLBACK TRAN;
 
INSERT INTO dbo.TEST
        (  NAME )
SELECT  'KKK';
 
SELECT * FROM dbo.TEST;

 

 

8: 事務內部,可能出現標識列的跳號,

 

 

如下實驗所示:

 

 

USE AdventureWorks2014;
GO
IF EXISTS (SELECT 1 FROM sys.objects WHERE type='U' AND name='TEST_TRAN')
BEGIN
    DROP TABLE TEST_TRAN;
END
GO
CREATE TABLE dbo.TEST_TRAN
(
    ID        INT IDENTITY(1,1) PRIMARY KEY,
    TRN_NAME    VARCHAR(32)
);

 

在會話1和會話2同時執行下面SQL陳述句,模擬并發的事務,

 

 

 

--會話1:

 

DECLARE @row_index INT;
 
SET @row_index =1;
 
BEGIN TRAN
WHILE @row_index <=10
BEGIN
    INSERT INTO TEST_TRAN
    VALUES('TRANS_1');
    SET @row_index +=1;
    WAITFOR DELAY '00:00:01';
END
COMMIT TRAN;

 

--會話2

DECLARE @row_index INT;
 
SET @row_index =1;
 
BEGIN TRAN
WHILE @row_index <=10
BEGIN
    INSERT INTO TEST_TRAN
    VALUES('TRANS_2');
    SET @row_index +=1;
 
    WAITFOR DELAY '00:00:01';
END
COMMIT TRAN;

 

執行完上面腳本后,我們可以看到在并發情況下,同一事務內可能出現跳號,這個可以稱其為邏輯跳號

 

clip_image004

 

 

 

 

9資料庫實體非正常重啟(崩潰,故障轉移或關閉而導致SQL Server服務意外重啟),出現標識列的跳號

 

 

  關于這個,官方檔案有簡單介紹,

 

Consecutive values after server restart or other failures -SQL Server might cache identity values for performance reasons and some of the assigned values can be lost during a database failure or server restart. This can result in gaps in the identity value upon insert. If gaps are not acceptable then the application should use its own mechanism to generate key values. Using a sequence generator with the NOCACHE option can limit the gaps to transactions that are never committed.

 

  個人簡單測驗了一下,發現在SQL Server 2012在服務器非正常重啟(崩潰,故障轉移或關閉而導致SQL Server服務意外重啟)后會出現跳號(identity column jump)情況,可以通過啟用蹤標志272解決這個問題(參考下面鏈接),SQL Server 2014下測驗時,也是如此,注意:如果正常重啟SQL Server實體,并不會出現這種情況,這個跟ORACLE SEQUENCE跳號總結中的情況有點類似,

 

https://www.dfarber.com/computer-consulting-blog/articles/how-to-solve-identity-problem-in-sql-2012/

https://blog.sqlauthority.com/2017/03/24/sql-server-jump-identity-column-restart/

https://blog.sqlauthority.com/2018/01/24/sql-server-identity-jumping-1000-identity_cache/

https://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value-Jump-Is

 

個人測驗,在任務管理器,殺掉SQL Server的行程后,發現標識列跳號的大小為1000,根據上面博客資料,標識列跳號的多少還跟標識列的資料型別有關,

 

clip_image005

 

不過在SQL Server 2017,引入了新特性IDENTITY_CACHE來解決這個問題!

 

 

按照網上搜索的資料來看,蹤標志272讓SQL Server使用以前的代碼來實作標識列的功能,

 

That flag sets SQL 2012 back to the prior code for IDENTITY fields. However, unless you are actually running out of numbers, there is no reason to use that flag. IDENTITY fields are unique, not sequential. You probably need to rethink your method.

 

那么我們想搞清楚標識列的下一個值保存在哪里呢? SQL Server資料庫有個系統視圖sys.identity_columns可以查看某個表的標識列的當前值和下一個值,

 

 

SELECT  name ,
        is_identity ,
        seed_value ,
        increment_value ,
        last_value
FROM    sys.identity_columns
WHERE   object_id = OBJECT_ID('TEST');

 

但是 sys.identity_columns是一個系統視圖,它的資料來自sys.syscolpars,而視圖的欄位last_value的值是通過內置函式IdentityProperty計算出來的

 

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
CREATE VIEW sys.identity_columns AS
    SELECT object_id = id,
        name = name,
        column_id = colid,
        system_type_id = xtype,
        user_type_id = utype,
        max_length = length,
        precision = prec,
        scale = scale,
        collation_name = convert(sysname,CollationPropertyFromId(collationid,'name')),
        is_nullable = sysconv(bit, 1 - (status & 1)),     -- CPM_NOTNULL
        is_ansi_padded = sysconv(bit, status & 2),     -- CPM_NOTRIM
        is_rowguidcol = sysconv(bit, status & 8),     -- CPM_ROWGUIDCOL
        is_identity = sysconv(bit, status & 4),         -- CPM_IDENTCOL
        is_filestream = sysconv(bit, status & 32),     -- CPM_FILESTREAM
        is_replicated = sysconv(bit, status & 0x20000),     -- CPM_REPLICAT
        is_non_sql_subscribed = sysconv(bit, status & 0x40000),     -- CPM_NONSQSSUB
        is_merge_published = sysconv(bit, status & 0x80000),         -- CPM_MERGEREPL
        is_dts_replicated = sysconv(bit, status & 0x100000),         -- CPM_REPLDTS
        is_xml_document = sysconv(bit, 0),
        xml_collection_id = sysconv(int, 0),
        default_object_id = sysconv(int, 0),
        rule_object_id = sysconv(int, 0),
        seed_value = https://www.cnblogs.com/kerrycode/p/IdentityProperty(id, 'SeedValue'),
        increment_value = https://www.cnblogs.com/kerrycode/p/IdentityProperty(id, 'IncrementValue'),
        last_value = https://www.cnblogs.com/kerrycode/p/IdentityProperty(id, 'LastValue'),
        is_not_for_replication = sysconv(bit, status & 0x10000),    -- CPM_ID_REPL
        is_computed = sysconv(bit, status & 16),            -- CPM_COMPUTED                
        sysconv(bit, 0) as is_sparse,
        sysconv(bit, 0) as is_column_set
    FROM sys.syscolpars
    WHERE number = 0    -- SOC_COLUMN
        AND (status & 4) = 4     -- CPM_IDENTCOL
        AND has_access('CO', id) = 1
 
GO

 

 無法獲取系統內置函式(built-in function)的定義,所以無法進一步分析標識列是如何保存last_value的,但是個人猜測可能跟系統基表sys.syscolparsidtval欄位有關系,DAC模式下查詢跟蹤,你會發現標識列ID變化后,idtval欄位的值也變化了,

 

 

clip_image006

 

 

 

新建三個表,標識列的自增值分別為1、2、3, ,然后,查詢系統基表sys.syscolpars你就會有所發現,如下截圖所示

CREATE TABLE test1(id INT IDENTITY(1,1), name VARCHAR(10))
CREATE TABLE test2(id INT IDENTITY(1,2), name VARCHAR(10))
CREATE TABLE test3(id INT IDENTITY(1,3), name VARCHAR(10))

 

image

 

 

10:TRUNCATE表后,標識列的當前值會變為1

 

 

11:與標識列相關的系統函式的區別,

 

 

SELECT IDENT_CURRENT('dbo.TEST_TRAN');

SELECT IDENT_INCR('dbo.TEST_TRAN');

SELECT IDENT_SEED('dbo.TEST_TRAN')

SELECT SCOPE_IDENTITY();

SELECT @@IDENTITY;

 

 

IDENT_CURRENT 類似于SQL Server 2000 (8.x)的標識函式 SCOPE_IDENTITY @@IDENTITY 這三個函式都回傳最后生成的標識值, 但是,上述每個函式中定義的最后的作用域和會話有所不同**

·         IDENT_CURRENT 回傳為某個會話和用域中的指定表生成的最新標識值,

·         @@IDENTITY 回傳為跨所有作用域的當前會話中的任何表生成的最后一個標識值,

·         SCOPE_IDENTITY 回傳為當前會話和當前作用域中的某個表生成的最新標識值,

如果 IDENT_CURRENT 值為 NULL(因為表從未包含行或已被截斷),IDENT_CURRENT 函式將回傳種子值,

 

 

參考資料:

 

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/create-table-transact-sql-identity-property?view=sql-server-ver15

https://www.dfarber.com/computer-consulting-blog/articles/how-to-solve-identity-problem-in-sql-2012/

https://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value-Jump-Is

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1211.html

標籤:SQL Server

上一篇:SQL Server事務日志備份的一些疑問淺析

下一篇:sqlserver 屬性 DefaultFullTextLanguageLcid 不可用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more