springboot整合redis取值后能干什么,redis集群配置springboot
本内容由系统网小编为大家分享,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
相关推荐
-
springboot整合redis取值后能干什么,redis集群配置springboot
2024-07-13 15:37:21 -
springboot用cmd运行,springboot开启虚拟线程
2024-07-13 14:14:17 -
springboot闆嗘垚椤圭洰,spring boot闆嗘垚smtp
2024-07-13 13:46:14 -
spring boot使用异步编程,springbootasync优先级
2024-07-13 08:31:46 -
springboot整合ldap,springboot加载数据源慢
2024-07-13 05:19:00 -
spring boot第十章个人博客系统,springboot后台管理uniapp小程序
2024-07-13 05:10:05