寶馬i品牌第三款車型i5將會是一台電動車

據悉,寶馬高層最新證實,i品牌的第三款車型i5將會是一台電動車,而非之前所傳聞的燃料電池車或者是插電式混合動力車。不過他也表示,i5除了純電動版本,也會像i3那樣擁有一款增程車型。


寶馬全新i5假想圖

至於i5的車身形式目前仍然是一個迷,但從各方消息以及寶馬高層的暗示來看,這是一台家庭定位的車型,所以它選擇SUV造型的可能性應該是最大的。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

Unity – Cinemachine實現相機抖動

普通相機抖動腳本較易實現,但在使用cinemachine相機下,其Transform組件不可被代碼修改,那麼Cinemachine的相機抖動如何實現呢?本文結合實際項目,對實現相機抖動的三大步驟進行系統講解:

  • 項目地址:

配置流程

項目背景:一款2D像素動作遊戲,我們操控着Player(必須帶有Collider組件),遊戲相機為Cinemachine 2DCamera(關於其配置方法此處不做贅述,推薦文章在末尾參考處)

1. 在相機上添加監聽腳本

在我們使用的虛擬相機 CM vcam1 上添加組件:AddComponent->CinemachineImpulse Listener

  • CinemachineImpulse Listener監聽腳本內震動信號(方法調用),使得抖動在此相機上發生
    • Channel Mask:通道遮罩,此處最好默認為EveryThing
    • Gain:可獲得震動信號的數目,0為屏蔽,1表示某時段僅能進行一個抖動運動
    • Use 2D Distance:用於2D遊戲,忽略相機Z軸的抖動

2. 在震動信號發生物體上添加腳本

震動信號發生物體(調用震動函數的物體)為Player,因此需要在Player上添加組件:AddComponent->Cinemachine Collision Impulse Source(注:必須掛到含Collider的物體上),然後在Raw Signal右側齒輪->New Noise Settings 添加震動配置器,默認名CM vcam1 Raw Signal

  • Cinemachine Collision Impulse Source:含有抖動函數震動配置器的關鍵腳本
    • Raw Signal:震動配置器,配置震動參數的關鍵部件,我們打開剛上面新建的CM vcam1 Raw Signal,可看到震動方式的各類參數。我們以Position Y,即上下抖動為例,添加Components后可設置其Frequency震頻Amplitude震幅,並且勾選右側方框可將其設置為正弦波
    • Attack:抖動開始的變化曲線及時間
    • Sustain Time:抖動的持續時間
    • Decay:抖動衰退的變化曲線及時間

3. 調用震動方法:

在Player內引用震動核心腳本,並在合適位置調用震動方法

private Cinemachine.CinemachineCollisionImpulseSource MyInpulse;

private void Start()
{
    MyInpulse = GetComponent<Cinemachine.CinemachineCollisionImpulseSource>();
}

private void Update()
{
    //按下右鍵產生相機抖動,抖動方式依照上面CM vcam1 Raw Signal內配置信息
    if (Input.GetMouseButtonDown(1))
        MyInpulse.GenerateImpulse();       
}

至此,我們在遊戲內操控Player,按下右鍵即可實現相機抖動。當然除了上面無參的GenerateImpulse()方法,還有兩個帶參的方法:

//假若使用傳遞velocity的方法,其震動方式為velocity和CM vcam1 Raw Signal的混合
public void GenerateImpulse(Vector3 velocity);
public void GenerateImpulse(Vector3 position, Vector3 velocity);

此外,還有可能出現bug:還尚未調用震動函數,遊戲開始時就自動產生抖動。其產生原因博主尚未在對應腳本內發現,但解決方式為關閉Player上的Cinemachine Collision Impulse Source腳本

總述

Cinemachine中實現相機抖動的基本流程:

  • 在虛擬相機上添加監聽腳本 CinemachineImpulse Listener
  • 在Player上添加震動核心腳本Cinemachine Collision Impulse Source,並添加、設置震動配置器
  • Player腳本合適位置調用震動函數

本例僅介紹了單Position方向上的抖動,讀者可按需配置抖動的Position、Rotation、發生時間、維持時間、衰退時間等,實現自己想要的效果

參考

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

