---
# System prepended metadata

title: redis筆記
tags: [note]

---

###### tags: `note`
# redis筆記

## 資料的生命週期

Redis把資料儲存在memory內
當系統意外停機時，資料將遺失

Redis有內建的備份機制
Ref: https://redis.io/topics/persistence
中文說明: https://tachingchen.com/tw/blog/redis-data-persistence/
分為RDB及AOF兩種
RDB預設備份情境:
1. 900秒內1次寫入
2. 300秒內10次寫入
3. 30秒內10000次寫入
4. 安全停機(在Docker內為docker stop)

可在redis-cli使用set bgsave ""
或直接修改redis.conf設定檔

## Singleton module

每次呼叫GetDatabase()時不會創建新的實體


## 條件插入
原生指令:
SET key value [EX seconds|PX milliseconds|KEEPTTL] [NX|XX]
* NX -- Only set the key if it does not already exist.
* XX -- Only set the key if it already exist.

C# Client(StackExchange.Redis):
```
bool StringSet(RedisKey key, RedisValue value, TimeSpan? expiry = null, When when = When.Always, CommandFlags flags = CommandFlags.None);

public enum When
{
    Always = 0,
    Exists = 1,
    NotExists = 2
}
```
設定When.NotExists避免發生value覆寫