redis再战之进阶消息订阅,事务,缓存《四》

【Redis系列】消息订阅、pipeline . 事务、modulesmd、缓存 阅读详情

管道

一个请求/相应服务可以实现如下,即使客户端没有读取到旧请求的响应,服务端依旧可以处理新请求。通过这种方式,可以完全无需等待服务端应答地发送多条指令给服务端,并最终一次性读取所有应答。管道技术最显著的优势是提高了redis服务的性能。

yum install nc
nc localhost 6379
keys *
echo -e "set k2 99\nincr k2\n get k2" | nc localhost 6379

注:
需要注意的是,命令与命令之间是需要\n换行符隔开的。echo打印set k2 99 \n incr k2 \n get k2字符串,-e参数会识别字符串的\n为换行,就相当于发送了三条命令set k2 99,incr k2,get k2,然后把打印的内容交给nc localhost 6379也就是redis。
总结:管道的作用就是让通信的成本变低了一些,仅此而已。

Pub/Sub

订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者)。而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的。这种发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑。

Redis可以执行发布/订阅模式(publish/subscribe), 该模式可以解耦消息的发送者和接收者,使程序具有更好的扩展性.从宏观上来讲,Redis的发布/订阅模式具有如下特点:

  • 客户端执行订阅以后,除了可以继续订阅(SUBSCRIBE或者PSUBSCRIBE),取消订阅(UNSUBSCRIBE或者PUNSUBSCRIBE), PING命令和结束连接(QUIT)外, 不能执行其他操作,客户端将阻塞直到订阅通道上发布消息的到来.
  • 发布的消息在Redis系统中不存储.因此,必须先执行订阅,再等待消息发布. 但是,相反的顺序则不支持.
  • 订阅的通道名称支持glob模式匹配.如果客户端同时订阅了glob模式的通道和非glob模式的通道,并且名称存在交集,则对于一个发布的消息,该执行订阅的客户端接收到两个消息.

pub/sub API

Redis的发布/订阅设计模式相关的命令有六个:

  • SUBSCRIBE命令执行订阅.客户端可以多次执行该命令, 也可以一次订阅多个通道. 多个客户端可以订阅相同的通道.该命令的响应包括三部分, 依次是:命令名称(字符串subscribe),订阅的通道名称,总共订阅的通道数(包含glob通道).
  • PSUBSCRIBE命令执行glob模式订阅.客户端可以多次执行该命令, 也可以一次订阅多个glob通道. 多个客户端可以订阅相同的glob通道.该命令的响应包括三部分, 依次是:命令名称(字符串psubscribe),订阅的glob通道名称,总共订阅的通道数(包含非glob通道).
  • UNSUBSCRIBE命令取消订阅指定的通道.可以指定一个或者多个取消的订阅通道名称,也可以不带任何参数,此时将取消所有的订阅的通道(不包括glob通道).该命令的响应包括三部分, 依次是:命令名称(字符串unsubscribe),取消的订阅通道名称,总共订阅的通道数(包含glob通道).
  • PUNSUBSCRIBE命令取消订阅指定的glob模式通道.可以指定一个或者多个取消的glob模式的订阅通道名称,也可以不带任何参数,此时将取消所有的glob模式订阅的通道(不包括非glob通道).该命令的响应包括三部分, 依次是:命令名称(字符串punsubscribe),取消的glob模式的订阅通道名称,总共订阅的通道数(包含非glob通道).
  • PUBLISH命令在指定的通道上发布消息.只能在一个通道上发布消息,不能在多个通道上同时发布消息.该命令的响应包括通知的接收者个数,需要注意的是,这里的接收者数目大于等于订阅该通道的客户端数目(因为一个客户端的glob通道和非glob通道同时匹配发布通道的话,则视为两个接收者).而在接收端,收到的响应包括三部分,依次是 :message或者pmessage字符串(取决于是否为glob匹配),匹配的通道名称,发布的消息内容.
  • PUBSUB命令执行状态查询.支持若干子命令.需要注意的是,该命令不能在客户端进入订阅后执行.