年幼江豚大嶼山擱淺 本年第14宗

摘錄自2020年03月15日星島日報報導

香港海洋公園保育基金昨(14日)接報通知跟進在大嶼山水口一宗鯨豚擱淺個案,為本年度的第14宗。

該擱淺的年幼江豚,性別有待確定,身長133厘米。其屍身已嚴重腐爛。個案並沒有表面傷痕,保育基金已把江豚帶回海洋公園化驗。

香港海洋公園保育基金呼籲公眾,若發現懷疑鯨豚擱淺個案,可致電 1823 熱線,並提供發現擱淺的時間、地點、相片(如有),讓行動組能盡快到場跟進。

海洋
生態保育
國際新聞
香港
江豚
擱淺死亡

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

丁磊透露樂視超級汽車2016戰略目標

日前,樂視在北京舉行了汽車生態戰略會議。樂視超級汽車聯合創始人、全球副董事長丁磊帶領各業務線負責人對2015年進行了總結,並提出了2016年樂視汽車生態的幾大核心戰略目標。據透露,2016年樂視超級汽車將實現“關鍵技術研發取得突破、生產製造體系全球頂尖、打造互聯網智慧電動車第一品牌和世界一流的O2O行銷銷售服務體系”的目標。

超級汽車進入生產準備期

丁磊同時宣佈,在即將到來的北京車展上,樂視不僅將帶來超級汽車的首款概念樣車,還將運用樂視生態獨具的顛覆性思維,打造一屆前所未有的生態車展。而樂視的戰略合作夥伴,來自矽谷的智慧互聯網電動汽車新貴FF也將首度來華,“踢館”北京車展。

相比生態合作和資本合作方面的高調傳播,有關超級汽車的研發進展,樂視卻一直秘而不宣。在這次戰略會上,丁磊透露,樂視汽車已經完成了第一代產品的定義及核心研發工作,進入了漫長而艱難的生產準備過程。

據悉,超級汽車項目將採取自建工廠和代工的模式進行,而且超級汽車的工廠將不是一個單純的汽車製造廠,“將被打造成涵蓋生產、展示、體驗、服務和休閒等多項功能的汽車生態產業園,成為當地的遊覽勝地和地標性建築。”

“北上廣深等一線城市都在選擇範圍中。”據樂視內部人士透露,誰將成為這樣一個全新概念的汽車生態園的最終選址,成為中國版的沃爾夫斯堡,答案也將在2016年揭曉。

打造互聯網智慧電動車第一品牌

打造品牌是樂視超級汽車在2016年的重點工作,也是樂視超級汽車在產品面世前的最重要的鋪墊。按照官方說法,樂視希望以互聯網技術為核心實現打造一個垂直整合的生態系統,打破產業邊界,實現跨界創新。汽車生態作為樂視生態系統的重要一環,樂視超級汽車品牌有著天然的生態基因,承擔著變革汽車產業,改善人類生存環境的使命。

在樂視控股集團創始人、董事長兼CEO賈躍亭的構想中,未來汽車將不再是簡單的出行工具,而將提供全新的交通生活場景;汽車產業鏈也將不再是上下游的線條型結構,而是一個融合了多個產業的開放的汽車生態。簡言之,樂視造的不是車,而是由車承載的垂直整合了互聯網、科技和文化產業的交通生活場景。
 

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

碎片化的時代,如何學習

今天周末,和大家聊聊學習這件事情。

在如今這個社會,我們的時間被各類 APP 撕的粉碎。

刷知乎、刷微博、刷朋友圈;

看論壇、看博客、看公號;

等等形形色色的信息和知識獲取方式一個都不錯過。

貌似學了很多,但是卻感覺沒什麼用。

要解決上面這些問題,首先要分清楚一點,什麼是信息,什麼是知識。

  • 那什麼是信息呢?

你一切聽到的、看到的,都是信息,比如微博上的明星出軌、微信中的表情大戰、抖音上的段子視頻。

  • 那什麼是知識呢?

就是指那些被驗證過的、正確的、被人們相信的概念、規律、方法論。

概念是什麼很好理解,我們上學的時候做的最多的一件事情就是背概念。

規律是事物背後的運行法則,例如當市場上某一種貨物供應量減少后,就會導致價格的上升。

