您现在的位置是:首页» windows系统» springboot整合redis取值后能干什么,redis集群配置springboot

springboot整合redis取值后能干什么,redis集群配置springboot

2024-07-13 15:37:21
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。目录1.StringRedisTemplate2.RedisTemplate2. redis使用场景2.1 作为缓存2.2.

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

目录

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中配置

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com