127.0.0.1:6379> help @pubsub

  PSUBSCRIBE pattern [pattern ...]
  summary: Listen for messages published to channels matching the given patterns
  since: 2.0.0

  PUBLISH channel message
  summary: Post a message to a channel
  since: 2.0.0

  PUBSUB subcommand [argument [argument ...]]
  summary: Inspect the state of the Pub/Sub subsystem
  since: 2.8.0

  PUNSUBSCRIBE [pattern [pattern ...]]
  summary: Stop listening for messages posted to channels matching the given patterns
  since: 2.0.0

  SUBSCRIBE channel [channel ...]
  summary: Listen for messages published to the given channels
  since: 2.0.0

  UNSUBSCRIBE [channel [channel ...]]
  summary: Stop listening for messages posted to the given channels
  since: 2.0.0

实战

[root@z8524210 ~]# redis-cli 
127.0.0.1:6379> clear
127.0.0.1:6379> SUBSCRIBE channe1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channe1"
3) (integer) 1
1) "message"
2) "channe1"
3) "hello"
1) "message"						//收到消息
2) "channe1"
3) "how do you do!"			//接收到消息后依然是监听状态
127.0.0.1:6379> PUBLISH channe1 hello							//publish消息
(integer) 2
127.0.0.1:6379> PUBLISH channe1 "how do you do!"				//publish消息
(integer) 2
127.0.0.1:6379> 

应用

在这里插入图片描述

面对聊天消息,redis如何做缓存?

  1. read方面
  • 对于 实时性 的聊天记录,我们就可以使用redis提供的Pub/Sub就能够解决。
  • 对于 更老的 聊天记录,因为这些数据访问量会很低,所以一定是从数据库里面获取。
  • 对于近期三天内的记录,我们可以把聊天记录存入redis的sorted set类型,把时间抽象成分数,让其排序,并且可以使用zremrangebyscore命令删除最近三天之外的聊天记录。同时还可以使用zremrangebyrank命令删除指定条数之外的记录。(sorted set物理内存左小右大,距离当前最近的时间数值一定大于三天前时间的数值,根据索引,删除条目之外的数据)
  1. write 方面
    在这里插入图片描述
  • 准备两个Redis,第一个Redis负责Pub/Sub,第二个redis负责sorted set相关功能。
  • Client1给Pub/Sub redis发送消息时,Client2可以从Pub/Sub Redis服务器取走消息,同时sorted set Redis器从Pub/Sub Redis订阅并且存入sorted set类型,自己写的service也从Pub/Sub Redis订阅消息并交给kafka存入数据库。

总结:

  • 订阅客户端上,才能取消订阅. 一个客户端连接不能为另一个客户端连接取消订阅. 这是显而易见的.
  • 在发布/订阅模式下,通道名称是全局的,和客户端连接的Redis数据库没有关系.

缓存的数据(热数据)

在这里插入图片描述

那么redis是如何做到数据随着访问变化只保留热数据呢?

  • 业务逻辑: key是可以设置有效期的,具体key的有效期 需要根据 用户 的关注时间窗而设定的。过了这个时间窗这个数据就不应该出现在redis里,因为这个数据被访问的次数会很低,不能称之为热数据。
  • 业务运转: 内存是有限的,当redis内存满了,应该采取相应的策略剔除掉冷数据。

redis内存上限多少呢?
可以通过6379.config配置文件来设定:maxmemory 单位为byte .

redis内存满了之后又如何处理?
在6379.config配置文件来设定maxmemory-policy noeviction。

LRU 的关注点是 该元素多久没有被使用。
LFU 的关注点是 该元素被使用了多少次。

redis提供了6种回收策略

noeviction: 直接返回错误,不允许Client继续使用了。(更适合redis作为数据库,能保持数据的完整性)

allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。(常用,结合业务场景,非期限key多)

volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在有期限元素集合内,使得新添加的数据有空间存放。(常用,结合业务场景,期限key多)

allkeys-random: 回收随机的键使得新添加的数据有空间存放。(比较随意)

volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在有期限元素集合内。(比较随机)

volatile-ttl: 回收在过期集合的键,并且优先回即将过期的键,使得新添加的数据有空间存放。(复杂度高)

key的有效期

  • 设置key的过期时间,超过时间后,将会自动删除该key。在Redis的术语中一个key的相关超时是不确定的
  • 超时后只有对key执行DEL命令或者SET命令或者GETSET时才会清除。这意味着,从概念上讲所有改变key的值的操作都会使他清除。 例如,INCR递增key的值,执行LPUSH操作,或者用HSET改变hash的field所有这些操作都会触发删除动作
  • 使用PERSIST命令可以清除超时,使其变成一个永久的key
  • 如果key被RENAME命令修改,相关的超时时间会转移到新key上面
  • 如果key被RENAME命令修改,比如原来就存在Key_A,然后调用RENAME Key_B Key_A命令,这时不管原来Key_A是永久的还是设置为超时的,都会由Key_B的有效期状态覆盖
  • 对已经有过期时间的key执行EXPIRE操作,将会更新它的过期时间。有很多应用有这种业务场景,例如记录会话的session

Keys的过期时间

  • 通常Redis keys创建时没有设置相关过期时间。他们会一直存在,除非使用显示的命令移除,例如,使用DEL命令
  • EXPIRE一类命令能关联到一个有额外内存开销的key。当key执行过期操作时,Redis会确保按照规定时间删除他们
  • key的过期时间和永久有效性可以通过EXPIRE和PERSIST命令(或者其他相关命令)来进行更新或者删除过期时间

过期精度

  • 在 Redis 2.4 及以前版本,过期期时间可能不是十分准确,有0-1秒的误差
  • 从 Redis 2.6 起,过期时间误差缩小到0-1毫秒

过期和持久

  • Keys的过期时间使用Unix时间戳存储(从Redis 2.6开始以毫秒为单位)。这意味着即使Redis实例不可用,时间也是一直在流逝的
  • 要想过期的工作处理好,计算机必须采用稳定的时间。 如果你将RDB文件在两台时钟不同步的电脑间同步,有趣的事会发生(所有的 keys装载时就会过期)
  • 即使正在运行的实例也会检查计算机的时钟,例如如果你设置了一个key的有效期是1000秒,然后设置你的计算机时间为未来2000秒,这时key会立即失效,而不是等1000秒之后

如何淘汰过期的keys

Redis keys过期有两种方式:被动和主动方式

  1. 当一些客户端尝试访问它时,key会被发现并主动的过期

当然,这样是不够的,因为有些过期的keys,永远不会访问他们。 无论如何,这些keys应该过期,所以定时随机测试设置keys的过期时间。所有这些过期的keys将会从密钥空间删除

  1. Redis每秒10次做的事情:
  • 测试随机的20个keys进行相关过期检测。
  • 删除所有已经过期的keys。
  • 如果有多于25%的keys过期,重复步奏1.

这是一个平凡的概率算法,基本上的假设是,我们的样本是这个密钥控件,并且我们不断重复过期检测,直到过期的keys的百分百低于25%,这意味着,在任何给定的时刻,最多会清除1/4的过期keys

在复制AOF文件时如何处理过期

  • 为了获得正确的行为而不牺牲一致性,当一个key过期,DEL命令将会随着AOF文件一起合成到所有附加的slaves。在master实例中,这种方法是集中的,并且不存在一致性错误的机会。
  • 然而,当slaves连接到master时,不会独立过期keys(会等到master执行DEL命令),他们任然会在数据集里面存在,所以当slave当选为master时淘汰keys会独立执行,然后成为master

事务