方法論俗稱【套路】,解決某一類問題的時候,有效的解決方案。

信息有真假,有時效,而知識有積累、有迭代。我們要學習的是知識,而不是信息。

時間複利

再說一個概念,複利

這個大家都應該知道,比較多的應該是在銀行存錢或者是購買理財產品的時候,比如下圖的銀行複利增長曲線:

或者是下面這個公式:

1.01^365 = 37.8

隨公式還附贈一句雞湯:

如果一個人每天都能進步 1%,一年之後他的能力會提升 38 倍。

這句話雖然聽起來很雞湯,但是卻想不到有什麼問題,對吧?

反過來想一下這句話的前提,一個人都想要每天都能進步 1% ,這可能么?當然排除一些極端情況,對於看到我文章的大多數人來說,這是一件不可能的事情。

每天會形形色色的事情去阻止我們進步這 1% ,比如:

  • 今天上班被領導批了,心情不好,不想學習了
  • 今天工作太忙了,下班后時間都比較晚了,想要休息了
  • 今天和朋友一起出去玩了,玩的很開心

等等,然後我們看到身邊優秀的人的時候:

  • 看到他們隨隨便便就考試考出來好成績
  • 看到他們隨手寫的文章就是網絡爆文
  • 看到他們對於某一項技術非常精通的時候

是不是會有一種無力感,好像他們平時和我們一樣,該吃吃該喝喝該玩玩,但是人家就是很厲害的樣子。

於是,就產生了強烈的焦慮感,要學習,要提高自己,開始看更多的信息,關注更多的學習圈子,焦慮感加重,負向循環開始了。

但是,如果你肯相信時間複利的效應,就不會焦慮。

Why?

你現在看到身邊的人的成績,看到他輕輕鬆松做到的事情,即使你拼盡全力也不可能做到。

從一開始你就錯了,他們已經完成了自己的原始積累,他們已經到達了這件事情的複利拐點

什麼是複利拐點?

圖中這個小人站的位置就是複利拐點,

如果一個人到達複利拐點(圖中小人站的地方),那他的收益,會急劇增長,可能比之前所有時間的收益總和還要多。

這裏的收益可以是錢,是能力,是認知。

知識

上面我們介紹了如何區分信息和知識,這裏再分享一個個人理解,有效知識。

判斷一個知識是否有效,就要看這個知識和你之前的已有的知識是否能產生聯繫。

如果可以產生聯繫,那麼你對這個新的知識理解速度會非常的快。

就好比編程語言,小編的本職工作是一名 Java 軟件工程師,但是當小編去學習 Python 的相關基礎知識的時候,速度是非常快的,用旁人的視角看起來就好像小編的學習效率非常的高效。

當然,我們不可能只學習和自己已有知識相關方向的知識,可能會接觸一些完全陌生的領域,那麼這個時候如何還能保持效率較高的學習?

在進入一個新的領域的時候,所有的知識都是一個點一個點的,好像是散落在沙子里的石頭,中間是毫無關聯的,這個時間段的學習是非常痛苦的,小編一般稱為原始積累階段。

很多人在原始積累的階段因為過程過於痛苦,就慢慢的放棄了。

在痛苦的原始積累階段,很多時候看不到盡頭,之前的學習感覺都學過,但是仔細一想,又好像什麼都沒學。

這時,我們可以藉助工具去加強知識之間的關聯和加深自己的記憶——思維導圖。

這個工具小編也經常在用的,比如很多人可能都見過我的公眾號上小編自己整理的 Java 進階相關的思維導圖。

當學習一個新的領域的時候,每當一些基礎的概念能產生聯繫的時候,就可以去畫這麼一張思維導圖,思維導圖能讓我們更清晰直觀的理解不同的事物之間的內在聯繫。

長時間的原始積累太過痛苦怎麼辦?

這個是所有人都會遇到的問題,做一件事情,尤其是學習,當我們無法取得一些成果的時候,對興趣和自信的打擊都會非常的大。

首先在做這件事情之前,你需要為自己找到足夠開始這件事情的理由,也就是要有強大的內驅力。

就好比考研這件事情,如果是身邊的人要考,所以你也要考,那麼我覺得你到底要不要考研這件事情值得再思考一下。

