# srandmember

### 1. 基本語法

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

對集合進行`|count|`次隨機抽樣，並回傳抽樣結果；**重複**或**不重複抽樣**取決於`count`正負。

| `count`取值 | 抽樣方式      | 回傳結果                                                                              |
| --------- | --------- | --------------------------------------------------------------------------------- |
| 正整數       | **不重複抽樣** | <p>小於等於<code>count</code>個不重複成員；<br>若<code>count</code>大於集合成員數量，最多僅回傳集合內所有成員。</p> |
| 負整數       | **重複抽樣**  | Redis版本2.6開始，回傳`\|count\|`個可能重複的成員`。`                                             |
| 非整數       | **-**     | 錯誤訊息                                                                              |
| 0         | -         | 空值                                                                                |

### **2. 範例**

**(1) 隨機挑選1個成員**

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

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

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

**(2) \[不重複抽樣]：隨機挑選n個不重複成員**

* **n** 不超過集合成員總數

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

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

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

* **n** 超過集合成員總數

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

let n = 5;
client.srandmember('food', n, redis.print);
client.srandmember('food', n, redis.print);
client.srandmember('food', n, redis.print);
```
{% endtab %}
{% endtabs %}

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

**(3) \[重複抽樣]：隨機挑選n個成員，同一個成員可以被重複挑選。**

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

let n = -5;
client.srandmember('food', n, redis.print);
client.srandmember('food', n, redis.print);
client.srandmember('food', n, redis.print);
```
{% endtab %}
{% endtabs %}

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

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

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

let n = 9223372036854775808;
client.srandmember('food', n, redis.print);
```
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Output-TS" %}
```
ReplyError: ERR value is not an integer or out of range
```
{% endtab %}
{% endtabs %}