redis的事务为什么不支持回滚?

  1. Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或是命令用在了错误类型的键上面:这也就是说,从实用性的角度来说,失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中。
  2. 因为不需要对回滚进行支持,所以 Redis 的内部可以保持简单且快速

redis概念

  • redis是单进程的,所以事物回滚存在一些与关系型数据库的差别

  • multi,exec,discard,watch(乐观锁的效果)
    mutli命令 和 exec命令:
    首先redis是单进程的,单进程就像一个管道,当我们先执行mutli命令之后,且在redis接收到exec命令之前(夹在mutli和exec中间的命令)是不会得到执行的。

  • 如果有多个Client同时发送mutli命令进入redis的单线程进行排队,在单线程串行的理论上,关注点不是在于哪个Client的mutli命令先到达,而是哪个Client的exec命令先到到达redis被处理,那么exec命令先到达的Client的命令先被执行(从一个Client的mutil命令到达开始,这个Client的命令会被存放在一个单独的缓冲区,哪个缓冲区的exec命令先到就哪个缓冲区的命令先执行)。

watch命令:

  • watch命令是一个乐观锁CAS的操作,就是在事务还没有执行的时候,通过一个watch命令 监控 将要被操作的元素,如果在这个元素在mutli开启之后没有等exec命令到达之前发生了改变,那么后续的事务会被直接撤销。 撤销之后如何处理,需要客户端自己捕获进行处理(重新提交等操作)。

MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令。事务可以一次执行多个命令, 并且带有以下两个重要的保证:

1、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2、事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

EXEC 命令负责触发并执行事务中的所有命令:

  • 如果客户端在使用 MULTI 开启了一个事务之后,却因为断线而没有成功执行 EXEC ,那么事务中的所有命令都不会被执行。
  • 另一方面,如果客户端成功在开启事务之后执行 EXEC ,那么事务中的所有命令都会被执行。

当使用 AOF 方式做持久化的时候, Redis 会使用单个 write(2) 命令将事务写入到磁盘中。

然而,如果 Redis 服务器因为某些原因被管理员杀死,或者遇上某种硬件故障,那么可能只有部分事务命令会被成功写入到磁盘中。

如果 Redis 在重新启动时发现 AOF 文件出了这样的问题,那么它会退出,并汇报一个错误。

使用redis-check-aof程序可以修复这一问题:它会移除 AOF 文件中不完整事务的信息,确保服务器可以顺利启动。

从 2.2 版本开始,Redis 还可以通过乐观锁(optimistic lock)实现 CAS (check-and-set)操作

使用事务时可能会遇上以下两种错误:

  • 事务在执行 EXEC 之前,入队的命令可能会出错。比如说,命令可能会产生语法错误(参数数量错误,参数名错误,等等),或者其他更严重的错误,比如内存不足(如果服务器使用 maxmemory 设置了最大内存限制的话)。
  • 命令可能在 EXEC 调用之后失败。举个例子,事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面,诸如此类。
Cesium雷达追踪追踪(圆锥体效果) 【代码】Cesium雷达追踪追踪(圆锥体效果) 阅读详情

相关推荐

Unity WebGL项目如何实现画布透明,完美融入网页背景(附.jslib文件与完整配置)

本文详细解析了Unity WebGL项目实现画布透明化的技术原理与实战步骤,从.jslib文件配置到前端框架集成,帮助开发者解决默认背景色问题,实现3D内容与网页设计的无缝融合。重点介绍了透明化核心机制、常见误区及React/Vue等现代框架中的最佳实践方案。

weixin_31896061的博客 298

redis的发布订阅、主从复制、以及缓存穿透和雪崩

redis的发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。微信、 微博、关注系统! Redis 客户端可以订阅任意数量的频道。 订阅/发布消息图: 第一个:消息发送者, 第二个:频道 第三个:消息订阅者! 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的 关系: ...

codinglover5的博客 553

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5135

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

