昆明网站建设优化企业,企业网站设计哪个好,wordpress英文写作插件,人力资源外包收费标准一.redis的发布订阅
什么 是发布和订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式#xff1a;发送者 (pub) 发送消息#xff0c;订阅者 (sub) 接收消息。
Redis 客户端可以订阅任意数量的频道。
Redis的发布和订阅
客户端订阅频道发布的消息 频道发布消息 订阅者就可…一.redis的发布订阅
什么 是发布和订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式发送者 (pub) 发送消息订阅者 (sub) 接收消息。
Redis 客户端可以订阅任意数量的频道。
Redis的发布和订阅
客户端订阅频道发布的消息 频道发布消息 订阅者就可以收到消息 发布订阅的代码实现
1、 打开一个客户端订阅channel1
SUBSCRIBE channel1 2、打开另一个客户端给channel1发布消息hi 返回的1是订阅者数量
3、打开第一个客户端可以看到发送的消息 二.Redis事务
1.事务简介
可以一次执行多个命令本质是一组命令的集合。一个事务中的 所有命令都会序列化按顺序地串行化执行而不会被其它命令插入不许加塞。
单独的隔离的操作
官网说明
https://redis.io/docs/interact/transactions/
MULTI、EXEC、DISCARD、WATCH。这四个指令构成了 redis 事务处理的基础。 1.MULTI 用来组装一个事务将命令存放到一个队列里面
2.EXEC 用来执行一个事务//commit
3.DISCARD 用来取消一个事务//rollback
4.WATCH 用来监视一些 key一旦这些 key 在事务执行之前被改变则取消事务的执行。
例子 有关事务经常会遇到的是两类错误
1.调用 EXEC 之前的错误
“调用 EXEC 之前的错误”有可能是由于语法有误导致的也可能时由于内存不足导致的。只要出现某个命令无法成功写入缓冲队列的情况redis 都会进行记录在客户端调用 EXEC 时redis 会拒绝执行这一事务 2.调用 EXEC 之后的错误 而对于“调用 EXEC 之后的错误”redis 则采取了完全不同的策略即 redis 不会理睬这些错误而是继续向下执行事务中的其他命令。这是因为对于应用层面的错误并不是 redis 自身需要考虑和处理的问题所以一个事务中如果某一条命令执行失败并不会影响接下来的其他命令的执行例子。
2.redis事务冲突
双十一去购物的时候使用同一张银行卡去付款
10000
一个请求想给金额减8000
一个请求想给金额减5000
一个请求想给金额减1000 解决方案
悲观锁
select * from biao where 11 for update 悲观锁(Pessimistic Lock), 顾名思义就是很悲观
每次去拿数据的时候都认为别人会修改所以每次在拿数据的时候都会上锁
这样别人想拿这个数据就会block直到它拿到锁。
传统的关系型数据库里边就用到了很多这种锁机制
比如行锁表锁等读锁写锁等都是在做操作之前先上锁。
12306抢票
乐观锁
version 1
查余额 10000 version1
100008000 -8000 update uuuu set moner-8000 where version1 1.1
10000 -5000 UPDATE uuuuu SET MONTY-5000 WHERE VERSION1
2000 20001000 UPDATE uuuu SET MONTY-1000 WHERE VERSION1.1 1.2 version
select * from ttt where uid 1
version money
1 10000
乐观锁(Optimistic Lock), 顾名思义就是很乐观
每次去拿数据的时候都认为别人不会修改所以不会上锁
但是在更新的时候会判断一下在此期间别人有没有去更新这个数据
可以使用版本号等机制。乐观锁适用于多读的应用类型
这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。
3.WATCH
“WATCH”可以帮我们实现类似于“乐观锁”的效果即 CAScheck and set。
WATCH 本身的作用是“监视 key 是否被改动过”而且支持同时监视多个 key只要还没真正触发事务WATCH 都会尽职尽责的监视一旦发现某个 key 被修改了在执行 EXEC 时就会返回 nil表示事务无法触发。
代码如下: 事物回滚? 三.Redis的使用
java操作redis
1.创建java项目 2.添加redis的依赖
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.2.0/version
/dependency
3.相关API
key的api string-api hash-api set-api zset-api list-api 2.redis整合springboot
1.创建springboot项目
过程略
2.加入redis的依赖
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.12/version/parentgroupIdorg.example/groupIdartifactIdredis-1/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingnameredis-1/nameurlhttp://maven.apache.org/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependencydependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.2.0/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversionRELEASE/versionscopetest/scope/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversionRELEASE/versionscopetest/scope/dependency/dependencies
/project3.编写配置文件 4.设置配置类 注解
EnableCaching开启缓存 Cacheable 标记表示支持缓存
属性value 缓存的名称 必须指定也可以是多个 key缓存的key可以为空 condition缓存条件可以为空返回结果为true才缓存 CachePut 一般用在保存更新方法中使用和Cacheable基本一致
CacheEvict标注在需要清除缓存元素的方法或类上和Cacheable类似。
属性布尔类型allEntries表示是否要清除缓存中所有元素默认为false为true将忽略指定的key
boforelnvocation清除操作默认在方法执行后触发方法如果因为抛出异常而未能成功返回时也不会触发清除操作可以改变触发清除操作的时间当我们指定该属性值为true时Spring会在调用该方法之前清除缓存中的指定元素。 查看完成缓存