但如果是說你想通過考研,來改變自己的人生軌跡,想要獲得更高的起點,那麼,我覺得這個事兒十有八九你是能堅持下去的。

好比學習 Python ,好像身邊的人都在學,那我也要了解一下,和那種我想要學 Python 來換一份工作,擺脫目前的工作狀態,獲取更高的薪水。

大家可能看着沒什麼感覺,但是想一想,自己的人生中,到底有沒有過堅持某一件事情,並最終獲得了一個還不錯的結果,最後收穫的這份快感,是不是無與倫比的。

當然,除了強大的內驅力以外,小編還可以友情提供一點小技巧。

獲取階段性的正向反饋。

如果一件事情需要耗費較長的時間,那麼再大的內驅力也可能會被時間的流逝給磨平了。

靜靜思考下放棄的原因,沒有獲得成就感。

還是拿考研舉例子,一般考研需要準備大半年到一年左右的時間,很多人都堅持不過半年時間就放棄掉了,為什麼,因為他們看不到成效,看不到曙光。但是高三的高考很多人還是能堅持下來的,為什麼?

因為高三有月考啊,每次月考完,都能準確的知道自己的水平提升了多少,自己一個月的努力是沒有白費的,自己一個月的努力是真真實實的化成了卷子上的分數。

所以,做一件需要長時間奮戰的事情,最好能提前為自己設定一些階段性的成果檢驗方式。

時間管理

時間管理是一個繞不開的話題,這裏小編其實也沒資格談這件事情,因為小編本身的時間管理也做的並不好,小編也是人,加完班也會感覺到累,回到家也會只想着休息,人非聖賢,對吧。

還是分享一些經驗吧。

嘗試將自己一天做的事情和耗費的時間列一個表格出來(小編之前列舉過,時間有些久遠,找不到了,這裏就不放圖了)。

當這個表格列出來以後,不管多麼自律的人,肯定會發現,一天之中,有相當部分的時間是被浪費掉的,比如刷朋友圈,刷抖音,刷微博。

在生活中,肯定會經常性的出現這樣事情。

“再玩5分鐘手機就睡覺!”

結果12點了還在玩手機。

周末早晨起來,“先玩一局遊戲,在做xxx”。

結果就是玩到了下午。

相信我,那些墮落的人,並不是一開始就想墮落的。

他們只是在被生活中形形色色的誘惑給誘惑到了,因為現在的社會,各個 APP 在掏空了心思去搶佔用戶的留存時長,它們費勁心力的去討好用戶,讓用戶用最簡單最不需要付出的方式去獲得這種毫無意義的低成本的快樂。

所以,開始記錄自己的時間,是做時間管理的第一步。

當然,並不是要我們完全的放棄娛樂時間,這不可能,人不是機器,不可能是只要有電,就能工作,人也是需要休息的,記錄時間只是為了讓我們在面臨選擇的時候,做出正確的選擇。

第一次寫這種長篇內容分享,有內容不當的地方請各位同學海涵。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

日本推翻商業捕鯨禁令失敗 國際通過護鯨新決議

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

一文帶你深入了解 Redis 的持久化方式及其原理

Redis 提供了兩種持久化方式,一種是基於快照形式的 RDB,另一種是基於日誌形式的 AOF,每種方式都有自己的優缺點,本文將介紹 Redis 這兩種持久化方式,希望閱讀本文後你對 Redis 的這兩種方式有更加全面、清晰的認識。

RDB 快照方式持久化

先從 RDB 快照方式聊起,RDB 是 Redis 默認開啟的持久化方式,並不需要我們單獨開啟,先來看看跟 RDB 相關的配置信息:

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#   save ""
# 自動生成快照的觸發機制 中間的是時間,單位秒,後面的是變更數據 60 秒變更 10000 條數據則自動生成快照
save 900 1
save 300 10
save 60 10000

# 生成快照失敗時,主線程是否停止寫入
stop-writes-on-bgsave-error yes

# 是否採用壓縮算法存儲
rdbcompression yes

# 數據恢復時是否檢測 RDB文件有效性
rdbchecksum yes

# The filename where to dump the DB
# RDB 快照生成的文件名稱
dbfilename dump.rdb

