redis事务以及发布订阅

1. 什么是redis的事务?

???????? redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体,就是一个队列。当执行的时候,一次性按照添加顺序依次执行,中间不会被打断或者干扰。

2. 能干嘛?

???????? 一个队列中,一次性,顺序性,排他性的执行一系列命令

3. redis事务基本操作
开启事务:multi     设置事务的开始位置,这个指令开启后,后面所有的指令都会加入事务中
执行事务: exec     设置事务的结束位置,同时执行事务,与multi成对出现,成对使用
取消事务:discard  终止当前事务,取消multi后,exec前的所有指令
注意:加入事务的命令并没有立马执行,而且加入队列中,exec命令后才执行
4. 加入和执行事务有错误会怎么办?

加入事务语法报错,事务则取消
执行事务报错,则成功的返回成功,失败的返回失败,不影响报错后面的指令

注意:已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己实现
5. 监控key
watch: 对key进行监控,如果在exec执行前,监控的key发生了变化,终止事务执行
unwatch: 取消对所有的key进行监控
6. redis发布订阅
publish: 发布消息   语法:publish channel名称   “消息内存”
subscribe: 订阅消息  语法:subscribe channel名称
pubscribe : 使用通配符订阅消息 语法: pubscribe channel*名称
punsubscribe: 使用通配符退订消息。语法:punsubscribe channel*名称
unsubscribe : 退订消息 语法:unsubscribe  channel名称
7. 删除策略 (redis使用:惰性删除+定期删除)

定时删除-->以CPU内存换redis内存
惰性删除-->以redis内存换CPU内存
定期删除
1.redis在启动的时候读取配置文件hz的值,默认为10
2.每秒执行hz次serverCron()-->databasesCron()--->actveEXpireCyle()
3.actveEXpireCyle()对每个expires[*]进行逐一检测,每次执行250ms/hz
4.对某个expires[*]检测时,随机挑选N个key检查
???????? 如果key超时,删除key
???????? 如果一轮中删除的key的数量>N*25%,循环该过程
???????? 如果一轮中删除的key的数量小于等于N25%,检查下一个expires[ ]
???????? current_db用于记录actveEXpireCyle()进入哪个expires[ * ] 执行,如果时间到了,那么下次根据current_db继续执行

原文地址:https://www.cnblogs.com/liulong99/p/12208674.html

时间: 2024-11-05 15:17:54

redis事务以及发布订阅的相关文章

redis pub/sub 发布订阅

Redis的列表数据结构有blpop和brpop命令,能从列表里返回且删除第一个(或最后一个)元素,或者被堵塞,直到有一个元素可供操作.这可以用来实现一个简单的队列. (译注:对于blpop和brpop命令,如果列表里没有关键字可供操作,连接将被堵塞,直到有另外的Redis客户端使用lpush或rpush命令推入关键字为止.) 此外,Redis对于消息发布和频道订阅有着一流的支持.你可以打开第二个redis-cli窗口,去尝试一下这些功能.在第一个窗口里订阅一个频道(我们会称它为warnings

redis中的发布订阅(Pub/Sub)

这里使用nodejs的redis模块说明,具体可见https://www.npmjs.com/package/redis,先来通过一个简单的例子了解下redis中的Pub/Sub具体怎么实现吧.. var express = require('express'); var router = express.Router(); var redis = require("redis"); /* GET home page. */ router.get('/', function(req,

详谈:Redis事务和消息订阅

一.Redis事务 1.概念 可以一次执行多个命令,本质是一组命令的集合.一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 事务能做的事: 一个队列中,一次性.顺序性.排他性的执行一系列命令 常用命令: DISCARD: 取消事务,放弃执行事务块内的所有命令: EXEC : 执行所有事务块内的命令: MULTI : 标记一个事务块的开始: WATCH key([key ....]) : 监视一个(或多个) key,如果在事务执行之前这个(或这些)key被其他命

Redis七(发布订阅)

发布与订阅(pub/sub) 介绍 Redis 通过 PUBLISH . SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式 订阅者可以订阅一个或多个频道,发布者向一个频道发送消息后,所有订阅这个频道的订阅者都将收到消息,而发布者也将收到一个数值,这个数值是收到消息的订阅者的数量.订阅者只能收到自它开始订阅后发布者所发布的消息,而之前发布的消息是收不到的. 运行原理: Redis 的 SUBSCRIBE 命令可以让客户端订阅任意

redis事务和消息订阅与发布

开始事务:multi开启 exec结束 mutil后面的语句有两种情况 1.语法错误,exec的时候报错,所有的不能执行 2,语法本身没有错,但适用的对象有问题,会执行正确的语句,跳过不适的语句 3.discard 取消事务(在队列里面的都不执行) 4,watch key1 key2 key3 监控key,如果发生变化就不执行事务,控制数据的统一性 5,unwatch 取消监视 消息订阅与发布 publish key value  发布消息 subscribe key  订阅频道(只要订阅了频道

【Redis】jedis客户端实现redis消息的发布订阅(实时消息中间件)

发布 package com.chiwei.redis; import java.io.BufferedReader; import java.io.InputStreamReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; public class RedisPublisher { private static final Logger log = L

redis 的消息发布订阅

redis支持pub/sub功能(可以用于消息服务器),这个功能类似mq,这里做一个简单的介绍 Pub/Sub Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅, 当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息.这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能. 客户端1:subscribe rain 客户端2:PUBLISH rain "hello

Redis发布订阅机制

原文:Redis发布订阅机制 1. 什么是Redis Redis是一个开源的内存数据库,它以键值对的形式存储数据.由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也提供了持久化存储机制,将数据以某种形式保存在文件中,每次重启时,可以自动从文件加载数据到内存当中.  Redis的架构包括两个部分:Redis Client和Redis Server.Redis客户端负责向服务器端发送请求并接受来自服务器端的响应.服务器端负责处理客户端

C# Redis系列(三)-Redis发布订阅及客户端编程

发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方. 发送方:只负责向第三方发送消息.(杂志社把读者杂志交给邮局) 接收方:被动接收消息.(1:向邮局订阅读者杂志,2:门口去接邮过来的杂志) 第三方作用是:存储订阅杂志的接收方,并在杂志过来时送给接收方. (邮局) C#示例,发送方把杂志放到邮局里面: if (QA.AddBug()) E