啤酒理论 Buffer机制,减少没必要的来回调用 前置知识 只要和redis建立了连接,发送字符串,就能交互 管道 发布 / 订阅 help @pubsub 发送者 订阅者 PSUBSCRIBE pattern [pattern ...] summary: Listen for messages published to channels matching the given patterns since: 2.0.0 PUBLISH channel message summa

寒泉 6万+

EDSR-PyTorch实战:从模型下载到超分辨率图像生成

本文详细介绍了如何使用PyTorch实现EDSR模型进行超分辨率图像生成,包括环境配置、模型下载、参数调优及常见问题解决方案。EDSR作为超分辨率重建的利器,通过深度残差网络显著提升图像质量,特别适合老照片修复等场景。文章还提供了视频处理和自定义训练的进阶技巧,帮助开发者快速掌握这一技术。

weixin_29046035的博客 457

Dynamics CRM证书更换

  Dynamics CRM产品一般有两种认证方式。第一种是基于声明的内部访问也就是无证书单纯用账号密码验证。第二种就是联合身份认证,需要安装网站证书。   对于联合身份认证的情况因为需要安装证书,而且证书是有一个一年的有效期,所以运维人员每年都需要进行证书更换的操作。以下就是更换证书的方法及过程。 证书根据申请方式一般也分两种,第一种是自建证书,这种证书是没有机构认证的所以安装上之后网站因为没...

bzpfly的博客 877

Redis讲解系列之 Redis的消息订阅与Redis的事务