# 快照生成的路徑 AOF 也是存放在這個路徑下面
dir .

關於 RDB 相關配置信息不多,需要我們調整的就更少了,我們只需要根據自己的業務量修改生成快照的機制和文件存放路徑即可。

RDB 有兩種持久化方式:手動觸發自動觸發手動觸發使用以下兩個命令:

  • save:會阻塞當前 Redis 服務器響應其他命令,直到 RDB 快照生成完成為止,對於內存 比較大的實例會造成長時間阻塞,所以線上環境不建議使用

  • bgsave:Redis 主進程會 fork 一個子進程,RDB 快照生成有子進程來負責,完成之後,子進程自動結束,bgsave 只會在 fork 子進程的時候短暫的阻塞,這個過程是非常短的,所以推薦使用該命令來手動觸發

除了執行命令手動觸發之外,Redis 內部還存在自動觸發 RDB 的持久化機制,在以下幾種情況下 Redis 會自動觸發 RDB 持久化

  • 在配置中配置了 save 相關配置信息,如我們上面配置文件中的 save 60 10000 ,也可以把它歸類為“save m n”格式的配置,表示 m 秒內數據集存在 n 次修改時,會自動觸發 bgsave。

  • 在主從情況下,如果從節點執行全量複製操作,主節點自動執行 bgsave 生成 RDB 文件併發送給從節點

  • 執行 debug reload 命令重新加載 Redis 時,也會自動觸發 save 操作

  • 默認情況下執行 shutdown 命令時,如果沒有開啟 AOF 持久化功能則自動執行 bgsave

上面就是 RDB 持久化的方式,可以看出 save 命令使用的比較少,大多數情況下使用的都是 bgsave 命令,所以這個 bgsave 命令還是有一些東西,那接下來我們就一起看看 bgsave 背後的原理,先從流程圖開始入手:

bgsave 命令大概有以下幾個步驟:

  • 1、執行 bgsave 命令,Redis 主進程判斷當前是否存在正在執行的 RDB/AOF 子進程,如果存在, bgsave 命令直接返回不在往下執行。
  • 2、父進程執行 fork 操作創建子進程,fork 操作過程中父進程會阻塞,fork 完成後父進程將不在阻塞可以接受其他命令。
  • 3、子進程創建新的 RDB 文件,基於父進程當前內存數據生成臨時快照文件,完成後用新的 RDB 文件替換原有的 RDB 文件,並且給父進程發送 RDB 快照生成完畢通知

上面就是 bgsave 命令背後的一些內容,RDB 的內容就差不多了,我們一起來總結 RDB 持久化的優缺點,RDB 方式的優點

  • RDB 快照是某一時刻 Redis 節點內存數據,非常適合做備份,上傳到遠程服務器或者文件系統中,用於容災備份
  • 數據恢復時 RDB 要遠遠快於 AOF

有優點同樣存在缺點,RDB 的缺點有

  • RDB 持久化方式數據沒辦法做到實時持久化/秒級持久化。我們已經知道了 bgsave 命令每次運行都要執行 fork 操作創建子進程,屬於重量級操作,頻繁執行成本過高。
  • RDB 文件使用特定二進制格式保存,Redis 版本演進過程中有多個格式 的 RDB 版本,存在老版本 Redis 服務無法兼容新版 RDB 格式的問題

如果我們對數據要求比較高,每一秒的數據都不能丟,RDB 持久化方式肯定是不能夠滿足要求的,那 Redis 有沒有辦法滿足呢,答案是有的,那就是接下來的 AOF 持久化方式

AOF 持久化方式

Redis 默認並沒有開啟 AOF 持久化方式,需要我們自行開啟,在 redis.conf 配置文件中將 appendonly no 調整為 appendonly yes,這樣就開啟了 AOF 持久化,與 RDB 不同的是 AOF 是以記錄操作命令的形式來持久化數據的,我們可以查看以下 AOF 的持久化文件 appendonly.aof

*2
$6
SELECT
$1
0
*3
$3
set
$6
mykey1
$6
你好
*3
$3
set
$4
key2
$5
hello
*1
$8

