Redis和SpCache
Redis和SpCache相关文章
拄杖忙学轻声码
希望学习的同时也能和大家交流分享技术
展开
-
SpringBoot整合Redis:java.io.IOException: 远程主机强迫关闭了一个现有的连接。或者控制台报连接超时异常
2、设置 redis 服务端的配置文件 redis.conf 中 tcp-keepalive 的时间为60(单位秒)(TCP连接存活时间):tcp-keepalive 60。2、如果 tcp-keepalive 存活时间大于超时时间,存活时间还没有结束(连接还没关闭)就又创建新的连接,创建的连接多了就会远程主机强迫关闭现有连接。1、设置连接空闲超过 N(秒或毫秒)后关闭,0为禁用:redis.timeout: 60s(这里设置和tcp-keepalive的值一致)原创 2022-12-06 00:51:10 · 6166 阅读 · 0 评论 -
Redisson实现分布式锁原理、自动续期机制、应用场景
前言:在学习分布式锁之前,应该首先要分析一下使用分布式锁的必须要考虑的一些问题1、互斥性:在并发的任意时刻,只能有一个线程拿到锁2、防锁死:即使有一个线程在持有锁的期间崩溃而未能主动释放锁,还要有其他方式去释放锁从而保证其他进程能获取到锁3、加锁和解锁的必须是同一个线程,解铃还须系铃人4、锁续期:执行业务耗时的时间超过了锁的等待时间,必须进行锁续期一、Redisson实现分布式锁1、加锁原理【1】Redisson 和 Redis 实现分布式锁是一致的,是不过 Redisson 是封装了 lua 脚本,原创 2022-12-03 18:28:38 · 2529 阅读 · 0 评论 -
SpringBoot项目集成Redisson实现分布式锁
备注:redisson-spring-boot-starter 方式不需要手动初始化 RedissonClient 实例。1、初始化 RedissonClient 实例配置类。原创 2022-11-27 04:16:06 · 954 阅读 · 0 评论 -
Redisson 3.7.x 版本报非法反射:WARNING: An illegal reflective access operation has occurred
2、如果是 redisson-spring-boot-starter 3.9.x以上版本,切换版本为 3.8.2 即可。1、把 redisson 的版本换成 3.6.3 即可。原创 2022-11-27 03:51:38 · 481 阅读 · 0 评论 -
Redis缓存的雪崩、穿透、击穿
【1】大家都知道数据表主键一般都是从1开始的增量正数,或是特殊算法生成的字符串,这种情况下如果有恶意攻击发起请求,查询 where id = -1、-2、-3、... 这样的数据,缓存中肯定是没有这样数据的,就到数据库里面查询,也没有查到该条数据,只能返回空数据给前端了。【2】如果某个恶意用户用脚本不断的发这样的请求,直接穿透 redis 打到数据库上,那么所有请求都会打到数据库,而且会一直打到数据库中去,因为 redis 缓存这层根本拦截不到这样的数据,这就是所谓的缓存穿透。原创 2022-11-25 18:20:37 · 2092 阅读 · 0 评论 -
Redis关闭持久化
注意:此 save 空节点不能注释掉,否则默认还会持久化。2、重启 redis 服务,然后再查看数据是否还存在。1、设置 appendonly 的值为 no 即可。2、设置 appendonly 的值为 yes。重启后缓存数据已经丢失,关闭持久化成功。3、删除 dump.rdb 转储文件。1、放开原有 save 规则节点即可。1、redis默认是开启持久化的。2、把 save 节点设置为空。2、默认持久化方式为RDB。1、注释掉原来的持久化规则。关闭 RDB 持久化。关闭 AOF 持久化。原创 2022-11-24 14:25:42 · 5935 阅读 · 0 评论 -
Redis持久化方式RDB和AOF
1、由于Redis的数据都存放在内存中,如果没有配置持久化,Redis服务宕机重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据。【7】auto-aof-rewrite-min-size 64mb #允许重写的最小AOF文件大小,配置写入AOF文件后,要求系统刷新硬盘缓存的机制。【1】RDB方式是 Redis 默认的持久化方式,采用快照的方式把符合我们设置的条件内存中的数据存储到磁盘dump.rdb转储文件中,全量备份。原创 2022-11-24 11:33:36 · 733 阅读 · 0 评论 -
Redis缓存数据和表数据一致性之延迟双删策略
延迟1是为了等待更新数据表动作完成、2是为了等待更新数据表之前查询查到的旧数据写入缓存动作完成,最后再把写入缓存的旧数据删除。当请求1执行删除缓存数据后,还未来得及更新数据表或更新动作还未完成,此时请求2查询到数据表中仍然是更新之前的数据、并把脏数据写入了Redis缓存。当请求1执行update更新数据表后,还未来得及删除缓存数据或删除缓存动作还未完成,此时请求2查询到Redis缓存中仍然是旧数据、并返回给前端。3、Redis适用的是读频率远远大于改频率的数据表,不适合改频率大于读频率的数据。原创 2022-11-23 16:11:24 · 4267 阅读 · 0 评论 -
Redis缓存写入数据,解决Could not read JSON: Cannot construct instance of `xxx.xxDTO`的问题
2、redis 的这些序列化方式,使用的是构造函数进行创建对象。两种构造方式都可以,一种是显示写法,一种隐式写法。1、在实体类或DTO类添加无参构造方法,如下。1、序列化对象的时候出错了。原创 2022-11-14 12:55:02 · 1345 阅读 · 0 评论 -
Docker安装Redis 7.x、SpringBoot整合Redis(单机模式)
redis-server /etc/redis/redis.conf:以容器内的配置文件方式启动redis服务,最终找到的是宿主机挂载的配置文件。-v:分别对应挂载的配置文件和数据存储目录,冒号左边是宿主机目录、右边是容器内目录,最终找到的是宿主机目录中的内容。3、本人的配置和数据存储目录统一放在 //devtools/redis 目录下的 conf、data目录下。1、因为需要redis的配置文件,这里最好去redis的官方去下载一个redis使用里面的配置文件即可。原创 2022-09-04 13:41:11 · 1333 阅读 · 0 评论 -
Redis常用命令
1、windows cmd连接远程redis1】语法:redis-cli -h 远程redis所在ip -p 6379 -a 远程redis密码 2】前置条件:安装redis、在redis安装目录下运行 redis-cli.exe 即可连接原创 2021-11-25 16:12:38 · 290 阅读 · 0 评论 -
redis服务访问权限配置
在redis的配置文件redis.conf中,找到bind localhost注释掉1、注释掉本机,局域网内的所有计算机都能访问。bind localhost 只能本机访问,局域网内计算机不能访问bind 局域网IP 只能局域网内IP的机器访问, 本地localhost都无法访问 验证方法:[root@mch ~]# ps -ef | grep redisroot 2175 1 0 08:15 ? 00:00:05 /usr/local...原创 2021-11-25 16:06:15 · 1470 阅读 · 0 评论 -
分布式缓存RedisTemplate取不到数据的问题
1、首先检查redis的服务数据源配置是否一致。2、确认value是否存进去,中间是否有删除操作,过期时间3、检查key是否一致。这个特别得注意,存的一方和取的一方编码是否一致。4、存的方式和取的方式是否一致。key的类型是否一致...原创 2021-11-25 14:43:19 · 1436 阅读 · 0 评论 -
Redis缓存中数据在分布式服务模块中通过key获取不到数据问题
问题场景:在模块A服务中,把字典表中的数据加载到redis缓存中,在本服务A中通过key可以正常获取数据,但是在模块B服务、模块C等服务中通过key却获取不到对应的数据分析解决:1、这种问题一般是由于RedisTemplate类型的泛型影响所致,也就是说在SpringBoot项目启动成功之后,Spring容器中会有多个同名(同Id)的 redisTemplate实例对象2、Spring容器中为什么会有多个redisTemplate实例对象,因为 RedisTemplate有带泛型的和不带泛型的接...原创 2021-11-04 01:30:05 · 1200 阅读 · 0 评论 -
redisTemplate自定义序列化配置,更改其默认序列化器。以及序列化反序列化注意问题
1、最好使用 @Resource 注入,注入的 RedisTemplate 类型、泛型和写入时的 RedisTemplate 类型保持一致,否则可能会出现获取不到value的问题。2、redis 反序列化时所用的dto属性必须全包含序列化时的dto全属性,反序列化所用的dto可以增加属性,但不能删除修改属性,否则会报错找不到对应属性。不推荐redis直接序列化是因为对dto所在的服务、包都有要求,在其他服务中即使同名同属性也无法反序列化,除非使用的还是原来包下的dto才可以,不够灵活。原创 2021-10-23 10:49:51 · 4002 阅读 · 0 评论 -
SpringBoot整合Redis默认使用Lettuce连接池、推荐连接池参数配置规则,常用数据类型使用场景
1、max-active:大于cpu * 2,通常为(cpu * 2) + 2。2、合理配置 lettuce 连接池参数,一般不会出现过段时间就断开连接的现象。5、time-between-eviction-runs:1s(秒)String:存短信验证码、缓存、计数器、分布式session。HyperLogLog:在线用户数、统计访问量等。GeoHash:同城的人、同城的店等。BitMap:签到打卡、活跃用户等。1、方式一(推荐此方式)原创 2021-10-23 10:42:21 · 11104 阅读 · 0 评论