什么是Redis的消息订阅进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。特别的说一句,一般的企业中消息中间件(e.g Active queue肯定是不会用Redis的消息订阅来做的,至于Redis为什么会推出这样一个功能点,可能有潜在的意义比如会优化完善这部分的功能以使之晋升为消息中间件的一个选择,也有可能只是意思意思做这么一个功能已配合Redis的其他功能。不过通过对Redis迭代的版本上看,个人认为Redisa的消息定于只是为了配合其他Redis的功能。

2401_83384536的博客 1181

JMeter压测Dubbo接口的完整落地方案(适配3.x)

Dubbo作为主流Java微服务RPC框架,其接口压测长期面临协议私有、注册发现复杂、序列化耦合度高等技术门槛。理解Dubbo基于TCP长连接、泛化调用与SPI扩展机制的核心原理,是实现稳定压测的前提;技术价值在于绕过HTTP网关直击服务核心链路,保障大促等关键场景的性能可信度;典型应用场景包括电商订单链路压测、风控/库存等内部Dubbo服务SLA验证,以及CI/CD中性能左移实践。本文聚焦Dubbo 3.x版本,提供零第三方插件、可复用、避坑的JMeter Java Sampler落地路径。

weixin_33700809的博客 549

Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

可以一次执行多个命令,本质是一组命令的集合。一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。单独的隔离的操作官网说明这四个指令构成了 redis 事务处理的基础。1.MULTI 用来组装一个事务;将命令存放到一个队列里面2.EXEC 用来执行一个事务;//commit3.DISCARD 用来取消一个事务;//rollback4.WATCH 用来监视一些 key,一旦这些 key 在事务执行之前被改变,则取消事务的执行。

weixin_47735032的博客 2518

SAP S/4HANA BP主数据-CVI模型

SAP BP主数据介绍 ECC系统中的客户、供应商主数据的限制: •一个客户或供应商仅能有一个地址 •客户和供应商没有关联关系(同一个实体公司) •如果一家公司既是供应商也是客户需建立两个主数据(数据冗余) •属性无时间相关性 S4系统中BP优点: •一个BP可以扮演多个角色(个人,客户,供应商)且角色之间数据共享 •时间相关的属性 •统一的数据架构,无数据冗余 •CVI模型可以确保BP和客户/供应商数据同步 SAP BP主数据配置 •配置BP角色/角色类别 •配置BP角.

qq_37785505的博客 1549

基于 ESP32 与 TDS 传感器的水培营养液离子浓度自动配比系统设计与实现

本系统以 ESP32 为主控芯片,结合 TDS(总溶解固体)传感器实时监测水培营养液中的离子浓度,通过蠕动泵自动补充浓缩营养液或清水,实现营养液 EC 值的闭环自动配比。系统适用于家庭及小型农场的水培种植场景,可稳定维持营养液浓度在作物生长所需的最佳区间。

weixin_42300449的博客 74

Spring框架如何整合Redis缓存?实现消息订阅

Spring 框架是一个开源的 Java 平台,它提供了全面的基础设施支持,以便您可以更容易地开发 Java 应用程序。Spring 处理了基础设施,这样您就可以专注于您的应用程序。Spring 框架最初是由 Rod Johnson 在 2003 年创建的,从那时起,它已经成为 Java 企业级开发中最受欢迎的框架之一。Spring 框架的核心是控制反转(IoC)容器,它允许你将应用程序配置为一组可互换的组件,而不是紧密耦合的大块代码。这种灵活性使得应用程序更容易测试、维护和扩展。

编程小风筝的博客 788

21、汽车喷漆目标区域识别:机器学习与深度学习的应用

本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。

5b6n7m8的博客 101

redis(四):消息订阅,事务,RedisBloom

消息订阅 上图假如是qq客户端的消息处理模式,图中对消息进行了分析,分为两种信息,一种是实时的,一种是历史的。 首先看历史信息,用户都会有翻阅历时信息的习惯,但是一般都只查看近期的,查阅更早的信息的用户占少数,因此我们可以根据redis查询数据快的特性,通过sored sets来解决用户对于近期数据的查询,减少数据库的压力。 具体实现: 通过sorted sets的zremrangebyrank...

屑狐狸 267

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis 缓存 消息订阅 事务 雪崩 穿透

Redis Redis五种数据类型和消息订阅 String命令 String是最常用的一种数据类型,普通的key/value存储都可以归为此类 1:set/get 设置key对应的值为String类型的value 获取key对应的值 2:mget 批量获取多个key的值,如果可以不存在则返回nil 3:incr && incrby incr对key对应...

eafun_888的博客 259

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Redis】redis事务和发布订阅

示例需要注意的是,单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。(TX 是transaction的意思)如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。同时注意discard是放弃事务的意思。

margu_168的博客 1306

redis的事务、管道和发布订阅一篇文章搞懂

按照我的理解redis管道类似于批量操作,避免单个数据执行到来的频繁命令往返;同样的道理,在数据库中如果不使用批量操作而使用单个操作数据库,数据访问过于频繁也导致消耗I/O,以及数据库连接数。Redis是一种基于客户端-服务端模式以及以及请求/响应协议的TCP服务。一个请求会遵循以下步骤:1 客户端向服务器端发送分四步(发送命令->命令排队 -> 命令执行 -> 返回结果),并监听Socket返回,通常一阻塞模式等待服务端响应。2 服务端处理命令,并将结果返回客户端。

qq_39126115的博客 1158

redis学习四redis消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

此时再来一个元素三,元素三在数据库里面是没有的,但是它的映射函数刚好覆盖到元素1和元素2对应的bitmap中的位置,这时就会有一定概率造成不存在的数也落在bitmap上面判断数据成功了,就会直接去从数据库里面查。客户端,然后再通过sub命令将命令发送到redis自己的一个订阅里面(存入zset),再通过sub发送订阅消息。6、通过另一个客户端处理数据的发布订阅,让数据实时,然后再将过去3天的数据同步到redis。缓存的数据不重要,并且不是全量的数据,缓存应该随着访问变化【所以存入的是热数据】。...

lsd&xql的博客 385

redis发布订阅和事务管理

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 ,以及订阅这个频道的三个客户端 —— client1 、client2 和 client3 之间的关系:当有新消息通过PUBLISHRedis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

weixin_63970667的博客 1450

如何用Spring使用Redis作为消息订阅?

在Spring框架中,使用Redis作为消息订阅可以通过Spring Data Redis库实现。首先,需要在项目中添加Spring Data Redis和Redis客户端库(如Jedis或Lettuce)的依赖。然后,配置Redis连接信息,可以通过application.properties或application.yml文件进行配置,包括Redis服务器的地址、端口、密码等信息。

杨荧的优快云博客 1168

redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU 地址

文章目录前言一、消息订阅二、pipeline三、事务四、布隆过滤器 前言 通过redis中文文档 学习,主要记录下学习的过程。主要学习了redis的发布订阅,pipeline管道,事务,缓存lru,以及在https://redis.io/modules网站上的bloom布隆过滤器 一、消息订阅 通过redis中文文档可以进行学习,具体里面Redis 发布/订阅(Pub/Sub)的详情,大家可以点击进去查询详情。对于我来说,我直接进行试验 看下redis关于发布订阅的指令 127.0.0.1:6379&g

sinat_36759535的博客 359

Redis发布订阅及事务管理

在执行multi之前,先执行 watch key1 [key2 ....] 用于指定key的监视,如果在事务执行前这些key被其他命令锁改动,那么事务将被打断。用于取消命令对所有key的监视,如果在执行watch命令之后,Exec或DisCard命令先被执行的话,那么就不需要再次执行unwatch。4、在事务的执行过程中,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求,不会插入到事务执行的命令序列中.3、收到Exec命令后,进入事务执行,如果事务中有任意命令执行失败,其余的命令依旧会执行;

AXDRXS的博客 1585

Redis学习——事务、消息订阅和发布

一、Redis事务 Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation),持久性(Durability),简称ACID。 Redis支持简单的事务,将执行命令放入队列缓存,程序中有异常,执行discard回滚,其实只是取消队列命令的执行。但执行exec时,已...