大概就是長這樣的,具體的你可以查看你 Redis 服務器上的 appendonly.aof 配置文件,這也意味着我們可以在 appendonly.aof 文件中國修改值,等 Redis 重啟時將會加載修改之後的值。看似一些簡單的操作命令,其實從命令到 appendonly.aof 這個過程中非常有學問的,下面時 AOF 持久化流程圖:

在 AOF 持久化過程中有兩個非常重要的操作:一個是將操作命令追加到 AOF_BUF 緩存區,另一個是 AOF_buf 緩存區數據同步到 AOF 文件,接下來我們詳細聊一聊這兩個操作:

1、為什麼要將命令寫入到 aof_buf 緩存區而不是直接寫入到 aof 文件?

我們知道 Redis 是單線程響應,如果每次寫入 AOF 命令都直接追加到磁盤上的 AOF 文件中,這樣頻繁的 IO 開銷,Redis 的性能就完成取決於你的機器硬件了,為了提升 Redis 的響應效率就添加了一層 aof_buf 緩存層, 利用的是操作系統的 cache 技術,這樣就提升了 Redis 的性能,雖然這樣性能是解決了,但是同時也引入了一個問題,aof_buf 緩存區數據如何同步到 AOF 文件呢?由誰同步呢?這就是我們接下來要聊的一個操作:fsync 操作

2、aof_buf 緩存區數據如何同步到 aof 文件中?

aof_buf 緩存區數據寫入到 aof 文件是有 linux 系統去完成的,由於 Linux 系統調度機制周期比較長,如果系統故障宕機了,意味着一個周期內的數據將全部丟失,這不是我們想要的,所以 Linux 提供了一個 fsync 命令,fsync 是針對單個文件操作(比如這裏的 AOF 文件),做強制硬盤同步,fsync 將阻塞直到寫入硬盤完成后返回,保證了數據持久化,正是由於有這個命令,所以 redis 提供了配置項讓我們自行決定何時進行磁盤同步,redis 在 redis.conf 中提供了appendfsync 配置項,有如下三個選項:

# appendfsync always
appendfsync everysec
# appendfsync no
  • always:每次有寫入命令都進行緩存區與磁盤數據同步,這樣保證不會有數據丟失,但是這樣會導致 redis 的吞吐量大大下降,下降到每秒只能支持幾百的 TPS ,這違背了 redis 的設計,所以不推薦使用這種方式
  • everysec:這是 redis 默認的同步機制,雖然每秒同步一次數據,看上去時間也很快的,但是它對 redis 的吞吐量沒有任何影響,每秒同步一次的話意味着最壞的情況下我們只會丟失 1 秒的數據, 推薦使用這種同步機制,兼顧性能和數據安全
  • no:不做任何處理,緩存區與 aof 文件同步交給系統去調度,操作系統同步調度的周期不固定,最長會有 30 秒的間隔,這樣出故障了就會丟失比較多的數據。

這就是三種磁盤同步策略,但是你有沒有注意到一個問題,AOF 文件都是追加的,隨着服務器的運行 AOF 文件會越來越大,體積過大的 AOF 文件對 redis 服務器甚至是主機都會有影響,而且在 Redis 重啟時加載過大的 AOF 文件需要過多的時間,這些都是不友好的,那 Redis 是如何解決這個問題的呢?Redis 引入了重寫機制來解決 AOF 文件過大的問題。

3、Redis 是如何進行 AOF 文件重寫的?

Redis AOF 文件重寫是把 Redis 進程內的數據轉化為寫命令同步到新 AOF 文件的過程,重寫之後的 AOF 文件會比舊的 AOF 文件占更小的體積,這是由以下幾個原因導致的:

  • 進程內已經超時的數據不再寫入文件
  • 舊的 AOF 文件含有無效命令,如 del key1、hdel key2、srem keys、set a111、set a222等。重寫使用進程內數據直接生成,這樣新的AOF文件只保 留最終數據的寫入命令
  • 多條寫命令可以合併為一個,如:lpush list a、lpush list b、lpush list c可以轉化為:lpush list a b c。為了防止單條命令過大造成客戶端緩衝區溢 出,對於 list、set、hash、zset 等類型操作,以 64 個元素為界拆分為多條。

