第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么在 Redis 實(shí)現(xiàn) Lua 腳本事務(wù)

為什么在 Redis 實(shí)現(xiàn) Lua 腳本事務(wù)

鳳凰求蠱 2019-03-13 11:09:05
為什么在 Redis 實(shí)現(xiàn) Lua 腳本事務(wù)
查看完整描述

2 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

數(shù)據(jù)完整性

從很多方面來(lái)看,Redis 很像當(dāng)初采用 InnoDB 前的 MySQL。而 Redis 采用了一種很合理的方式來(lái)保證數(shù)據(jù)完整性(復(fù)制,AOF 等),并且從 Redis2.6 開(kāi)始引入的 Lua 腳本在功能與易用性方面為 Redis 的成長(zhǎng)提供了很大助力。

相對(duì)來(lái)說(shuō),Lua 腳本與其他數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程很相似,但腳本的執(zhí)行有些許不同。在本文中最重要的一點(diǎn)就是一旦將腳本寫(xiě)入數(shù)據(jù)庫(kù),它會(huì)一直執(zhí)行直到以下任一種情況出現(xiàn):

1. 完成所有工作,所有寫(xiě)操作處理完成后腳本會(huì)自動(dòng)退出。

2. 腳本運(yùn)行時(shí)出錯(cuò)并中途退出,所有以前執(zhí)行的寫(xiě)操作都已發(fā)生,但不會(huì)再有其他寫(xiě)操作。

3. Redis 通過(guò) SHUTDOWN NOSAVE 關(guān)閉時(shí)(不保存)。

4. 你附加了調(diào)試器來(lái)“使”腳本完成 #1 與 #2 (或其他手段來(lái)保證不會(huì)丟失數(shù)據(jù))。

對(duì)于使用數(shù)據(jù)庫(kù)開(kāi)發(fā)軟件的人,我想你也認(rèn)同只有情景 #1 是最理想的。情景 #2,#3,#4 都會(huì)導(dǎo)致數(shù)據(jù)異常(#2 與
#4)和/或數(shù)據(jù)丟失(#3 和 #4)。如果你很重視數(shù)據(jù),你應(yīng)該盡可能地阻止數(shù)據(jù)異常與丟失。這不是哲學(xué),而是工作(This is not
philosophy, this is doing your job)。但很遺憾目前的 Redis 也幫不了你多少。所以我決定改變這種情況。

查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊


MySQL 與 Postgres
在 1998-2003 年間,如果你想運(yùn)行一個(gè)正規(guī)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的網(wǎng)站/服務(wù),但又沒(méi)有足夠的資金購(gòu)買(mǎi)微軟或 Oracle 的數(shù)據(jù)庫(kù),你可以選擇 MySQL 或 Postgres 。很多人都選擇了 MySQL,因?yàn)樗俣容^快——主要是因?yàn)?MyISAM 存儲(chǔ)引擎沒(méi)有提供事務(wù)功能以此來(lái)?yè)Q取性能,但速度確實(shí)很快。另一些人轉(zhuǎn)向 Postgres,因?yàn)殡m然在相同硬件上其性能明顯低于 MySQL,但 Postgres 不會(huì)丟失數(shù)據(jù)(說(shuō)實(shí)話,MySQL 數(shù)據(jù)丟失的情況非常少見(jiàn),但丟了可不是鬧著玩的)。
就這樣湊合著過(guò)了很久;MySQL 將其默認(rèn)的存儲(chǔ)引擎從 MyISAM 過(guò)渡到了 InnoDB (其實(shí)很早就有了),這樣它的存儲(chǔ)引擎也得到了完整的事務(wù)支持和其他功能。與此同時(shí),Postgres 也變快了,并添加了一個(gè)持續(xù)擴(kuò)展的功能列表來(lái)使自己與眾不同。現(xiàn)在對(duì)于 MySQL 與 Postgres 的選擇只看個(gè)人的體驗(yàn)與偏好,除了有時(shí)業(yè)務(wù)需要或領(lǐng)導(dǎo)決定使用其他選擇。
數(shù)據(jù)完整性
從很多方面來(lái)看,Redis 很像當(dāng)初采用 InnoDB 前的 MySQL。而 Redis 采用了一種很合理的方式來(lái)保證數(shù)據(jù)完整性(復(fù)制,AOF 等),并且從 Redis2.6 開(kāi)始引入的 Lua 腳本在功能與易用性方面為 Redis 的成長(zhǎng)提供了很大助力。
相對(duì)來(lái)說(shuō),Lua 腳本與其他數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程很相似,但腳本的執(zhí)行有些許不同。在本文中最重要的一點(diǎn)就是一旦將腳本寫(xiě)入數(shù)據(jù)庫(kù),它會(huì)一直執(zhí)行直到以下任一種情況出現(xiàn):
1. 完成所有工作,所有寫(xiě)操作處理完成后腳本會(huì)自動(dòng)退出。
2. 腳本運(yùn)行時(shí)出錯(cuò)并中途退出,所有以前執(zhí)行的寫(xiě)操作都已發(fā)生,但不會(huì)再有其他寫(xiě)操作。
3. Redis 通過(guò) SHUTDOWN NOSAVE 關(guān)閉時(shí)(不保存)。
4. 你附加了調(diào)試器來(lái)“使”腳本完成 #1 與 #2 (或其他手段來(lái)保證不會(huì)丟失數(shù)據(jù))。
對(duì)于使用數(shù)據(jù)庫(kù)開(kāi)發(fā)軟件的人,我想你也認(rèn)同只有情景 #1 是最理想的。情景 #2,#3,#4 都會(huì)導(dǎo)致數(shù)據(jù)異常(#2 與 #4)和/或數(shù)據(jù)丟失(#3 和 #4)。如果你很重視數(shù)據(jù),你應(yīng)該盡可能地阻止數(shù)據(jù)異常與丟失。這不是哲學(xué),而是工作(This is not philosophy, this is doing your job)。但很遺憾目前的 Redis 也幫不了你多少。所以我決定改變這種情況。
實(shí)現(xiàn) Lua 腳本事務(wù)
我嘗試解決上面列表中的 #2,#3,#4 問(wèn)題,最終像下面這樣:
腳本完成所有的工作,處理完寫(xiě)操作后正常退出
腳本執(zhí)行過(guò)程中遇到錯(cuò)誤退出,不更改任何數(shù)據(jù)(所有寫(xiě)操作都回滾)
無(wú)論有沒(méi)有寫(xiě)入數(shù)據(jù),都不會(huì)有數(shù)據(jù)丟失。這應(yīng)該是所有的數(shù)據(jù)庫(kù)都希望做到的,我打算把這個(gè)加到 Redis 中,因?yàn)槲覀兌枷M?Redis有 這個(gè)功能。
目前的 pull request 只是一個(gè)概念性的證明。也就是說(shuō),為了避免數(shù)據(jù)丟失,你要么 a) 顯式使用事務(wù)的變體運(yùn)行腳本,要么 b) 強(qiáng)制所有 Lua 腳本調(diào)用帶配置選項(xiàng)的事務(wù)語(yǔ)義。
還有很多的辦法使現(xiàn)在這個(gè) patch 變得更好,我希望能得到 Salvatore (Redisw 作者)和其他社區(qū)的幫助。



查看完整回答
反對(duì) 回復(fù) 2019-03-22
  • 2 回答
  • 0 關(guān)注
  • 902 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)