redis数据类型
字符串(String):
存储单个值。
用例:存储文本、数字、计数器等。
SET username "john_doe"
GET username
列表(List):
有序集合,允许重复元素。
用例:消息队列、新闻推送、日志记录等。
LPUSH tasks "task1"
LPUSH tasks "task2"
LRANGE tasks 0 -1
LREM:LREM 命令用于从列表中删除指定数量的元素,根据元素的值来匹配删除
删除列表元素
LREM key count value
key: 列表的名称。
count: 指定删除元素的数量,可以是正数、负数或零。
如果 count 为正数,它将删除列表中与 value 相等的元素,最多删除 count 个。
如果 count 为负数,它将删除列表中与 value 相等的元素,最多删除 count 个,但是会从列表尾部开始删除。
如果 count 为零,它将删除列表中所有与 value 相等的元素。
value: 要删除的元素的值。
LREM mylist 2 "A"
LPOP mylist
LPOP 和 RPOP:这两个命令用于分别从列表的左侧和右侧删除元素。
LPOP key 从列表左侧删除一个元素并返回该元素的值。
RPOP key 从列表右侧删除一个元素并返回该元素的值。
集合(Set):
无序集合,不允许重复元素。
用例:标签、好友列表、唯一值存储等。
SADD tags "tag1"
SADD tags "tag2"
SMEMBERS tags
SMOVE 命令用于将一个元素从一个集合移动到另一个集合。语法如下:
有序集合(Sorted Set):
有序集合,每个成员都关联一个分数(score)。
用例:排行榜、优先级队列、范围查询等。
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2"
ZRANGE leaderboard 0 -1 WITHSCORES
哈希(Hash):
存储字段-值对的集合。
用例:存储对象属性、配置数据、用户信息等。
HSET user:1 name "John"
HSET user:1 age 30
HGET user:1 name
位图(Bitmap):
存储二进制位的数据类型。
用例:统计、在线状态、布隆过滤器等。
SETBIT online_status 1000 1
GETBIT online_status 1000
Redis Stream
Redis Stream(流)是Redis 5.0版本引入的一种数据结构,用于处理实时事件流数据。它提供了一种非常灵活的方式来记录和处理事件序列,非常适合实时消息传递、日志记录、事件溯源以及实时数据分析等应用。以下是Redis Stream的详细介绍:
1. **基本概念**:
- Stream是一个事件日志,类似于队列,但具有更丰富的功能。
- Stream包含多个消息(message),每个消息都有一个唯一的ID,且消息按照ID的顺序存储。
- 消息的内容是键值对,可以包含任何数据。
- 每个Stream有一个名称作为标识符。
2. **Stream的操作**:
- `XADD`:用于向Stream中添加一条消息。
- `XRANGE`:按范围检索消息,可以按ID范围或者消息数量范围检索。
- `XREVRANGE`:按反向范围检索消息。
- `XLEN`:获取Stream的消息数量。
- `XREAD`:从一个或多个Stream中阻塞读取消息。
- `XGROUP`:创建和管理消费者组(Consumer Group),用于多个消费者共同处理Stream中的消息。
- `XACK`:确认消息已被消费。
- `XPENDING`:检查待处理消息的状态。
3. **消费者组(Consumer Group)**:
- 消费者组允许多个消费者协作处理Stream中的消息。
- 每个消费者在消费Stream消息时都有一个唯一的ID。
- 消费者组可以设置不同的消费者,以实现负载均衡和故障转移。
- 消费者组可以使用`XACK`来确认已处理的消息。
4. **消息顺序**:
- Stream 中的消息按照ID的顺序存储,因此消息的顺序是有序的。
- 消费者组可以以有序的方式处理消息,确保消息按照顺序处理。
5. **应用场景**:
- 实时消息传递:例如聊天应用程序、通知系统等。
- 日志记录:用于实时日志记录和监控。
- 事件溯源:跟踪系统中的事件流,支持回放和查询历史事件。
- 实时数据处理:用于实时数据分析和计算。
6. **示例**:
- 创建Stream并添加消息:
```shell
XADD mystream * name Alice age 30
```
- 读取消息:
```shell
XRANGE mystream - +
```
- 创建消费者组和消费者:
```shell
XGROUP CREATE key groupname id [MKSTREAM]
key:流的名称。
groupname:要创建的消费者群组的名称。
id:要指定的起始 ID。可以使用特殊的 ID 值 ">" 表示从最新的消息开始读取,也可以使用 "0" 表示从最旧的消息开始读取。
MKSTREAM(可选):如果指定了该选项,则在流不存在时会创建流。
XGROUP CREATE mystream mygroup $ RESET
XREADGROUP GROUP mygroup consumer1 BLOCK 0 STREAMS mystream >
```
- 确认消息已处理:
```shell
XACK mystream mygroup 1-0
```
Redis Stream提供了一个强大的工具来处理实时事件数据,并允许多个消费者以有序和协同的方式处理消息。它是Redis的一个重要特性,适用于许多实时数据处理和分析的场景。
https://zhuanlan.zhihu.com/p/572350546
PUBLISH:用于将消息发布到指定主题 Channel
PUBLISH channel_name message
SUBSCRIBE:用于订阅一个或多个主题,订阅者将接收发布到这些主题的消息。
SUBSCRIBE channel_name
UNSUBSCRIBE:用于取消订阅一个或多个主题,订阅者将不再接收来自这些主题的消息。
UNSUBSCRIBE channel_name
PSUBSCRIBE:用于通过通配符订阅多个主题,例如使用 "*" 匹配所有主题。
PSUBSCRIBE channel_pattern
PUNSUBSCRIBE:用于取消通配符订阅。
PUNSUBSCRIBE channel_pattern
设置过期时间
EXPIRE 命令:
使用 EXPIRE 命令可以为指定的键(key)设置过期时间(以秒为单位)
EXPIRE key seconds
TTL 命令:
使用 TTL 命令可以查看键的剩余过期时间(以秒为单位)
TTL key
PERSIST 命令:
使用 PERSIST 命令可以移除键的过期时间,使其永不过期
PERSIST key
redis锁的原理
Incr
SET mykey 10 # 设置键 "mykey" 的值为 10
INCR mykey # 对键 "mykey" 中的值递增 1
用于对存储在 Redis 数据库中的整数进行递增操作。具体来说,INCR 命令将存储在指定键(key)中的整数值递增 1,并返回递增后的新值。
SETNX (Set if Not eXists): 不支持过期时间
SETNX mykey "myvalue"
用于设置一个键值对,但仅在指定的键不存在时才设置。
如果键不存在,则 SETNX 命令会将键设置为指定的值,并返回 1(表示成功)。
如果键已经存在,SETNX 不会对键进行任何更改,返回 0(表示键已存在)。
SETEX
SETEX key seconds value
用于设置一个键值对,并为该键设置一个过期时间(TTL - Time To Live)。
命令需要提供键、过期时间(以秒为单位)和值。
键会在指定的时间后自动过期并被删除。
如果成功设置了键的值并为其设置了过期时间,则 SETEX 命令返回 "OK"。
如果指定的键已经存在,SETEX 命令将替换现有键的值并重置过期时间,然后返回 "OK"。
如果命令执行失败,可能返回错误消息,指示失败的原因。
PSETEX
PSETEX 是 Redis 中的一个命令,与 SETEX 类似,但它使用的时间单位是毫秒而不是秒。具体来说,PSETEX 用于设置键的值并为键设置过期时间(TTL - Time To Live),单位为毫秒。
标签:删除,Stream,过期,Redis,笔记,消息,key From: https://www.cnblogs.com/sening/p/17750058.html