首页 > 数据库 >Redis笔记

Redis笔记

时间:2023-10-08 20:22:52浏览次数:32  
标签:删除 Stream 过期 Redis 笔记 消息 key

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

相关文章

  • iaas运维笔记记录
    iaas运维笔记记录镜像创建source/etc/keystone/admin-openrc.sh(挂载用户配置文件)glanceimage-create--name"cirros"--disk-formatqcow2--container-formatbare<cirros-0.5.2-x86_64-disk.qcow2--name:创建后的镜像名称--disk-format:镜像格式--contrainer-form......
  • 学习笔记421—Win7下使用U盘安装linux Ubuntu16.04双系统图文教程
    Win7下使用U盘安装linuxUbuntu16.04双系统图文教程安装步骤:1、下载Ubuntu16.04镜像软件;2、使用ultraISO软件制作U盘启动盘;3、利用U盘启动盘来安装Ubuntu系统;4、使用EasyBCD创建启动系统启动引导;5、重启系统即可。Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源G......
  • 研发三维GIS系统笔记/框架改造/智能指针重构框架-003
    1.使用智能指针重构系统原有的系统都是裸指针,在跨模块与多线程中使用裸指针管理起来很麻烦,尤其是多任务系统中会出现野指针1classCELLTileTask:publicCELLTask2{3public:4CELLQuadTree*_node;5TileId_tileId;6CELL......
  • 学习笔记420—【译】理解LSTM(通俗易懂版)
    【译】理解LSTM(通俗易懂版)循环神经网络(RecurrentNeuralNetworks)人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。在理解当前文字的时候,你并不会忘记之前看过的文字,从头思考当前文字的含义。传统的神经网络并......
  • 密码协议学习笔记(8.16):几种特殊的秘密分享体系
    已知两个秘密的碎片,计算秘密的乘积的碎片:已知两个秘密$\alpha_0,\beta_0$分别实现了门限值为$t$的分享记$$f_{\alpha}(x)=\alpha_0+\alpha_1x+\cdots+\alpha_{t-1}x^{t-1}$$$$f_{\beta}(x)=\beta_0+\beta_1x+\cdots+\beta_{t-1}x^{t-1}$$秘密碎片为$$A_1=f_{\alpha}(1),A_2=......
  • Dapr学习笔记(二)-安装Dapr环境(Docker)
    安装DaprCLI。它使你能够启动、运行并管理Dapr实例。它还提供调试支持。安装 DockerDesktop。如果在Windows上运行,请确保将用于Windows的DockerDesktop配置为使用Linux容器。 备注默认情况下,Dapr使用Docker容器来为你提供最佳的全新体验。若要在D......
  • Asp-Net-Core开发笔记:快速在已有项目中引入EFCore
    前言很多项目一开始选型的时候没有选择EFCore,不过EFCore确实好用,也许由于种种原因后面还是需要用到,这时候引入EFCore也很方便。本文以StarBlog为例,StarBlog目前使用的ORM是FreeSQL,引入EFCore对我来说最大的好处是支持多个数据库,如果是FreeSQL的话,服务注册的时候是单......
  • C#学习笔记--变量类型的转换
    变量类型的转化:转换原则同类型的大的可以装小的,小类型的装大的就需要强制转换。隐式转换:同种类型的转换://有符号long——>int——>short——>sbytelongl=1;inti=1;shorts=1;sbytesb=1;//隐式转换int隐式转换成了long//可以用大范围装小范围的类型(隐......
  • Redis——底层和数据结构
    数据结构简单动态字符串SDS可以认为在Redis中所有的东西最终都是字符串。Redis是C语言实现的,但是Redis没有直接使用C语言中的字符串,C语言字符串是字符数组实现的,存在很多问题:1、获取字符串的长度需要运算,时间复杂度达到O(n)。2、非二进制安全,无法保存\0字符(被识别成结束标识)......
  • Redis——分布式锁
    基本原理synchronized是利用JVM内部的锁监视器控制线程,但是只能在一个JVM中生效。如果有多个JVM的时候,就会有多个线程获取到锁,就无法实现多JVM进程之间的互斥了。因此不能使用JVM内部的锁监视器了,必须使用JVM外部的锁监视器,就能保证只有一个线程获取到锁,就能实现多进程之间的互......