# informat.redis Redis

## 概述

使用`informat.redis`对象进行Redis相关操作

## opsForValue

获取值操作对象

```javascript
const ops = informat.redis.opsForValue();
```

**返回值**

返回一个值操作对象。

**示例**
```javascript
const ops = informat.redis.opsForValue();
```

::: tip 注意：
- 此方法不需要参数，返回一个可以进行值操作的对象。
:::

## opsForList

获取集合操作对象

```javascript
const ops = informat.redis.opsForList();
```

**返回值**

返回一个集合操作对象。

**示例**
```javascript
const ops = informat.redis.opsForList();
```

## opsForGeo

获取地理位置操作对象

```javascript
const ops = informat.redis.opsForGeo();
```

**返回值**

返回一个地理位置操作对象。

**示例**
```javascript
const ops = informat.redis.opsForGeo();
```

## redisTemplate

获取redis操作模板

```javascript
const redisTemplate = informat.redis.redisTemplate();
```

**返回值**

返回一个redis操作模板对象。

**示例**
```javascript
const redisTemplate = informat.redis.redisTemplate();
```


## delete

删除指定 key 的值

```javascript
informat.redis.delete(key)
```

| 参数  | 类型      | 描述           |
|-|--|-|
| key   | `String`  | 要删除的 key    |

**返回值**

返回删除操作的结果，成功返回 true，失败返回 false。

**示例**
```javascript
informat.redis.delete('key1');
```

::: tip 注意：
- 参数 key 必须为字符串类型。该方法适用于删除单个 key 的场景。
:::


## deleteAll

删除指定 key 组的所有值

```javascript
informat.redis.deleteAll(keys)
```

| 参数  | 类型               | 描述                  |
|-|------------------|--|
| keys  | `Array<String>`  | 要删除的 key 组       |

**返回值**

返回删除的 key 数量，类型为 `Number`

**示例**
```javascript
informat.redis.deleteAll(['key1', 'key2', 'key3']);
```

::: tip 注意：
- 参数 keys 必须为数组类型，且数组元素必须为字符串类型。该方法适用于批量删除 key 的场景。
:::


## set

设置指定 key 的值

```javascript
ops.set(key, value, timeout, redisTimeoutUnit)
```

|参数| 类型                 | 描述      |
|-|--------------------|---------|
|key| `String`           | 要设置的key |
|value| `String`           | 要设置的值   |
|timeout| `Integer`          | 选填，有效时间 |
|redisTimeoutUnit| `RedisTimeoutUnit` | 选填，时间单位 |

:::info RedisTimeoutUnit可选值
- NANOSECONDS 纳秒
- MICROSECONDS 微秒
- MILLISECONDS 毫秒
- SECONDS 秒
- MINUTES 分钟
- HOURS 小时
- DAYS 天
:::

**返回值**

无返回值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
ops.set('key1', 'value1', 5, 'MINUTES');
```

::: tip 注意：
- 参数 key 和 value 都必须为字符串类型。该方法适用于设置单个键值对，可以用于缓存数据或持久化数据。
:::



## setIfAbsent

仅当 key 不存在时设置指定 key 的值

```javascript
ops.setIfAbsent(key, value, timeout, redisTimeoutUnit)
```

|参数| 类型      | 描述      |
|-|-|---------|
|key| `String`  | 要设置的key |
|value| `String`  | 要设置的值   |
|timeout| `Integer`          | 选填，有效时间 |
|redisTimeoutUnit| `RedisTimeoutUnit` | 选填，时间单位 |

**返回值**

返回一个布尔值，表示是否成功设置值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const success = ops.setIfAbsent('key1', 'value1', 5, 'MINUTES');
```

::: tip 注意：
- 参数 key 和 value 都必须为字符串类型。该方法适用于仅在键不存在时设置值，可以用于实现分布式锁。
:::



## setIfPresent

仅当 key 存在时设置指定 key 的值

```javascript
ops.setIfPresent(key, value, timeout, redisTimeoutUnit)
```

|参数| 类型      | 描述      |
|-|-|---------|
|key| `String`  | 要设置的key |
|value| `String`  | 要设置的值   |
|timeout| `Integer`          | 选填，过期时间 |
|redisTimeoutUnit| `RedisTimeoutUnit` | 选填，时间单位 |

