大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务

简介: 大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

Hadoop

HDFS

MapReduce

Hive

Flume

Sqoop

Zookeeper

HBase

Redis (正在更新)

章节内容

上一节我们完成了如下的内容:


bitmap 位操作类型

geo 空间类型 空间计算 Z阶曲线 Base32编码

Stream类型 消息队列

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个大数据的学习环境,供我学习。

之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。


2C4G 编号 h121

2C4G 编号 h122

2C2G 编号 h123

发布订阅

基本简介

Redis提供了订阅发布的功能,可以用于消息的传输

  • 发布者订阅者都是Redis的客户端Channel则为Redis的服务端
  • 发布者将消息发送到某个频道,订阅了这个频道的订阅者就能收到这条消息。

Subscribe

Redis客户端1:订阅频道1、订阅频道2

执行完之后,程序会阻塞住。

代码实现如下:

root@h121:/usr/redis/bin# ./redis-cli
127.0.0.1:6379> subscribe ch1 ch2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ch1"
3) (integer) 1
1) "subscribe"
2) "ch2"
3) (integer) 2

Publish

Redis客户端2:将消息发布到频道1、频道2

root@h121:/usr/redis/bin# ./redis-cli
127.0.0.1:6379> publish ch1 hello!
(integer) 1
127.0.0.1:6379> publish ch2 hellworld!
(integer) 1
127.0.0.1:6379> 

观察结果

此时查看客户端1,可以看到消息已经拿到了:

127.0.0.1:6379> subscribe ch1 ch2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ch1"
3) (integer) 1
1) "subscribe"
2) "ch2"
3) (integer) 2
1) "message"
2) "ch1"
3) "hello!"
1) "message"
2) "ch2"
3) "hellworld!"

使用场景

哨兵模式 哨兵之间通过发布与订阅的方式与Redis主服务器和从服务器进行通信。

Redisson 是一个分布式框架,分布式锁释放时,是使用发布订阅的方式。

事务相关

事务(Transaction),是指为单个逻辑工作单元执行一系列的操作。


ACID

Atomic(原子性):构成事务所有操作必须是一个逻辑单元,要么全部执行,要么全部失败。

Consistency(一致性):数据库在事务执行前后状态都必须是稳定的或者一致的

Isolation(隔离性):事务之间不会互相影响

Durability(持久性):事务执行成功后必须全部写入磁盘

Redis事务

Redis事务通过multi、exec、discard、watch四个命令来完成的

Redis的单个命令都是原子性的,所以这里需要确保事务性的对象是命令集合

Redis将命令集合序列化并确保处于同一个事务的命令集合连续且不被打断的执行

Redis不支持回滚操作

事务相关指令

multi:用于标记事务块的开始,Redis会将后续的命令逐个放入队列中,然后使用exec原子化执行这个命令队列。

exec:执行命令队列

discard:清除命令队列

watch:监视key

unwatch:清除监视key

实现代码如下:

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set s1 22
QUEUED
127.0.0.1:6379(TX)> hset set1 name wzk
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) (integer) 1
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set s2 22
QUEUED
127.0.0.1:6379(TX)> hset set2 name kangkang
QUEUED
127.0.0.1:6379(TX)> discard
OK
127.0.0.1:6379> exec
(error) ERR EXEC without MULTI
127.0.0.1:6379> 

Redis 弱事务

Redis语法错误时,会导致整个任务的命令在队列里都清除

127.0.0.1:6379(TX)> set ss 111
QUEUED
127.0.0.1:6379(TX)> seta cuowu
(error) ERR unknown command `seta`, with args beginning with: `cuowu`, 
127.0.0.1:6379(TX)> set m2 222
QUEUED
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> 