重寫之後的 AOF 文件體積更小了,不但能夠節約磁盤空間,更重要的是在 Redis 數據恢復時,更小體積的 AOF 文件加載時間更短。AOF 文件重寫跟 RDB 持久化一樣分為手動觸發自動觸發,手動觸發直接調用 bgrewriteaof 命令就好了,我們後面會詳細聊一聊這個命令,自動觸發就需要我們在 redis.conf 中修改以下幾個配置

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • auto-aof-rewrite-percentage:代表當前 AOF文件空間 (aof_current_size)和上一次重寫后 AOF 文件空間(aof_base_size)的比值,默認是 100%,也就是一樣大的時候
  • auto-aof-rewrite-min-size:表示運行 AOF 重寫時 AOF 文件最小體積,默認為 64MB,也就是說 AOF 文件最小為 64MB 才有可能觸發重寫

滿足了這兩個條件,Redis 就會自動觸發 AOF 文件重寫,AOF 文件重寫的細節跟 RDB 持久化生成快照有點類似,下面是 AOF 文件重寫流程圖:

AOF 文件重寫也是交給子進程來完成,跟 RDB 生成快照很像,AOF 文件重寫在重寫期間建立了一個 aof_rewrite_buf 緩存區來保存重寫期間主進程響應的命令,等新的 AOF 文件重寫完成后,將這部分文件同步到新的 AOF 文件中,最後用新的 AOF 文件替換掉舊的 AOF 文件。需要注意的是在重寫期間,舊的 AOF 文件依然會進行磁盤同步,這樣做的目的是防止重寫失敗導致數據丟失,

Redis 持久化數據恢復

我們知道 Redis 是基於內存的,所有的數據都存放在內存中,由於機器宕機或者其他因素重啟了就會導致我們的數據全部丟失,這也就是要做持久化的原因,當服務器重啟時,Redis 會從持久化文件中加載數據,這樣我們的數據就恢復到了重啟前的數據,在數據恢復這一塊Redis 是如何實現的?我們先來看看數據恢復的流程圖:

Redis 的數據恢複流程比較簡單,優先恢復的是 AOF 文件,如果 AOF 文件不存在時則嘗試加載 RDB 文件,為什麼 RDB 的恢復速度比 AOF 文件快,但是還是會優先加載 AOF 文件呢?我個人認為是 AOF 文件數據更全面並且 AOF 兼容性比 RDB 強,需要注意的是當存在 RDB/AOF 時,如果數據加載不成功,Redis 服務啟動會失敗。

最後

目前互聯網上很多大佬都有 Redis 系列教程,如有雷同,請多多包涵了。原創不易,碼字不易,還希望大家多多支持。若文中有所錯誤之處,還望提出,謝謝。

歡迎掃碼關注微信公眾號:「平頭哥的技術博文」,和平頭哥一起學習,一起進步。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

紐約氣候週活動 促緊急降低全球暖化

摘錄自2018年9月25日中央社報導

每年聯合國大會召開之際,多國元首和政府領袖同時舉行的「氣候週」今天(25日)開跑,他們敦促世界領袖緊急採取行動降低全球暖化。

波蘭12月將主辦聯合國氣候變化綱要公約第24次締約方會議(COP24),聯合國氣候首長艾斯皮諾薩(Patricia Espinosa)呼籲各國團結,支持2015年巴黎協定所訂規定,將全球暖化升溫限制在攝氏兩度以下。

艾斯皮諾薩表示,各國並未實現他們的承諾。並說:「各國目前依據巴黎協定做出的承諾,將使得全球溫度在2100年升高約三度。」

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

福特「Model E」向特斯拉與雪佛蘭宣戰!

福特(Ford)執行長 Mark Fields 於 4 月 28 日對外表示,福特正在開發能與特斯拉(Tesla) Model 3 與雪佛蘭(Chevrolet ) Bolt 純電動車匹敵的長程電動車,目標是要達到單次充電續航里程 200 英里,在越來越多車廠投入電動車製造的同時,福特打算「成為其中的佼佼者」,甚至是「坐上傲視群雄的位置」。此話一出,向電動車市場其他車廠宣戰的意味濃厚。

