首页 > 数据库 >redis-3,redis事务和管道和发布订阅

redis-3,redis事务和管道和发布订阅

时间:2023-04-11 16:55:47浏览次数:44  
标签:订阅 multi set 事务 redis k1 命令 管道

redis事务

保证数据的一致性,具有原子性的命令

set k1 v1
get k1

在一个队列里有一次性的,排他性的执行一系列操作

multi
cmd1
cmd2
exec

redis数据库事务

  1. redis的事务仅仅是保证事务的操作会被连续单独的执行,redis命令的执行是单线程架构,在执行完事务内所有的命令前是不会执行客户端的其他请求
  2. 没有隔离级别的概念,不存在事务内的查询能看到事务里的更新,事务外的查询看不到的现象
  3. redis不能保证原子性,不能保证同时成功或者同时失败。
  4. 排他性,在事务执行的过程中,其他命令不会插入

事务的使用

case1. 正常执行

multi
exec

multi
set k1 v1
set k2 v2
incr count
exec

case2. 放弃事务

multi
discard

multi
set k1 v11
set k2 v22
discard
放弃执行事务

case3. 全体连坐

一条命令出错全部退回

multi
set k1 v22
set k2 v22
set k3	这条出错

一条出错全部出错

case4. 冤头债主

multi
set k1 v111
set k2 v222
incr count
incr eamil	这个email是字符串,不能用incr,所以出错

最终运行结果,只有出错的没有执行,其他的都执行成功

case5. watch监控

悲观锁,每次拿数据都认为别人会修改,所以每次操作数据都加锁
watch是一种检查并设置值的行为
没有改变监控值的

watch sount
multi
set k1 v11
incr count
exec

改变监控值的

watch balence
multi
set k1 abc3
get k1
set balence 150		这个时候另一个修改了balence
exec
exec的时候返回nil

unwatch命令

unwatch放弃监控

redis管道

如何优化频繁命令往返造成的性能瓶颈
redis是一种基于客户端服务器模型,一级请求响应协议的tcp服务
redis发送命令分为四步
发送命令
命令排队
执行命令
返回结果
并监听socket返回,通常以阻塞的方式监听
往返时间简称rtt
多条命令分散的传入的时候,会使redis多次从用户态转换到内核态,每次转换的状态转换引起的上下文转变会造成巨大的开销,使用管道一次性的执行一些命令,会降低用户态和内核态状态的转换

省时原理

客户端一次性的发送多条命令,服务端一次性处理多条命令,一次性返回命令执行结果
降低往返延时时间,上下文切换时间

用法

新建一个txt脚本,使用redis管道命令执行脚本
不会阻塞,没有原子性,如果一个命令发生异常,会继续执行

cat cmd.txt
set k100 v100
set k200 v200
hset k300 age 20

执行脚本
cat cmd.txt | redis-cli -a 111111 --pipe

返回服务器的响应

发布和订阅

了解即可

标签:订阅,multi,set,事务,redis,k1,命令,管道
From: https://www.cnblogs.com/niko5960/p/17306783.html

相关文章

  • C# Kafka重置到最新的偏移量,即从指定的Partition订阅消息使用Assign方法
    在使用Kafka的过程中,消费者断掉之后,再次开始消费时,消费者会从断掉时的位置重新开始消费。场景再现:比如昨天消费者晚上断掉了,今天上午我们会发现kafka消费的数据不是最新的,而是昨天晚上的数据,由于数据量比较多,也不会及时的消费到今天上午的数据,这个时候就需要我们对偏移量进行重置......
  • csredis操作redis
    c#使用csredis操作redis 现在流行的redis连接客户端有StackExchange.Redis和ServiceStack.Redis,为什么选择csredis而不是这两个?.net最有名望的ServiceStack.Redis早已沦为商业用途,在.NETCore中使用只能充值;后来居上的StackExchange.Redis虽然能用,但线上各种Timeou......
  • 深度剖析Redis九种数据结构实现原理,建议收藏
    1.Redis介绍Redis是一个高性能的键值存储系统,支持多种数据结构。包含五种基本类型String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图)。每种数据结构都是为了解决特定问题而设计的,适用不同的场景。想要......
  • Redis的删除,过期,击穿,穿透,雪崩
     Redis里面的RedisTemplate.delete()方法的原理是:1.RedisConnection 创建redis的连接2.会去执行命令createCommand(type,param)3.程序启动的时候,会自动执行命令,redis1服务器会删除内容。Redis的删除策略:1.定时删除:存入的Key的时候设置了过期时间,到时间了就会删除,这里的好处......
  • “西氢东送”,我国首个纯氢长输管道项目正式启动
    今天,我国首个纯氢长输管道项目正式启动,这是全国最长距离的输氢管道。4月10日,中国石化宣布,“西氢东送”输氢管道示范工程已被纳入《石油天然气“全国一张网”建设实施方案》,标志着我国氢气长距离输送管道进入新发展阶段。“西氢东送”起于内蒙古自治区乌兰察布市,终点位于北京市的......
  • 数据库:Redis哨兵及cluster集群部署
    1、什么是哨兵模式哨兵模式:可以自动切换解决单点故障,但是不能负载均衡,存储能力受限制。哨兵核心功能:在主从复制的基础上,实现了主节点的自动故障转移2、哨兵的作用监控:监控主节点和从节点是否在正常运行故障自动转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效......
  • 数据库:Redis数据库高可用
    一、Redis数据库持久化1、redis高可用类型高可用定义:范围宽泛,除保证提供正常服务,还要考虑数据容量的扩展,数据安全不安全是否会丢失等。①持久化:最简单的高可用方法,主要是数据备份即将reids的内容存储到硬盘中保证数据不会因为进程退出丢失。2、redis实现持久化方式及优缺点①RDB......
  • redis Cluster集群环境搭建
    文档课题:redisCluster集群环境搭建.操作系统:rhel7.964位数据库:redis6.2.6环境说明:第1台机器:主机名leo-redis626-a192.168.133.1008001端口8002端口第2台机器:主机名leo-redis626-b192.168.133.1018001端口8002端口第3台机器:主机名leo-redis626-c192.168.133.10280......
  • 执行redis-cli命令创建redis集群时报错“Could not connect to Redis at IP:端口: No
    问题描述:执行redis-cli命令创建redis集群时报错“CouldnotconnecttoRedisatIP:端口:Noroutetohost”,如下所示:数据库:redis6.2.6系统:rhel7.91、异常重现[root@leo-redis626-asrc]#/usr/local/src/redis-6.2.6/src/redis-cli--clustercreate--cluster-replicas1......
  • Redis集群添加master到当前集群,并重新分槽
    文档课题:Redis集群添加master到当前集群,并重新分槽.操作系统:rhel7.964位数据库:redis6.2.6环境说明:第1台机器:主机名leo-redis626-a192.168.133.1008001端口8002端口第2台机器:主机名leo-redis626-b192.168.133.1018001端口8002端口第3台机器:主机名leo-redis626-c192.......