讓MS SQL與Redis資料同步的幾種作法

首先,ms sql是資料庫,是永久儲存資料用,保證了資料的可靠性;而redis是拿來做暫存,主要提昇資料存取的性能。

而讓資料庫與暫存達到一致是相當經典的問題。

首先先探討不一致的發生原因,通常是發生在資料有變動的時候,因為資料變更需要同時操作資料庫以及暫存,因為不同系統,無法同時操作瞭解成功與失敗,且有時間差。就導致不一致~

提出幾個作法:

一、先刪暫存,再更新資料庫(在高併發讀寫時會不一致,不建議)

二、先更新資料庫,再刪除暫存【Cache Aside Pattern】(會出現一小段不一致)

三、只更新暫存,讓暫存同步更新資料庫【Read/Write Through Pattern】(不一致的機會很低)

四、只更新暫存,讓暫存非同步更新資料庫【Write Behind Cache Pattern】(性能最高,但如果暫存更新回資料庫時暫存掛了,資料會遺

Laravel 5.4連線MS SQL Server方式

1. config/database.php 新增
[code]
// 2017.04.05 by lin shou shan
‘sqlsrv’ => [
‘driver’ => ‘sqlsrv’, //
‘host’ => ‘localhost\sqlexpress’, // 資料庫位置及別名
‘username’ => ‘sa’, //密號
‘password’ => ”, //密碼
‘database’ => ”, //資料庫
‘prefix’ => ”,
],
[/code]
2..env修改
DB_CONNECTION=sqlsrv

3.route,web.php測試
Route::get(‘/’, function () {
var_dump( DB::table(‘tablename’)->first() );
});

CodeIgniter on Win10記得裝ODBC Driver 11 for SQL Server

在新的Win10上裝上XAMPP後發現CI連不上SQL Server,於是先用原生的方式找到解決的方法

$serverName = "localhost\sqlexpress";
$connectionInfo = array( "Database"=>"Pos", "UID"=>"sa", "PWD"=>"");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.
";
}else{
echo "Connection could not be established.
";
die( print_r( sqlsrv_errors(), true));
}

才知道WIN10預設沒有ODBC Driver 11 for SQL Server

https://www.microsoft.com/zh-TW/download/details.aspx?id=36434

SQL SERVER新增SQLEXPRESS別名

有許多單機版的進銷存系統、餐飲POS系統或是會計系統,會使用SQL SERVER EXPRESS的版本,然後連線字串變成了 LOCALHOST\SQLEXPRESS。

在安裝後預設是會多了一個\SQLEXPRESS

那如果是安裝正式版本的話,怎麼辦呢?

到SQL SERVER的組態管理員裡面

新增別名,伺服器指到本機 (local),然後別名名稱設為 localhost\sqlexpress 就可以了!

Microsoft Drivers for PHP for SQL Server支援PHP7.0

記得之前提過XAMPP支援php連線SQL Server,當時只支援到5.6。但最近因為PHP7.0已釋出後,所以微軟也發佈了支援PHP7.0的4.0版本。
目前支援的版本如下:
Version 4.0 supports PHP 7.0+
Version 3.2 supports PHP 5.6, 5.5, and 5.4
Version 3.1 supports PHP 5.5 and 5.4
Version 3.0 supports PHP 5.4.

下載連結
https://www.microsoft.com/en-us/download/details.aspx?id=20098

SQL SERVER EXPRESS資料庫備份方式

因為SQL SERVER EXPRESS精簡版本沒有備份的工具,所以需要自己整理。
建立一個 .BAT批次檔用sqlcmd來執行以下的SQL指令
[SQL]
USE YOURDBNAME — 記得改成你的資料庫名稱
GO
DECLARE @backupTime VARCHAR(20)
DECLARE @sqlCommand NVARCHAR(1000)
SELECT @backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112)
+REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ‘:’, ”))
SET @sqlCommand = ‘BACKUP DATABASE YOURDBNAME TO DISK=”D:\DBBACKUP\BACKUP_’ + @backupTime+’.bak”’
EXECUTE sp_executesql @sqlCommand
GO
[/SQL]
參考資料:

SQLCMD公用程式

XAMPP連結SQL SERVER方式

XAMPP(也有免安裝版本) 是目前Windows上面最熱門的php開發環境套件,唯一美中不足的是無法連結MS SQL。至於有沒有解決方式?當然是有的囉!

一、先看一下目前XAMPP的phpinfo(),看到without-mssql…..一開始有點嚇到!不過別警張

二、到微軟網站下載Microsoft Drivers for PHP for SQL Server,對應的版本是

  • Version 3.2 supports PHP 5.6, 5.5, and 5.4
  • Version 3.1 supports PHP 5.5 and 5.4
  • Version 3.0 supports PHP 5.4.

我們的版本是5.6,所以下載SQLSRV32.EXE即可。下載後按右鍵解壓縮。

xampmssql0024.接下來我們確認一下PHP是ThreadSafe或是non-ThreadSafe版本,到XAMPP\php目錄下,找php.dll版本。看到是php5ts.dll(PHP5 ThreadSafe)。

五、確定版本後,回到剛才解開的檔案複製以下的檔案到xampp\php\ext目錄下

xampmssql004

六、接著編輯php.ini,尋找extension=區塊,在下面加上二行(注意.dll名稱是你剛才copy過去的版本名稱)

extension=php_pdo_sqlsrv_56_ts.dll
extension=php_sqlsrv_56_ts.dll

xampmssql005

 

xampmssql006

七、存檔後重新開啟APACHE

xampmssql008 xampmssql007

 

八、回到phpinfo()頁面,如果安裝成功可以搜尋到sqlsrv跟pdo_sqlsrvxampmssql010 xampmssql009九、接著就可以連線到sql資料庫(本文以CodeIgniter為例)

xampmssql012 xampmssql011

xampmssql013
$this->load->database();
$query = $this->db->get(‘cmed’)->result_array();
array_walk_recursive($query, function(&$value, $key) {
if(is_string($value)) {
$value = urlencode($value);
}
});
$json = urldecode(json_encode($query));
echo $json;

 

備註:

Microsoft® ODBC Driver 11 for SQL Server® – Windows

Microsoft ODBC Driver For SQL Server 提供從 Windows 到 Microsoft SQL Server 的原生連線能力。

 

2015.8.29 新增免安裝整合包,下載解壓縮後執行xampp-control 即可運作。

按我下載