一.Redis事务 Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation),持久性(Durability),简称ACID. Redis支持简单的事务,将执行命令放入队列缓存,程序中有异常,执行discard回滚,其实只是取消队列命令的执行.但执行exec时,已经执行的命令,是无法回滚的. 但是Redis 的应用场景明显不是为了数据存储的高可靠而设计的,而是为了数据访问的高…
redis实现简单的消息发布/订阅模式. 消息订阅者: package org.common.component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.Message; import org.spr…
基础介绍 Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能 基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件:发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者. 消息发布者,即publish客户端,无需独占链接,你可以在publish消息的同时,使用同一个redis-client链接进行其他操作(…
基础配置参考https://blog.csdn.net/llll234/article/details/80966952 查看了基础配置那么会遇到一下几个问题: 1.实际应用中可能会订阅多个通道,而一下这种写法不太通用container.addMessageListener(listenerAdapter(new RedisPmpSub()),new PatternTopic("pmp")); 2.使用过程中使用new RedisPmpSub()配置消息接收对象会有问题.如果Redis…
一.场景介绍 最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知.经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用成本也比较低. 二.什么是redis pub/sub 资料查看 大家在看我的blog的同时可以打开redis官方对于redis pub/sub的介绍,感觉看英文文档吃力的话 :cry: ,可以看redis中文网的翻译介绍. Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能…
ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ 推拉模式 Push-Pull NetMQ 发布订阅模式 Publisher-Subscriber 1:简单介绍 PUB-SUB模式一般处理的都不是系统的关键数据.发布者不关注订阅者是否收到发布的消息,订阅者也不知道自己是否收到了发布者发出的所有消息.你也不知道订阅者何时开始收到消息.类似于广播,收音…
RabbitMQ RabbitMQ Publish\Subscribe(消息发布\订阅) 1对1的消息发送和接收,即消息只能发送到指定的queue里,但这样使用有些局限性,有些时候你想让你的消息被所有的Queue收到,类似广播的效果,这时候就要用到exchange了 Exchange在定义的时候是有类型的,以决定到底是哪些Queue符合条件,可以接收消息: fanout:所有bind到此exchange的queue都可以接收消息 direct:通过routingKey和exchange决定的那个…
reids事务 概念 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 作用 一个队列中,一次性.顺序性.排他性的执行一系列命令 常用命令 正常操作事务: 放弃事务: 其实redis对于事务是部分支持: 例如incr k1虽然是错误的(类似于java的运行时异常),但是其他几个结果依然可以成功操作. watch监控 悲观锁/乐观锁/CAS(Check And Set) 1.悲观锁 悲观锁(Pessimistic Lock…
redis支持pub/sub功能(可以用于消息服务器),这个功能类似mq,这里做一个简单的介绍 Pub/Sub Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅, 当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息.这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能. 客户端1:subscribe rain 客户端2:PUBLISH rain "hello…
需求场景:分布式项目中,每个子项目有各自的 user 数据库, 在综合管理系统中存放这所有用户信息, 为了保持综合管理系统用户的完整性, 子系统添加用户后将用户信息以json格式保存至redis,然后发布到消息到消息通道,综合管理系统监控到子系统发布的消息前往redis 获取出用户信息保存到自己的数据库 1)redis配置 spring: redis: #数据库索引 database: 5 host: 127.0.0.1 port: password: 123456 jedis: pool: #…
在moquette-mqtt中提供了回调callback模式的发布和订阅但是在订阅之后没有发现有消息接收的方法,参看moquette-mqtt中Block,Future式的发布订阅基础是callback式订阅发布,但是本人在研究源代码测试,发现 callback方式接收没有成功.所以本文中只是callback式的发布和订阅没有消息接收的过程,尚未查到原因. 采用Callback式 发布主题 package com.etrip.mqtt.callback; import java.net.URIS…
工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有邮箱.手机号,那么在注册完后会向邮箱和手机号都发送注册完成信息.利用MQ实现业务异步处理,如果是用工作队列的话,就会声明一个注册信息队列.注册完成之后生产者会向队列提交一条注册数据,消费者取出数据同时向邮箱以及手机号发送两条消息.但是实际上邮箱和手机号信息发送实际上是不同的业务逻辑,不应该放在一块处…
redis算是缓存界的老大哥了,最近做的事情对redis依赖较多,使用了里面的发布订阅功能,事务功能以及SortedSet等数据结构,后面准备好好学习总结一下redis的一些知识点. 原文地址:http://www.jianshu.com/p/8209554b36ce 先看下redis发布订阅的结构: 其中发布者跟订阅者之间通过channel进行交互,channel分为两种模式. 一.redis发布订阅命令简介 redis中为发布订阅(pub/sub)功能提供了六个命令,分为两种模式. 由sub…
一.排序 redis 支持对 list,set 和 zset 元素的排序,排序的时间复杂度是 O(N+M*log(M)).(N 是集合大小,M 为返回元素的数量) sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination] [BY pattern]:sort 命令默认使用集合元素进行排序,可以通过 "BY pattern"…
简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.从2013年5月开始,Redis的开发由Pivotal赞助.redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希…
1.发布-订阅模式又叫观察者模式,它定义对象之间一种一对多的依赖关系. 2.如何实现发布-订阅模式 2-1.首先指定好发布者 2-2.给发布者添加一个缓冲列表,用户存放回调函数以便通知订阅者 2-3.最后发布消息时候,发布者会遍历这个缓存列表,依次触发里面存放的订阅者回调函数 例子: var salesOffice = {};salesOffice.clientList = [];salesOffice.listen = function(key,fn){    if(!this.clientL…
应用之间的通信遵循发布订阅模式,其中通过共享主题广播数据.这可以在下图中看到,它显示了一组交互式的Spring Cloud Stream应用程序的典型部署. 图6. Spring Cloud Stream Publish-Subscribe 传感器向HTTP端点报告的数据将发送到名为raw-sensor-data的公共目标.从目的地,它由微服务应用程序独立处理,该应用程序计算时间窗口平均值,以及另一个将原始数据导入HDFS的微服务应用程序.为了处理数据,两个应用程序在运行时将主题声明为它们的输入…
MQTT moquette 的Server发布主题 package com.etrip.mqtt.future; import java.net.URISyntaxException; import org.fusesource.mqtt.client.FutureConnection; import org.fusesource.mqtt.client.MQTT; import org.fusesource.mqtt.client.QoS; import org.fusesource.mqtt…
申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常. 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用…
1.或者源码安装包 #wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2.解压源码包 #tar -zxf redis-4.0.6.tar.gz 3.编译 #cd redis-4.0.6 #make #make test 4.运行 # cd scr     说明:命令都在src内 #./redis-server --port 7878    说明:自定义7878端口启动,默认6379 成功界面: 5.发布与订阅 发布消息: pub…
当连接向一个mqtt服务器时,clientId必须是唯一的.设置一样,导致client.setCallback总是走到 connectionLost回调.报connection reset.调查一天才发现是clientid重复导致. client = new MqttAsyncClient(serverURIString, "client-id"); clientId是用来保存会话信息. MqttConnectOptions options = new MqttConnectOptio…
SIP消息由三部分组成,即:开始行(start line).消息头(header).正文(body)Start-line:请求行Request-line  消息为 request消息时使用request-line  Request-Line = Method SP Request-URI SP SIP-Version CRLF状态行Status-line  消息为响应消息时使用Status-line  Status-Line = SIP-Version SP Status-Code SP Rea…
一.概述: 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石.相信对有关系型数据库开发经验的开发者而言这一概念并不陌生,即便如此,我们还是会简要的列出Redis中事务的实现特征:      1). 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行.      2). 和关系型数据库中…
Dashboard介绍 capOptions.UseDashboard(dashoptions => { dashoptions.AppPath = "applicationpath"; dashoptions.PathMatch = "/cap"; dashoptions.Authorization = new[] { new CapDashboardFilter() }; }); 这里只说这几个参数 AppPath:应用程序路径 访问dashboard的时…
一.Redis的五大数据类型 1.String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 .string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M 2.Hash(哈希,类似java里的Map) Redis hash 是一个键值对集合.Redis hash是一个s…
如何保障reids的数据安全和性能?   一.持久化选项 1.快照snapshotting 它可以将存在于某一时刻的所有数据都写入硬盘里面. 配置选项示例: save 60 1000 注:从最近一次创建快照之后开始算起,60秒之内有1000次写入满足条件之后,redis开始快照保存. 2.追加文件(append-only-file) AOF 在执行命令时,将被执行的命令复制到硬盘里面. 配置选项示例:appendonly no 两种配置都要配置文件输出位置: 示例:dir /data/redis…
什么是队列:简单的说就是数据存储到一个空间里(可以是内存,也可以是物理文件),先存储的数据对象,先被取出来,这与堆栈正好相反,消息队列也是这样,将可能出现高并发的数据进行队列存储,并按着入队的顺序依次处理,实现消息队列的工具有很多,如微软的MSMQ,及一些开源的KV存储工具,今天主要介绍用Redis实现消息队列. 这是我的redis项目结构 redis服务有一个console的程序,可以支持在windows和linux下运行. 我用MVC应用程序来作这个例子,由表单向内存中写信息,然后每5秒中从…
<?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 实现乐观锁机制 * * @example php optimistic-lock.php */ $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); // 监视 count 值 $redis->watch('count'); // 开启事务 $redis->multi(); /…
一.事务控制 1.简单事务控制 redis可以使用mult命令将之后的命令都存放在队列中,只有使用exec命令时才全部执行. 127.0.0.1:6379> multi OK 127.0.0.1:6379> set age 10 QUEUED 127.0.0.1:6379> set age 20 QUEUED 127.0.0.1:6379> exec 1) OK 2) OK 127.0.0.1:6379> get age " 如果我们打过几条命令发现有错,可以使用d…
Redis事务是什么 1.可以一次执行多个命令,本质是一组命令的集合. 2.一个事务中的所有命令都会被序列化,按顺序串行化执行而不会被其他命令插入,不许加塞. 意味着redis在事务执行的过程中,不允许另一个客户端发出请求,保证了隔离性. 3.在一个redis事务中,不能保证原子性,下面案例会说明. Redis事务可以做什么 一个队列中,一次性,按顺序,排他的执行一组命令 Redis事务命令 怎么使用 1.multi,exec简单的使用 multi : 开启事务 每次输入命令不会马上执行,而是返…