# setex

### 1. 基本語法

#### **(1) setex(`key` , `seconds`, `value`)**&#x20;

&#x70BA;**`key`**&#x503C;設定**效期**(expired time)，超過設定的秒數(seconds)後，**`key`**&#x503C;會自動變空值。

{% hint style="info" %}
[**ttl**](https://aiii-mike.gitbook.io/redis/command/key/untitled-3)指令可查&#x8A62;**`key`**&#x5269;下的效期時間。
{% endhint %}

### 2. 範例

#### (1) 為**key**值設定5秒效期，時間超過效期資料自動變空值。

{% tabs %}
{% tab title="TypeScript" %}
```typescript
client.setex('hello', 5, 'world');
​client.ttl('hello', redis.print); 
client.get('hello', redis.print); 
```
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Output-TS" %}
```bash
Reply: 5
Reply: world
```
{% endtab %}
{% endtabs %}

#### (2) 注意：ttl剩0秒的當下，仍然可能取得value(尚未變空值)

{% tabs %}
{% tab title="TypeScript" %}
```typescript
client.setex('hello', 5, 'world');

function delay(ms: number) {
    return new Promise( resolve => setTimeout(resolve, ms) );
}

(async () => { 
    client.get('hello', redis.print); 
    client.ttl('hello', redis.print); 
    await delay(5000);
    client.get('hello', redis.print); 
    client.ttl('hello', redis.print); 
    await delay(1000);
    client.get('hello', redis.print); 
    client.ttl('hello', redis.print); 
})();
    
```
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Output-TS" %}
```bash
Reply: 5
Reply: world
Reply: 0
Reply: world
Reply: -2
Reply: null
```
{% endtab %}
{% endtabs %}

tag: `expire`&#x20;
