# spop

### 1. 基本語法

#### spo&#x70;**(`key`, `[count:<integer>]`, `callback`)**&#x20;

**隨機**從集合中挑選`count`個成員，將該成員從集合中**移除**並回傳；若`count`大於成員數目，則全部移&#x9664;**；**&#x82E5;`count`為負數，則回傳錯誤；若`key`不存在，則回傳空值。

### **2. 範例**

{% hint style="warning" %}
由於移除成員為隨機挑選，以下範例在重新執行後，結果可能會不同。
{% endhint %}

**(1) 隨機移除(抽出)1個成員**

{% tabs %}
{% tab title="TypeScript" %}
```typescript
const arr = ['apple', 'potato', 'onion']
client.sadd('food', arr);
client.smembers('food', redis.print);

client.spop('food', redis.print);
client.smembers('food', redis.print);
```
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Output-TS" %}
```
Reply: apple,onion,potato
Reply: onion
Reply: apple,potato
```
{% endtab %}
{% endtabs %}

**(2) 隨機移除(抽出)n個成員**

{% tabs %}
{% tab title="TypeScript" %}
```typescript
const arr = ['apple', 'potato', 'onion']
client.sadd('food', arr);
client.smembers('food', redis.print);

let n = 2;
client.spop('food', n,  redis.print);
client.smembers('food', redis.print);
```
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Output-TS" %}
```
Reply: apple,onion,potato
Reply: apple,potato
Reply: onion
```
{% endtab %}
{% endtabs %}

**(3) 若`count`非正整數或超出範圍，則回傳錯誤**

{% tabs %}
{% tab title="TypeScript" %}
```typescript
const arr = ['apple', 'potato', 'onion']
client.sadd('food', arr);

client.spop('food', -1,  redis.print);
```
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Output-TS" %}
```
ReplyError: ERR value is out of range, value must between 0 and 9223372036854775807
```
{% endtab %}
{% endtabs %}