**返回值**

返回一个布尔值，表示是否成功设置值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const success = ops.setIfPresent('key1', 'value1', '5', 'MINUTES');
```

::: tip 注意：
- 参数 key 和 value 都必须为字符串类型。该方法适用于仅在键存在时设置值，可以用于更新已有的键值对。
:::



## multiSet

批量设置指定 key 的值

```javascript
ops.multiSet(keyValuePairs)
```

|参数| 类型      | 描述        |
|-|-|-----------|
|keyValuePairs| `Object`  | 要设置的键值对对象 |

**返回值**

无返回值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
ops.multiSet({ 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' });
```

::: tip 注意：
- 参数 keyValuePairs 必须为对象类型，且对象的键和值都必须为字符串类型。该方法适用于批量设置数据的场景，可以减少与 Redis 的通信次数，提高系统性能。
:::

## multiSetIfAbsent

仅当所有 key 都不存在时批量设置指定 key 的值

```javascript
ops.multiSetIfAbsent(keyValuePairs)
```

|参数| 类型      | 描述        |
|-|-|-----------|
|keyValuePairs| `Object`  | 要设置的键值对对象 |

**返回值**

返回一个布尔值，表示是否成功设置值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const success = ops.multiSetIfAbsent({ 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' });
```

::: tip 注意：
- 参数 keyValuePairs 必须为对象类型，且对象的键和值都必须为字符串类型。该方法适用于仅在所有键都不存在时批量设置值，可以用于实现分布式锁。
:::



## setRange

设置指定 key 的值的子字符串

```javascript
ops.setRange(key, value, offset)
```

|参数| 类型      | 描述         |
|-|-|------------|
|key| `String`  | 要设置的key    |
|value| `String`  | 要设置的值的子字符串 |
|offset| `Integer`  | 子字符串的起始位置  |

**返回值**

无返回值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
ops.setRange('key1', 'value1', 2);
```

::: tip 注意：
- 参数 key 和 value 必须为字符串类型，offset 必须为数字类型。该方法适用于更新字符串的部分内容。
:::


好的，下面是根据你提供的模板格式编写的各个方法的开发文档示例：



## get

获取指定 key 的值

```javascript
ops.get(key)
```

|参数| 类型      | 描述      |
|-|-|---------|
|key| `String`  | 要获取的key |

**返回值**

返回 key 对应的 value，如果 key 不存在则返回 null。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const value = ops.get('key1');
```

::: tip 注意：
- 参数 key 必须为字符串类型。该方法适用于获取单个键值对，可以用于读取缓存数据或持久化数据。
:::



## getAndExpire

获取指定 key 的值，并设置过期时间

```javascript
ops.getAndExpire(key, timeout, redisTimeoutUnit)
```

|参数| 类型      | 描述        |
|-|-|-----------|
|key| `String`  | 要获取的key   |
|timeout| `Integer`  | 过期时间 |
|redisTimeoutUnit| `RedisTimeoutUnit` | 时间单位 |

**返回值**

返回 key 对应的 value，如果 key 不存在则返回 null。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const value = ops.getAndExpire('key1', 60, 'SECONDS'); // 获取 key1 的值，并设置其在60秒后过期
```

::: tip 注意：
- 参数 key 必须为字符串类型，timeout 必须为数字类型。该方法适用于需要获取值并同时设置过期时间的场景。
:::



## getAndPersist

获取指定 key 的值，并移除过期时间

```javascript
ops.getAndPersist(key)
```

|参数| 类型      | 描述      |
|-|-|---------|
|key| `String`  | 要获取的key |

**返回值**

返回 key 对应的 value，如果 key 不存在则返回 null。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const value = ops.getAndPersist('key1'); // 获取 key1 的值，并移除其过期时间
```

::: tip 注意：
- 参数 key 必须为字符串类型。该方法适用于需要获取值并同时移除过期时间的场景。
:::



## getAndSet

获取指定 key 的值，并设置新的值

```javascript
ops.getAndSet(key, newValue)
```

|参数| 类型      | 描述      |
|-|-|---------|
|key| `String`  | 要获取的key |
|newValue| `String`  | 新的值     |

**返回值**

返回 key 之前对应的 value，如果 key 不存在则返回 null。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const oldValue = ops.getAndSet('key1', 'newValue'); // 获取 key1 的旧值，并设置新的值为 newValue
```

::: tip 注意：
- 参数 key 和 newValue 都必须为字符串类型。该方法适用于需要获取旧值并设置新值的场景。
:::



## multiGet

批量获取指定 key 的值

```javascript
ops.multiGet(keys)
```

|参数| 类型              | 描述      |
|-|-----------------|-|
|keys| `Array<String>` | 要获取的key组 |

**返回值**

返回 key 对应的 value 的数组，如果 key 不存在则返回 null。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const values = ops.multiGet(['key1', 'key2', 'key3']);
```

::: tip 注意：
- 参数 keys 必须为数组类型，且数组元素必须为字符串类型。该方法适用于批量获取数据的场景，可以减少与 Redis 的通信次数，提高系统性能。
:::



## increment

将指定 key 的值加 1

```javascript
ops.increment(key)
```

|参数| 类型      | 描述       |
|-|-|----------|
|key| `String`  | 要增加值的key |

**返回值**

返回增加后的值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const newValue = ops.increment('key1'); // 将 key1 的值加 1
```

::: tip 注意：
- 参数 key 必须为字符串类型。该方法适用于对数值类型的键值对进行自增操作。
:::



## decrement

将指定 key 的值减 1

```javascript
ops.decrement(key)
```

|参数| 类型      | 描述       |
|-|-|----------|
|key| `String`  | 要减少值的key |

**返回值**

返回减少后的值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const newValue = ops.decrement('key1'); // 将 key1 的值减 1
```

::: tip 注意：
- 参数 key 必须为字符串类型。该方法适用于对数值类型的键值对进行自减操作。
:::



## append

在指定 key 的值后追加字符串

```javascript
ops.append(key, value)
```

|参数| 类型      | 描述       |
|-|-|----------|
|key| `String`  | 要追加值的key |
|value| `String`  | 要追加的字符串  |

**返回值**

返回追加后的值的长度。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const newLength = ops.append('key1', 'appendValue'); // 在 key1 的值后追加字符串 appendValue
```

::: tip 注意：
- 参数 key 和 value 都必须为字符串类型。该方法适用于对字符串类型的键值对进行追加操作。
:::
  

## size

获取指定 key 的值的大小（字节数）

```javascript
ops.size(key)
```

| 参数  | 类型     | 描述          |
|-----|-|-|
| key | `String` | 要获取大小的 key |

**返回值**

返回 key 对应值的大小（字节数），如果 key 不存在则返回 0。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const size = ops.size('myKey');
```

::: tip 注意：
- 参数 key 必须为字符串类型。该方法适用于需要获取存储值大小的场景。
:::



## setBit

设置指定 key 的值的某个位的值

```javascript
ops.setBit(key, offset, value)
```

| 参数   | 类型      | 描述                          |
|--|--|-|
| key    | `String`  | 要设置位值的 key              |
| offset | `Integer`  | 要设置的位的偏移量（从 0 开始）|
| value  | `Integer`  | 要设置的位值（0 或 1）        |

**返回值**

返回设置之前该位的值。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const previousValue = ops.setBit('myKey', 5, 1);
```

::: tip 注意：
- 参数 key 必须为字符串类型，offset 必须为数字类型，value 必须为 0 或 1。该方法适用于位操作的场景。
:::



## getBit

获取指定 key 的值的某个位的值

```javascript
ops.getBit(key, offset)
```

| 参数   | 类型      | 描述                          |
|--|--|-|
| key    | `String`  | 要获取位值的 key              |
| offset | `Integer`  | 要获取的位的偏移量（从 0 开始）|

**返回值**

返回指定 key 的值的某个位的值（0 或 1）。

**示例**
```javascript
const ops = informat.redis.opsForValue();
const bitValue = ops.getBit('myKey', 5);
```

::: tip 注意：
- 参数 key 必须为字符串类型，offset 必须为数字类型。该方法适用于位操作的场景。
:::
  

## opsForList

提供对 Redis 列表操作的方法集合。

## range

获取列表中指定范围内的元素。

```javascript
opsForList.range(key, start, end)
```

| 参数   | 类型      | 描述   |
|--|--|------|
| key    | `String`  | 列表的键 |
| start  | `Integer`  | 起始位置 |
| end    | `Integer`  | 结束位置 |

**返回值**

返回指定范围内的元素列表。

**示例**
```javascript
const ops = informat.redis.opsForList();
const elements = ops.range('myList', 0, -1);
```

::: tip 注意：
- 参数 `key` 必须为字符串类型，`start` 和 `end` 必须为数字类型。`start` 和 `end` 可以为负数，表示从列表末尾开始计数。
:::



## trim

修剪列表，只保留指定范围内的元素。

```javascript
opsForList.trim(key, start, end)
```

| 参数   | 类型      | 描述   |
|--|--|------|
| key    | `String`  | 列表的键 |
| start  | `Integer`  | 起始位置 |
| end    | `Integer`  | 结束位置 |

**返回值**

无返回值。

**示例**
```javascript
const ops = informat.redis.opsForList();
ops.trim('myList', 1, 3);
```

::: tip 注意：
- 参数 `key` 必须为字符串类型，`start` 和 `end` 必须为数字类型。`start` 和 `end` 可以为负数，表示从列表末尾开始计数。
:::



## size

获取列表的长度。

```javascript
opsForList.size(key)
```

| 参数   | 类型      | 描述   |
|--|--|------|
| key    | `String`  | 列表的键 |

**返回值**

返回列表的长度。

**示例**
```javascript
const ops = informat.redis.opsForList();
const length = ops.size('myList');
```

::: tip 注意：
- 参数 `key` 必须为字符串类型。
:::



## leftPush

将一个元素插入到列表的头部。

```javascript
opsForList.leftPush(key, value)
```

| 参数   | 类型      | 描述     |
|--|--|--------|
| key    | `String`  | 列表的键   |
| value  | `Object`     | 要插入的元素 |

**返回值**

返回插入后列表的长度。

**示例**
```javascript
const ops = informat.redis.opsForList();
const length = ops.leftPush('myList', 'element');
```

::: tip 注意：
- 参数 `key` 必须为字符串类型，`value` 可以为任意类型。
:::



## leftPushAll

将多个元素插入到列表的头部。

```javascript
opsForList.leftPushAll(key, values)
```

| 参数   | 类型          | 描述       |
|--|-|----------|
| key    | `String`      | 列表的键     |
| values | `Array<Object>`  | 要插入的元素数组 |

**返回值**

返回插入后列表的长度。

**示例**
```javascript
const ops = informat.redis.opsForList();
const length = ops.leftPushAll('myList', ['element1', 'element2']);
```

::: tip 注意：
- 参数 `key` 必须为字符串类型，`values` 必须为数组类型，且数组元素可以为任意类型。
:::



## leftPushIfPresent

将一个元素插入到列表的头部，仅当列表存在时。

```javascript
opsForList.leftPushIfPresent(key, value)
```

| 参数   | 类型      | 描述     |
|--|--|--------|
| key    | `String`  | 列表的键   |
| value  | `Object`     | 要插入的元素 |

**返回值**

返回插入后列表的长度，如果列表不存在则返回 0。

**示例**
```javascript
const ops = informat.redis.opsForList();
const length = ops.leftPushIfPresent('myList', 'element');
```

::: tip 注意：
- 参数 `key` 必须为字符串类型，`value` 可以为任意类型。
:::



## rightPush

将一个元素插入到列表的尾部。

```javascript
opsForList.rightPush(key, value)
```

| 参数   | 类型      | 描述     |
|--|--|--------|
| key    | `String`  | 列表的键   |
| value  | `Object`     | 要插入的元素 |

**返回值**

返回插入后列表的长度。

**示例**
```javascript
const ops = informat.redis.opsForList();
const length = ops.rightPush('myList', 'element');
```

::: tip 注意：
- 参数 `key` 必须为字符串类型，`value` 可以为任意类型。
:::

好的，以下是根据你提供的 Redis 中 `opsForList` 方法的详细说明文档：



## rightPushAll

将所有指定的值插入到存于 key 的列表的尾部

```javascript
opsForList.rightPushAll(key, values)
```

| 参数     | 类型            | 描述                 |
|--------|--|-|
| key    | `String`        | 列表对应的 key       |
| values | `Array<String>` | 要插入的值的数组     |

**返回值**

返回插入操作后列表的长度。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
const length = opsForList.rightPushAll('myList', ['value1', 'value2', 'value3']);
```

::: tip 注意：
- 参数 key 必须为字符串类型，values 必须为数组类型且数组元素必须为字符串类型。
:::



## rightPushIfPresent

仅当列表存在时才将值插入到列表的尾部

```javascript
opsForList.rightPushIfPresent(key, value)
```

| 参数    | 类型      | 描述                 |
|-------|--|-|
| key   | `String`  | 列表对应的 key       |
| value | `String`  | 要插入的值           |

**返回值**

返回插入操作后列表的长度，如果列表不存在则返回 0。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
const length = opsForList.rightPushIfPresent('myList', 'value1');
```

::: tip 注意：
- 参数 key 和 value 必须为字符串类型。
:::



## set

将列表 key 下标为 index 的元素的值设置为 value

```javascript
opsForList.set(key, index, value)
```

| 参数    | 类型      | 描述                 |
|-------|--|-|
| key   | `String`  | 列表对应的 key       |
| index | `Integer`  | 列表的下标           |
| value | `String`  | 要设置的值           |

**返回值**

无返回值。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
opsForList.set('myList', 1, 'newValue');
```

::: tip 注意：
- 参数 key 必须为字符串类型，index 必须为数字类型，value 必须为字符串类型。
:::



## index

获取列表 key 下标为 index 的元素的值

```javascript
opsForList.index(key, index)
```

| 参数    | 类型      | 描述                 |
|-------|--|-|
| key   | `String`  | 列表对应的 key       |
| index | `Integer`  | 列表的下标           |

**返回值**

返回列表中下标为 index 的元素的值，如果 index 超出范围则返回 null。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
const value = opsForList.index('myList', 1);
```

::: tip 注意：
- 参数 key 必须为字符串类型，index 必须为数字类型。
:::



## indexOf

获取列表中指定值的下标

```javascript
opsForList.indexOf(key, value)
```

| 参数    | 类型      | 描述                 |
|-------|--|-|
| key   | `String`  | 列表对应的 key       |
| value | `String`  | 要查找的值           |

**返回值**

返回列表中指定值的下标，如果值不存在则返回 -1。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
const index = opsForList.indexOf('myList', 'value1');
```

::: tip 注意：
- 参数 key 和 value 必须为字符串类型。
:::



## leftPop

移除并返回列表 key 的头元素

```javascript
opsForList.leftPop(key)
```

| 参数  | 类型      | 描述                 |
|-----|--|-|
| key | `String`  | 列表对应的 key       |

**返回值**

返回列表的头元素，如果列表为空则返回 null。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
const value = opsForList.leftPop('myList');
```

::: tip 注意：
- 参数 key 必须为字符串类型。
:::



## rightPop

移除并返回列表 key 的尾元素

```javascript
opsForList.rightPop(key)
```

| 参数  | 类型      | 描述                 |
|-----|--|-|
| key | `String`  | 列表对应的 key       |

**返回值**

返回列表的尾元素，如果列表为空则返回 null。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
const value = opsForList.rightPop('myList');
```

::: tip 注意：
- 参数 key 必须为字符串类型。
:::



## rightPopAndLeftPush

从列表 sourceKey 的尾部弹出一个值，并将该值推入到列表 destinationKey 的头部

```javascript
opsForList.rightPopAndLeftPush(sourceKey, destinationKey)
```

| 参数             | 类型      | 描述                           |
|----------------|--|--|
| sourceKey      | `String`  | 源列表对应的 key               |
| destinationKey | `String`  | 目标列表对应的 key             |

**返回值**

返回从源列表弹出的值，如果源列表为空则返回 null。

**示例**
```javascript
const opsForList = informat.redis.opsForList();
const value = opsForList.rightPopAndLeftPush('sourceList', 'destinationList');
```

::: tip 注意：
- 参数 sourceKey 和 destinationKey 必须为字符串类型。
:::
  



