U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 常见问题解答 >

springboot整合redis ---- 缓存 分布锁 Redssion解决分布锁的bug(超时问题) redis常

来源:http://www.tudoupe.com时间:2022-08-04

目录

1.StringRedisTemplate

2.RedisTemplate

2. redis使用场景

2.1 作为缓存

2.2.分布式锁

2.2.1.概念建筑群项目

3.Redis的分布式锁定错误解决方案

常见面试问题

4.1.缓存渗透是什么?如何解决?

4.2.缓冲阻塞是什么?如何解决?

4.3.缓冲降雪是什么?如何解决?

4.4.雷迪斯的消灭策略是什么?

springboot包含了两个类型的模板工具,用于运行 redis,字符串RedisTemplate和RedisTemplate类,StringRedisTemplate是RedisTemplate的一个子类,StringRedisTemplate它只能存储字符串类型,无法存储对象类型。为了使用StringRedisTemplate存储对象,您必须将对象转换为json字符串。

1.StringRedisTemplate

(1)引入相关依赖

前提:请记住打开Redis服务

(三)将StringRedisTemplate注入类对象

(4)使用StringRedisTemplate

该类将每个数据类型的操作与相应的内部类分开。

2.RedisTemplate

在存储对象类型的值类型时使用 redisTemplate
存储值类型为string。 例如,使用StringRedisTemplate来验证代码

当 RedisTemplate 的值是对象类型时,类需要实现可串联的接口,不然会乱码,因为默认是jdk序列,在存储上面的字符串类型时,没有随机代码是因为字符串类型实现串联接口。

上面的RedisTemplate需要每次都指定key value以及field的序列化方式,能不能搞一个配置类,已经为RedisTemplate指定好序列化。以后再用就无需指定。

这样您不需要设置上面的序列方法

2. redis使用场景

2.1 作为缓存

(1)数据存储在存储器内,数据查询速度快,可以评估数据库的压力。

什么类型的数据适合存储

查询频率较高,修改频率较低.

安全系数低的数据

(三)使用雷迪斯作为缓存

这里我们使用Mybatis-plus,所以我们需要引入依赖性

控制层:

这里有一个知识点,我们可以通过@GetMapping(value = "getById/{id}")  传参,public CommonResult getById(@PathVariable("id") Integer id)   获取获取请求映射中{}中的值。

这样的好处是安全  ,这样他们就不知道参数 1 是什么  ,如果有id = 1 聪明的人一眼就知道了,所以这种方式现在比较流行

service:

serviceImpl:

mapper:

replication.properties:

查看的缓存: 代码的第一个部分是通知前相同的 @, 代码的第二个部分是通知后相同的. 我们可以通过AOP分开缓存代码和业务代码.

spring框架它应该也能想到。--使用注解即可完成。解析该注解。

(1)添加缓存的配置类

你以前没有部署过它吗?为什么我们需要重新配置,因为上面是手动创建的RedisTeplate类对象 redisTemplate.opsForValue(),但这里我们使用评论,它是所有源泉的容器,帮助我们创造,所以需要重新配置。他的缺点是缺乏灵活性,缓冲期均匀,不能根据客户的需求设置,它也可以通过使用AOP自写实现。

(二)主启动类打开缓存评论

(3)使用注解

2.2.分布式锁

我们使用这个项目来证明多线性连贯性的问题:

controller:

service:

serviceImpl:

dao:

ProductStockMapper.xml:

application.properties:

pom.xml:

使用压测工具jmeter高耦合测试导致线程安全问题

我们看到同一个库存被使用了n次。以及数据库中库存为负数。 线程安全问题导致。

解决方案: 使用 synchronized 或者lock锁

2.2.1.概念建筑群项目

使用synchronized 或者lock锁如果我们搭建了项目集群,那么该锁无效。

这里我们正在开始一个小组项目,用一些想法

(一)创建另一个汤姆卡特

(2)配置ginx.conf并打开 thenginx(我们在这里下载了 window版本的 thenginx)建议不要下载到中文路径

请记住修改压力测量的端数与顶部一致

(3)开启两个项目

重复测量并发现另一个事件: 重复数字和库存为负数.

我们可以使用redis作为锁,来获取锁和释放锁

请记住打开“雷迪斯”服务,否则您无法存储锁

这里我们找不到复制品和负品,我们的问题已经解决了!!

3.Redis的分布式锁定错误解决方案

Redis分布式锁不能解决过时问题,分布式锁有过时时间,如果超过锁的过时时间,则程序的执行会有问题。

可以使用扩散依赖性,再扩散原理,解决再扩散加班问题

为持有锁的线程打开一个保卫线程,保卫线程每10秒检查当前线程是否仍保持锁,如果保持锁,则延迟其生存。

使用:

(一)引入辐射的依赖性

(二)配置红化对象并将其转移到弹簧容器管理中

这里我们因为方便,就不用linux的redis了,我们在window上下载了个redis,跟linux上的使用是一样的

测试:

常见面试问题

4.1.缓存渗透是什么?如何解决?

1.在数据库中没有这样的记录,在缓存中也没有这样的记录,这是当人们恶意访问这些数据时。 这将导致请求绕过缓存并直接访问数据,导致数据库的压力过高。

2.解决办法:
[1]在控制器中增加了数据校正。
[2]我们可以将一个空的对象存储在红字里,而且延迟的时间不能太长,以确定。
[3]我们使用布隆过滤器。底层:有一个bitmap数组,里面存储了该表的所有id.

建议三种都使用:

管理层判断数据是否有意义

这里只优化搜索方法

//伪代码
String get(String key) // 克隆滤波钟存储数据库表钟的相应的ID
字符串值 = redis.get(key); // 首先从缓存中获取。
if (value == null) { // 缓存未执行
如果(!bloom filter.mightContain(key){//检查是否有克隆过滤器
return null;q
}else{
值=db.get(key); //查询数据库
redis.set(key, value);
}
}
return value;
}

4.2.缓冲阻塞是什么?如何解决?

缓存断裂是指没有在缓存中,而是在数据库中的数据(通常是由于缓存时间过期),当有很多同时使用的用户读取缓存而不读取数据,并同时进入数据库获取数据时,导致数据库压力立即增加,造成过度压力。

缓存击穿解决方案:
1.设置永久限制。[仅适用于内存]
2.使用互斥锁(mutex key)业界比较常用的做法。

4.3.缓冲降雪是什么?如何解决?

缓冲雪崩是缓冲中过期数据的大量,以及大量查询数据,造成数据库的过度压迫,甚至导致机器倒闭。 与缓冲穿刺不同,缓冲穿刺指针搜索相同的数据,而缓冲雪崩是不同的数据过时,许多数据无法搜索,因此数据库被搜索。
1.在缓冲雪崩旁边发生什么事:
[1]项目刚刚启动,缓存中没有数据
[2]有许多过期缓冲器。
[3]变压机

2.解决办法:
1.在启动之前,一些热点数据被存储在缓存中。
将延迟时间设置为散布值
3.建立雷迪斯群

4.4.雷迪斯的消灭策略是什么?

从数据中心的集合中选择最近最少使用的数据,这是默认的

在redis.conf中配置

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息