- 博客(222)
- 资源 (2)
- 收藏
- 关注
原创 Docker之安装redis
下面记录一下在docker中安装redis过程。6.进入容器测试redis。2.拉去镜像到Linux。3.查看镜像是否拉取成功。1.查看redis镜像。
2023-02-28 18:01:47
269
1
原创 Redis之分布式锁
随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的 Java API并不能提供分布式锁的能力。为了解决这个问题就需要一种跨 JVM 的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题!4.解决redis原子性的问题,可以使用lua脚本进行锁的释放。2.避免锁长时间未释放,设置过期时间。1.基于数据库实现分布式锁.再次设置对应值会设置失败。1.redis设置锁。
2023-02-20 22:20:32
370
原创 Redis之集群搭建
redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。需要进入到redis安转目录下的src文件当中,使用redis-cli命令创建集群。2.分别编写每个配置,文件内容如下(每个配置文件替换一下涉及的端口的内容)把redis配置文件复制到指定位置,并创建6个配置文件。6个节点服务都启动了,并且生成了对应6个节点配置文件。输入yes确定如此分配之后,结果如下,搭建集群成功。4.使用集群命令创建集群。
2023-02-16 22:28:33
958
原创 Redis之哨兵模式
Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是Redis高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务。某个master服务宕机后,会把这个master下的某个从服务升级为master来替代已宕机的master继续工作。此选举出的主服务器为6381,6379自动变成从服务器,为down状态。当6379重启之后,则会自动加入当前主服务器6381的从服务器当中。5.重启6379服务器,自动变成6381的从服务器。
2023-02-15 22:54:39
317
原创 Redis之事务
事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。事务中的所有命令都会序列化、按顺序的执行。事务在执行的过程汇总,不会被其他客户端发送来的命令请求所打断。
2023-02-13 21:30:13
68
原创 Redis之整合到SpringBoot
Redis整合到SpringBoot步骤如下。4.编写Controller类简单调用测试。2.创建Redis配置类。3.填写Redis配置。
2023-02-09 21:48:42
160
原创 Redis之Geospatial类型
GEO,Geographic,地理信息的缩写该类型,就是元素的 2 维坐标,在地图上就是经纬度。redis 基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度 Hash 等常见操作。2.有效的纬度从 -85.05112878 度到85.05112878 度。3.当坐标位置超出指定范围时,该命令将会返回一个错误。1.有效的经度从 -180 度到 180 度。4.已经添加的数据,是无法再次往里面添加的。4.以给定的经纬度为中心,找出某一半径的元素。3.获取两个位置之间的直线距离。
2023-02-08 22:17:15
118
原创 Redis之HyperLogLog类型
比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数(不重复元素)为5.3.将一个或多个HyperLogLog合并到新HyperLogLog中。HyperLogLog是用来做基数统计的算法。1.添加命令 成功添加返回1 否则返回0。
2023-02-08 21:57:21
84
原创 Redis之Bitmaps类型
( 2 )Bitmaps 单独提供了一套命令 , 所以在 Redis 中使用 Bitmaps 和使用字符串的方法不太相同。可以把 Bitmaps 想象成一个以位为单位的数组数组的每个单元只能存储0和1,数组的下标在 Bitmaps 中叫做偏移量。(1) Bitmaps 本身不是一种数据类型,实际上它就是字符串( key-value ),但是它可以对字符串的位进行操作。4.对多个Bitmaps的and(交集)、or(并集)、not(非)、xor(异或)操作并将结果保存在destkey中。
2023-02-08 21:40:35
80
原创 Redis之 Zset类型
不同之处是有序集合的每个成员都关联了一个评分( score ),这个评分( score ) 被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。3.返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max成员有序集成员按 score 值递增(从小到大)次序排列。Redis有序集合 zset 与普通集合 set 非常相似,是一个。2.返回有序集合key中,下标在n-m之间的元素。8.返回该值在集合中的排名,从0开始。
2023-02-07 22:19:44
173
原创 Redis之集合(Set)
Redis的Set是string类型的无序集合。6.随机从该集合中取出一个值,并删除(如果值都取完,删除key)11.返回两个集合的差集元素(key1中的,不包含key2中的)7.随机从该集合中取出n个值,不会删除值。所有的value都指向同一个内部值。8.把集合中的一个值移动到另一个集合。1.将一个多个元素加入集合key中。3.判断集合中是否存在某个值。10.返回两个集合的并集元素。9.返回两个元素的交集元素。2.取出该集合所有值。4.获取集合元素个数。5.删除集合中的元素。
2023-02-06 22:09:52
168
原创 RabbitMq之优先队列
总有一些消息需要提前消费处理,下面代码实现一下优先队列。运行生产者和消费者,结果如下。消费者优先级高的消息优先消费。生产者正常发送10条消息。
2023-02-02 22:24:56
292
原创 RabbitMq之发布确认(高级)
二是在发布消息成功后使用 rabbitTemplate 调用 waitForConfirms 或 waitForConfirmsOrDie 方法,等待 broker 节点返回发送结果,根据返回结果来判定下一步的逻辑。要注意的点是 waitForConfirmsOrDie 方法如果返回 false 则会关闭 channel,回导致接下来无法发送消息到 broker。正常情况下生产者只发布消息到交换机,无法确定是否成功把消息发送到交换机当中,由此发布确认可以通知生产者消息是否发送到了交换机。
2023-02-01 22:41:57
276
原创 RabbitMq之实现基于插件的延迟队列
由于队列先入先出的特性, 如果队列头的消息过期时间很长, 后面的消息过期时间很短, 会导致后面的消息过期后不能及时被消费掉。基于死信队列的缺点,基于插件实现的延迟队列就很好地解决了这个问题。死信队列通过设置延迟时间TTL能实现延迟队列的效果,但是。运行调用接口发送消息,基于插件实现了延迟队列的效果。,基于springBoot框架。
2023-01-31 22:40:35
434
原创 RabbitMQ之安装delayed_message_exchange插件(实现插件延迟队列)
下载地址:https://www.rabbitmq.com/community-plugins.html。先关闭:rabbitmqctl stop 再重启:rabbitmq-server。1.首先要下载delayed_message_exchange插件。5.查看RabbitMq可视化界面,显示了对应的选项。2.下载好的插件移动到mq的plugins文件夹下。3.进入sbin目录下,执行安装语句。4.重启RabbitMq。
2023-01-31 22:23:06
536
原创 RabbitMq之死信队列
当生产者发的消息通过正常的交换机进入到正常的队列时,无法被正常消费,则会通过死信交换机进入死信队列当中进一步处理,此处举例子是有死信消费者消费。在停掉正常消费者,做出挂了的现象,然后分别启动生产者和死信消费者。由于设置的过期时间为10s 等待10s之后消息到了死信队列当中。通常无法消费的消息,通常会进入死信队列当中,以保证完整数据。3.设置最大队列长度,超过的消息进入死信队列。先启动正常消费者,此时看MQ可视化界面。死信消费者就能正常收到并消费对应消息。设置成为死信的三个条件如下。简单举个例子,流程如下。
2023-01-29 22:43:40
615
原创 RabbitMq之Exchange的Direct模式
通过routingKey控制同一交换机下指定队列获得消息的一种模式。这就是通过routingKey指定队列收消息的direct模式。启动三个线程,指定info收消息。
2023-01-28 22:47:49
221
原创 RabbitMq之Exchange的Fanout模式
多个队列绑定一个交换机,那么当发送消息到该交换机时,其绑定的所有队列都能收到相同消息,类似于广播一样。RabbitMq的交换机有三种路由模式,下面简单举例子介绍一下。这样就简单的实现了fanout模式。分别启动这三个,发送多条消息。
2023-01-28 22:16:31
421
原创 RabbitMq之发布确认
与单个等待确认消息相比,先发布一批消息然后一起确认可以极大地提高吞吐量,当然这种方式的缺点就是:当发生故障导致发布出现问题时,不知道是哪个消息出现问题了,我们必须将整个批处理保存在内存中,以记录重要的信息而后重新发布消息。当然这种方案仍然是同步的,也一样阻塞消息的发布。一种同步确认发布的方式,也就是发一个消息以后只有他被确认发布,后续的才能继续发布。保证消息不丢失,除了队列开启持久化,消息开启持久化之后,还要发布确认才能完全保证消息不丢失。要如何处理未发布确认的消息,简单记录代码如下。
2023-01-27 22:19:14
292
原创 RabbitMq之不公平分发、预取值
但是在某种场景下这种策略并不是很好,比方说有两个消费者在处理任务,其中有个消费者 1处理任务的速度非常快,而另外一个消费者2处理速度却很慢,这个时候我们还是采用轮训分发的化就会到这处理速度快的这个消费者很大一部分时间处于空闲状态,而处理慢的那个消费者一直在干活,这种分配方式在这种情况下其实就不太好,但是RabbitMQ并不知道这种情况它依然很公平的进行分发。在mq可视化界面的channel中显示如下。RabbitMO 默认分发消息采用的。
2023-01-27 17:42:09
266
原创 RabbitMq之应答模式
1.自动应答: 不在乎消费者对消息处理是否成功,都会告诉队列删除消息。如果处理消息失败,实现自动补偿(队列投递过去 重新处理)。2.手动应答: 消费者处理完业务逻辑,手动返回ack(通知)告诉队列处理完了,队列进而删除消息。而手动应答有如下三个方法。
2023-01-27 16:25:53
665
原创 vue报错:Failed to resolve loader: sass-loader You may need to install it
当vue新建项目中使用scss时,没装sass-loade会报错。那么解决问题就是安装sass-loade。所以安装sass-loade版本如下。这样就解决了vue启动报错问题。本人用的node版本是12+
2022-11-23 15:53:57
2653
1
原创 Oracle列转行函数listagg和wm_concat
oracle高版本也放弃了wm_concat函数,所以推荐使用listagg函数。)的sql中使用wm_concat函数可能会报如下错误。wm_concat函数默认是以","进行合并的。现在要把查询出的两列转为一行。
2022-09-28 10:50:47
978
原创 静态方法中调用注入的配置类获取不到参数(@value注解获取配置文件中的参数)
静态方法中调用使用@value注解的配置类,其中配置类是注入到当前类中,会发生无法获取配置类中的参数。项目中遇到如下的场景。
2022-09-26 16:09:07
775
1
原创 oracle之sql中like %变量%的写法
orcale数据库前提下,mybatics框架,需要模糊查询拼接%的场景如下那需要对传递的变量进行模糊查询,则有如下两种写法1.调用mapper接口的时,把变量用%拼接2.在sql中处理,使用concat函数进行拼接
2022-07-14 15:37:05
3293
原创 最小化方式安装centos7无法上网问题解决方案
在虚拟机中以最小化方式安装centos7,后无法上网,因为centos7默认网卡未激活。而且在sbin目录中没有ifconfig文件,这是因为centos7已经不使用 ifconfig命令了,已经用ip命令代替;1.首先需要激活网卡2.重启网卡命令此时linux就能正常联网......
2022-06-21 22:32:28
1520
原创 import org.apache.commons.lang3.StringUtils突然报错的解决办法(内网开发)
在开发代码过程中,某一天import org.apache.commons.lang.StringUtils报红。现在解决办法如下。首先要找到当前lang3包的位置。然后右键项目-Project Structure-Libraries找到当前jar包路径 导入即可这样就解决了import org.apache.commons.lang.StringUtils报红的问题。...
2022-05-30 09:44:19
6367
原创 Mybatis中if标签判断不生效解决办法
Mybatis中if标签如下写if判断失效//失效//<choose/><when>标签同样 有其问题<if test="flag == '1'"> ...</if><if test="flag == '2'"> ...</if>原因:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql
2022-05-18 23:09:08
4635
1
原创 解决IDEA编译项目报错“xx包不存在“,但是maven仓库中有的情况
最近搭建一个新的项目的时候,发现maven已经下好依赖包,但是一编译项目就报错,xx包不存在这种情况,当时解决的办法就是执行如下命令mvn idea:idea此命令会继续下载未下载完成的依赖,解决IDEA编译项目报错"xx包不存在"的问题。...
2022-04-30 22:48:35
1053
原创 springboot多模块项目中怎么调用子项目接口
创建Springboot多模块项目如下直接调用子项目接口会报错解决问题如下1.启动类上需要配置一下扫描包的路径@ComponentScan({"子项目包路径"})2.在pom文件中加入子项目依赖3.maven重新刷新一下,就可以调用子模块的接口了...
2022-04-13 00:12:10
1919
原创 rabbitmq报错An unexpected connection driver error occured
项目中连接不上rabbitmq,报错内容如下An unexpected connection driver error occuredjava.net.SocketException: Socket Closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_201] at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[
2022-04-12 23:38:36
2424
原创 阿里云服务器安装MySql8.0.26
下面简单介绍一下阿里云服务器安装MySql8.0.26的基本流程,Linux版本是Centos71.检查服务器是否已经安装MySQLyum list installed | grep mysql//如果检查出来有的话就使用下面这个命令删除yum -y remove mysql-libs.x86_642.下载mysql8.0 rpm源wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm3.安装已下载的rpm
2022-03-15 23:22:57
2751
5
原创 Linux之定时任务Crontab
在Linux上,通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。格式如下* * * * * command to be executed- - - - -| | | | || | | | ----- Day of week (0 - 7) (Sunday=0 or 7)| | | ------- Month (1 - 12)| |
2021-12-05 22:05:48
980
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人