Redis之品鑑之旅(五)

2022-02-22 03:56:07 字數 1646 閱讀 8705

redis事務

典型例子:銀行轉賬,a給b轉賬100萬,首先要a的賬戶減去100萬,然後b的賬戶增加100萬,如果中間斷了那就出問題了。所以我們人為的將這件事進行原子化,做成乙個最小單位。要麼一起成功要麼一起失敗。

redis是一種簡單的資料儲存形式,redis的事務是不支援回滾的。

之前的sqlserver的事務,開了乙個事務,去修改表的資料。然後有乙個新的會話,或者新的連線,這個時候如果我們這兒連線去修改或者查詢這個表時,可能會一直等待,直到事務操作完畢。

而redis則不然,如果同樣的操作使用redis事務的話,會導致事務操作失敗。redis在開啟事務前監聽了3個要修改key的版本號,如果在這個事務期間,其他的連線可以修改這3個key對應的值,但是會影響當前開啟事務這個會話的操作,讓事務提交不成功。

//事務模式 

using (redisclient client = new redisclient("127.0.0.1", 6379, "12345", 10))

//根據key取出值,返回string

console.writeline(client.get("a") + ":" + client.get("b") + ":" + client.get("c"));

console.readline();

}

所以,在redis使用事務的情況下,必須使用watch進行監聽一下對應的key值,凡是需要事務操作的key,都要包含在watch裡面進行監聽。

單執行緒理解誤區:(看**)

//單執行緒理解誤區

using (redisclient client1 = new redisclient("127.0.0.1", 6379, "12345", 10))

else

}}); }}

console.readline();

在我的電腦上最終列印結果:

number == null

number == null

number == null

number == null

number != null

number != null

number != null

number != null

number != null

number != null

這裡面的語句(if (client.get("number") == null))會出現4次執行成功,這會誤導我們對單執行緒的理解。說明進入這個判斷時,有4個同時進入了,這4個獲取過程會排隊到redis裡面,redis會乙個個的進行執行,那麼這4個就都是成功的,所以會有4次成功執行,而這4次執行完之後,key就被賦值了,其他執行緒進入時,就會不為null。這裡面的單執行緒指的是redis執行的過程,而不是程式中線程執行的過程。如果想要只進入一次,就需要對這個過程加鎖。(我的理解是,因為我的cpu是2核4執行緒,所以會有4個執行緒同時進入)

//單執行緒理解誤區

using (redisclient client1 = new redisclient("127.0.0.1", 6379, "12345", 10))

else}}

}); }}

console.readline();

Redis之旅 安裝

可以用作快取 訊息中介軟體 計數器 定時器 資料庫等。或簡單了解了redis後,那麼我們就來在vmware裡安裝redis,redis官網也推薦安裝在linux系統。我的linux版本為centos 6.8。不知道自己linux版本可以使用如下命令,來檢視。lsb release a 網絡卡必須開啟...

redis 五 Redis持久化之aof

前言 1 官網介紹 以下內容為有道詞典翻譯 aof的優勢 使用aof redis更加持久 您可以使用不同的fsync策略 完全沒有fsync,每秒fsync,每個查詢fsync。使用預設策略fsync時,每秒的寫入效能仍然很好 fsync是使用後台執行緒執行的,並且在沒有進行fsync的情況下,主線...

Redis之(五)持久化

redis提供了兩種持久化的方式 1 rdb redis database 模式,就是在不同的時間點,將redis儲存的資料生成快照並儲存到磁碟等介質上 2 aof appendonlyfile 模式,則換了乙個角度來實現持久化,那就是將redis執行過的所有寫指令記錄下來,在下次redis重新啟動...