Redis 4.x系列(十):Redis Pub/Sub(发布/订阅)

  Publish/Subscribe(Pub/Sub-发布/订阅)是两种异步消息通信模式中的一种(另一种是 queue 点对点模式)。在发布-订阅模式中,发布者把消息发送到一个频道(channel),订阅此频道的消息接收者就可收到消息。

  发布-订阅是一对多的通信模式,发布的消息可以被多个订阅者接收,消息发布者不需要知道有那些订阅者,订阅者也不需要知道发布者,订阅者只接收(订阅)自己感兴趣的频道, 类似于调频广播。

  应用场景:群发消息、通知多系统更新缓存(数据)、推送关注频道(主题)消息等。未在生产中使用过,可靠性、稳定性未知。

  个人认为 Redis 中的这个功能是个鸡肋,还没看到在生产中使用,消息中间件发布-订阅功能更强大可靠。

阅读更多

Spring Boot 2系列(三十三):JMS 和 AMQP 消息服务及支持的消息组件

  消息组件在现在的互联网应用系统已广泛使用,特别是在大型的、分布式或微服务架构中,要协调系统之间的通信,消息组件几乎是不可或缺的。

  使用消息中间件可实现系统之间的异步通信、可对服务之间的调用进行解耦、可对并发请求实现流量消峰、可用于消息通讯

  Spring Framework 为与消息组件的集成提供了广泛的支持, 从简化使用JMS APIJmsTemplate到完整的异步接收消息的基础架构。 Spring AMQP还为高级消息队列协议提供了类似的功能集。

  Spring Boot 默认就为 ActiveMQ、 RabbitMQ、 Kafka、 Artemis 提供自动配置支持。Spring AMQP 官方文档Spring Boot Message 文档

阅读更多

Redis 4.x系列(九):Redis Transaction(事务)

  Redis 中的事务与传统数据库的事务存在较大的差异,所以理解 Redis 事务,必须跳出传统数据库事务的概念,这是由两者对事务的实现方式不同决定的。

  Redis 官方文档对 Redis 事务在处理所有命令的描述是:要么处理所有命令,要么都不处理,因此 Redis 事务也是原子的。 Redis Transactions 官方文档注:Redis 事务确保原子性的时机不同于传统数据库的事务处理,详见下文。

阅读更多

Utils-异常信息格式化工具类

  项目中的代码捕获到的异常(Exception)信息应该通过日志管理(Log4j)写入到日志文件,是非常不建议直接打印出栈信息的(e.printStackTrace());而通过 Exception 的方法直接获取到的异常信息并不全面,或直接对异常信息进行 JSON 格式化,但记录到日志信息是长长的一行,非常不利于阅读和跟踪问题。

  我们可以调用 getStackTrace()方法,返回的是栈跟踪信息数组,通过对数组遍历格式化拼接,可以让记录到日志文件的异常信息的格式达到 **printStackTrace()**方法的效果,这就是下面的工具类的目的,代码非常的简单。

阅读更多

Redis 4.x系列(七):Redis 数据特性之位图、过期、排序

  Bitmap:Redis 中的位图并不是一种新的数据类型,它的底层数据类型是字符串。字符串的本质是二进制大对象(BLOB:Binary Large Object),所以可以视作位图。

  Expire:可以通过设置的过期时间,让 Redis 自动地删除键。

  Sort:可以对列表以某种非权重顺序对有序集合的元素进行排序。

阅读更多

Redis 4.x系列(六):Redis Key(键)管理

  Redis Keys 是二进制安全的,可以使用任何二进制序列作为键,例如”foo“字符串到 JPEG文件内容字符串也是有效键。

  Key 的定义应长度适当,易读易理解;超长字节的键会大大降低性能,若确实有大值存在,可以使用它的 HASH 值。

  Redis Keys 是字符串类型,允许最大是 512 MB。

阅读更多

Redis 4.x系列(五):Redis 数据类型之Hash、HyperLogLog、Geo

  Hash:表示字符串字段和字符串值之间的映射关系,因此 Hash 对于存储对象是一种完美的数据类型。

  HyperLogLog:在需要唯一计数的数据处理场景中使用,用于统计元数的个数,而不需获取数据的内容,性能高消耗内存低。

  Geo:用于存储和查询与地理位置相关的位标(GPS经纬度),提供的 API 非常方便地计算位标距离和获取距离范围内的成员。

阅读更多