雖然 Fields 並未透露太多細節,但這還是福特高層第一次直接對外證實,公司正在研擬向特斯拉與雪佛蘭挑戰的電動車開發計畫。Fields 未提及確切的上市時間,僅表示該電動車將會取名為「Model E」,計畫將於 2019 年在福特本月初宣布要在墨西哥中部興建的新工廠進行組裝,該工廠預計於 2018 年投產。   有別於特斯拉 Model 3 及雪佛蘭 Bolt 為純電動車款,據研究公司 AutoForecast Solutions 指出,福特的 Model E 打算提供 3 種車型,包括油電混合動力車、插電式混合動力車與純電動車,且福特已經以 Model E 名稱申請商標註冊。   回溯至 2015 年 12 月,當時 Fields 曾對外宣布,福特將斥資 45 億美元推動電動車市場,要在 2020 年前,在產品陣容中,加入 13 款油電混合動力車或電動車型,且屆時福特所出產的車輛中,多達 40% 將會是電力驅動的車輛。   福特先前宣布將在 2017 年推出的電動車 Focus Electric 車型續航里程僅能達到 76 英里,即便將在今年秋季增加到 100 英里,不過,仍遠低於將於今年底推出的雪佛蘭 Bolt,以及預計 2 年內交車的特斯拉 Model 3 單次充電續航里程數。

(首圖來源: CC BY 2.0)

(本文授權轉載自《》─〈〉)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

遲到的故障公告:錯誤的緩存數據引發新版博客後台發布后的故障

10月18日晚上 22:00 ,我們對處於灰度發布階段的新版博客後台(Angular 8.2.7 + .NET Core 3.0)進行了一次發布操作,在發布後由於清除緩存 web api 的一個 bug 造成在發布后通過新版博客後台修改的博文無法訪問(404錯誤);在發現問題后,我們回退至發布之前的版本,但是由於 appsettings.Production.json 配置文件的不一致造成回退後的版本出現 500 錯誤;在修復配置文件問題后,在 docker swarm 集群上部署時又遭遇奇怪的容器健康檢查失敗的問題,多次部署后才成功,直至 23:00 左右才恢復正常。

非常抱歉,這次故障給使用新版博客後台的園友帶來了很大的麻煩,請您諒解。

在這次發布中包含一個比較大但卻沒有引起我們足夠重視的變更,原先在博客後台代碼中進行的清除 memcached 緩存(修改博文時清除對應的緩存)的操作改為調用 web api ,在實現清除緩存 web api 時由於沒有足夠重視在沒有寫集成測試覆蓋的情況下就發布了,從而沒有及時發現其中埋藏的一個 bug ,這個 bug 是由下面的 C# 代碼引起的:

await _cacheService.RemoveAsync(CacheKeyManager.GetBlogPost(blogId.Value, postId.Value));
var post = await blogPostService.GetCachedPostById(blogId.Value, postId.Value);            
//...
if (post.DisplayOnHomePage)
{
    await ClearHomePostsList(blogId.Value);
}
//..

上面的代碼中在清除所修改博文的緩存后,又獲取該博文進一步清除與該博文相關聯的緩存,調用 GetCachedPostById 方法時又創建了緩存,但由於實現時漏寫了 DTO 映射配置代碼,造成緩存的 BlogPostDto 字段值不完整從而 PostId 的值為 0 。在我們的緩存機制中,對於不存在的博文,會 new 一個空的 PostId 為 0 的 BlogPostDto 放入緩存,所以 PostId 為 0 的緩存數據都當作不存在的博文直接響應 404 ,故障因此而引發。

針對這次故障,在修掉 bug 代碼的同時我們將採取以下改進措施:

1)對從緩存中獲取的數據進行校驗並自動修復,這樣即使出現錯誤的緩存數據,也可以減少對業務的影響。

else if (blogPost.PostId != postId)
{
    blogPost = await GetBlogPostById(blogId, postId);
    await _cacheService.UpdateAsync(cacheKey, 3600, blogPost);
}

2)加強 Code Review

3)提高集成測試的覆蓋率

4)解決生產環境配置管理的問題

5)改用 k8s 部署生產環境

最近的新版博客後台發布故障暴露了我們在團隊開發能力上的落後,我們正在努力改進與提升,希望大家能夠諒解我們暫時的 low 。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?