weixin_30552635的博客 107

事务例子_Redis讲解系列之 Redis的消息订阅与Redis的事务,值得一看

消息队列概念什么是Redis的消息订阅进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。特别的说一句,一般的企业中消息中间件(e.g Active queue肯定是不会用Redis的消息订阅来做的,至于Redis为什么会推出这样一个功能点,可能有潜在的意义比如会优化完善这部分的功能以使之晋升为消息中间件的一个选择,也有可能只是意思意思做这么一个功能已配合Redis的其他...

weixin_30367805的博客 115

5.Redis - 管道,消息订阅,事务,布隆过滤器,缓存回收

Redis-Redis管道,消息订阅,事务,布隆过滤器,清理策略管道Pub/Sub应用场景以及命令演示:聊天记录架构扩展:redis的事务常用命令原理:演示:redis的事务为什么不支持回滚?布隆过滤器安装什么是缓存穿透?布隆过滤器的原理 管道 如果Client想对redis进程发送很多的命令,其实每发送一个命令都要走一次数据传输给redis执行并返回,返回之后才能线性执行第二个命令。 因此有了管道的概念,把多次数据传输压缩成一次数据传输,在redis中就是一次性发送多条命令,redis会返回多条结果。就像

xi_rurensheng的博客 532

redis 发布和订阅 持久化 事务 缓存问题

redis的发布订阅 使用数据类型lists 原理 可以有多个消费者和订阅者 订阅者:subscribe cla 命令 执行成功后 subscribe :表示成功订阅到响应 第二个元素:提供的频道 第三个参数代表订阅频道的数量 message:这是另一个客户端发出来的发布命令的结果 第二个元素:来源频道的名称 第三个参数:实际消息的内容 发布者:publish cla ‘hello world’(字符间有空格要加上引号,否则会报错) 对应发布频道的内容打不成功会返回频道有几个数据 匹配订阅:psub

weixin_48811255的博客 869
上一篇: redis再战之value数据类型实操《三》
下一篇: redis再战之布隆过滤器《五》
漂吧
博客等级 码龄8年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值