Redis事务 为什么不能回滚

  • 大多数事务的失败都是语法错误或者类型错误,在开发阶段就可以预料的
  • 为了性能方面就忽略了事务 回滚需要历史版本记录
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
10月前
|
监控 NoSQL 关系型数据库
Redis:事务(Transactions)
Redis事务支持将多个命令打包执行,但与MySQL不同,它不保证原子性、一致性、持久性和隔离性。Redis事务的核心在于“打包”命令,避免其他客户端插队,通过MULTI、EXEC、DISCARD等命令实现。此外,Redis提供WATCH和UNWATCH机制,用于监控键变化,实现类似“乐观锁”的功能,提升并发操作的安全性。
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
1205 5
|
10月前
|
存储 运维 NoSQL
Redis集群模式
Redis集群是一种分布式存储方案,旨在解决数据存储容量不足的问题。它通过将数据分片存储在多个节点上,实现数据的横向扩展。常见的分片算法包括哈希求余、一致性哈希和哈希槽分区。其中,Redis采用哈希槽分区算法,将数据均匀分配到16384个槽位中,每个分片负责一部分槽位。当节点故障时,集群通过故障检测和主从切换机制,确保服务的高可用性。集群还支持自动的数据迁移和负载均衡,保障系统稳定运行。
|
12月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
NoSQL Redis 数据库
Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
通过本文的介绍,我们详细讲解了 Lua 脚本在 Redis 中的作用、`eval` 命令的使用方法以及 `redis.call` 和 `redis.pcall` 的区别和用法。通过合理使用 Lua 脚本,可以实现复杂的业务逻辑,确保操作的原子性,并减少网络开销,从而提高系统的性能和可靠性。
1206 13
|
SQL 存储 算法
基于对象 - 事件模式的数据计算问题
基于对象-事件模式的数据计算是商业中最常见的数据分析任务之一。对象如用户、账号、商品等,通过唯一ID记录其相关事件,如操作日志、交易记录等。这种模式下的统计任务包括无序计算(如交易次数、通话时长)和有序计算(如漏斗分析、连续交易检测)。尽管SQL在处理无序计算时表现尚可,但在有序计算中却显得力不从心,主要原因是其对跨行记录运算的支持较弱,且大表JOIN和大结果集GROUP BY的性能较差。相比之下,SPL语言通过强化离散性和有序集合的支持,能够高效地处理这类计算任务,避免了大表JOIN和复杂的GROUP BY操作,从而显著提升了计算效率。
|
SQL 存储 算法
基于对象 - 事件模式的数据计算问题
基于对象-事件模式的数据计算是商业中最常见的数据分析任务之一。这种模式涉及对象(如用户、账户、商品等)及其相关的事件记录,通过这些事件数据可以进行各种统计分析,如漏斗分析、交易次数统计等。然而,SQL 在处理这类任务时表现不佳,特别是在有序计算方面。SPL 作为一种强化离散性和有序集合的语言,能够高效地处理这类计算,避免了大表 JOIN 和大结果集 GROUP BY 的性能瓶颈。通过按 ID 排序和分步计算,SPL 能够显著提高计算效率,并支持实时数据处理。
|
NoSQL Redis
Redis事务长什么样?一文带你全面了解
Redis事务是一组命令的有序队列,通过MULTI、EXEC、WATCH和DISCARD等命令实现原子性操作。事务中的命令在EXEC执行前不会实际运行,而是先进入队列,确保所有命令要么全部成功,要么全部失败。此外,Redis还支持Lua脚本实现类似事务的操作,通常更简单高效。事务适用于购物车结算、秒杀活动、排行榜更新等需要保证数据一致性的场景。
236 0
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis消息的生产者消费者模式
消息队列在Redis中可通过List数据结构实现,支持发布者订阅者和生产者消费者两种模式。生产者通过`lpush`向List添加消息,消费者通过`rpop`或`brpop`消费消息,后者支持阻塞等待。示例代码展示了如何使用Redis的生产者消费者模式。
575 0
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis的消息发布与订阅
本文介绍了Redis实现消息队列的两种场景:发布者订阅者模式和生产者消费者模式。其中,发布者订阅者模式通过channel频道进行解耦,订阅者监听特定channel的消息,当发布者向该channel发送消息时,所有订阅者都能接收到消息。文章还提供了相关操作命令及示例代码,展示了如何使用Redis实现消息的发布与订阅。
539 0