
Redis和SpCache
Redis和SpCache相关文章
拄杖忙学轻声码
希望学习的同时也能和大家交流分享技术
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis集群原理是什么
2、自动故障转移:当主节点出现故障时,哨兵会选举一个从节点晋升为主节点,并让其他从节点指向新的主节点。4、动态扩展:可以方便地向集群中添加新的节点,通过重新分配哈希槽,将数据从现有节点迁移到新节点上,实现集群的水平扩展,提高集群的存储和处理能力。2、故障转移:当某个主节点出现故障时,集群会自动检测并通过选举机制从其他正常的从节点中选择一个晋升为主节点,以保证集群的高可用性。3、节点通信:节点之间通过 gossip 协议进行通信,互相交换集群的状态信息,包括节点的存活状态、哈希槽的分配情况等。原创 2025-06-21 15:00:00 · 357 阅读 · 0 评论 -
搭建redis集群常见的问题及解决
(1)错误信息[ERR] Node is not empty表明您尝试创建Redis集群时,指定的节点不为空。这可能意味着该节点已经是另一个集群的一部分,或者它包含数据库0中的一些键。在确保服务是已启动的情况下,却连接不上,此时就可以排查是不是云服务器的端口开放问题,一般在云服务防火墙规则下放开允许端口号就可以了。(2)shutdown原节点,删除该节点对应的 nodes-800x.conf 文件,启动该节点服务。最后重新创建集群即可。一、在集群节点启动后,客户端连接登录或创建集群的时候报如下错误。原创 2025-01-13 10:30:00 · 304 阅读 · 0 评论 -
java中使用redis及redisson客户端实现轻量级消息队列、延迟消息队列
3、如果业务并发量较大,消息过多可能会导致内存占用过大从而影响 redis 的响应速度,毕竟 redis 的主功能是用作缓存的。2、只是需要把消息队列绑定到延迟队列上,然后生产者端通过延迟队列发送,延迟时间到了之后直接路由到绑定的消息队列中。4、不过还是建议使用专业的消息队列中间件,例如:RabbitMQ、RocketMQ、PulsarMQ 等。2、如果数据量不是特别大,对消息数据可靠性要求不高、允许消息容错的业务,可以使用此方案。1、已经集成了redis服务,这里服务端版本为:Redis 7.0.8。原创 2024-12-11 14:30:00 · 439 阅读 · 0 评论 -
Redis过期删除(淘汰)策略概念和理解,以及key已过期内存未释放的处理方式
1、惰性删除是指客户端访问一个key的时候,redis会基于一个叫 expireIfNeeded() 函数选择异步会同步把该key删除。1、虽然redis的key过期不会立刻被删除,但不会影响客户端对该key的访问结果,会基于惰性删除(在访问时判断是否已过期)在 Redis 中key过期后,不一定会立刻被删除,主要是基于惰性删除、定期删除这两种方式,下面介绍一下这两种策略。2、由此可见,这意味着过期key的删除是在访问时候进行的,而不是在过期时立即被删掉的。原创 2024-12-06 14:30:00 · 509 阅读 · 0 评论 -
搭建Redis集群模式
(2)redis-cli -c -h -p:-c表示集群模式,指定ip地址和端口号,如://xxx/redis/src/redis-cli -c -h 127.0.0.1 -p 8001。2、哨兵节点接收 redisClient 客户端请求后,会监控redis服务的master主节点,如果master主节点挂掉哨兵则会选举某个slave从节点来担任master主节点服务。这里以redis 7.0.8 版本为例。8、(此步骤未经验证,慎用)自定义指定主节点,不使用 redis-cli 自动分配的主节点。原创 2024-12-07 10:30:00 · 263 阅读 · 0 评论 -
解决redis连接:DefaultClusterTopologyRefresh : Unable to connect to [10.0.4.6/<unresolved>
2、检查服务端配置 cluster-announce-ip、cluster-announce-bus-port 参数,分别需要绑定公网ip和1800x端口号,这里的1800x端口号用于主从节点通信。1、检查服务端配置bind参数是否正确,bind ip,这里的ip地址要绑定 0.0.0.0。此错误是redis客户端无法连接集群各个节点。原创 2024-12-05 15:30:00 · 505 阅读 · 0 评论 -
SpringBoot 3.x整合Redis集群(lettuce客户端),解决:DefaultClusterTopologyRefresh : Unable to connect to [10.0.4.
此问题是redis服务端集群配置有问题,连接不上,需要排查。默认为 redis 集群已经搭建好了。1、配置好以上信息后,启动如果报错,如下。3、配置Redis实例对象。原创 2024-12-05 10:30:00 · 606 阅读 · 0 评论 -
Linux系统安装Redis(单机)
进入 redis 根目录,make编译一下(相当于java的javac)(1)修改配置文件内容 daemonize 改为 yes。(1)kill 进程号:kill -9 PID。出现此信息,说明redis已经安装成功。1、下载安装包,上传至相应目录下。3、安装 gcc 编译组件,编译。看到这些信息,说明make成功。5、安装,验证是否安装成功。8、停止 redis 服务。4、验证是否编译成功。原创 2024-12-04 14:30:00 · 318 阅读 · 0 评论 -
Redis服务配置文件 redis.conf 更新修改配置参数说明
在安装redis服务中,默认的配置项通常不能实际使用,需要修改一些配置参数。1、拿到 redis.cnf 文件,此文件通常在 redis 项目源码的第一级目录下。4、如果搭建集群,常见问题可以参考。2、单实例,常规配置如下,原创 2024-12-03 15:00:00 · 2042 阅读 · 0 评论 -
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 · 6730 阅读 · 0 评论 -
Redisson实现分布式锁原理、自动续期机制、应用场景
前言:在学习分布式锁之前,应该首先要分析一下使用分布式锁的必须要考虑的一些问题1、互斥性:在并发的任意时刻,只能有一个线程拿到锁2、防锁死:即使有一个线程在持有锁的期间崩溃而未能主动释放锁,还要有其他方式去释放锁从而保证其他进程能获取到锁3、加锁和解锁的必须是同一个线程,解铃还须系铃人4、锁续期:执行业务耗时的时间超过了锁的等待时间,必须进行锁续期一、Redisson实现分布式锁1、加锁原理【1】Redisson 和 Redis 实现分布式锁是一致的,是不过 Redisson 是封装了 lua 脚本,原创 2022-12-03 18:28:38 · 2996 阅读 · 0 评论 -
SpringBoot项目集成Redisson实现分布式锁
备注:redisson-spring-boot-starter 方式不需要手动初始化 RedissonClient 实例。1、初始化 RedissonClient 实例配置类。原创 2022-11-27 04:16:06 · 1244 阅读 · 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 · 661 阅读 · 0 评论 -
Redis缓存的雪崩、穿透、击穿
【1】大家都知道数据表主键一般都是从1开始的增量正数,或是特殊算法生成的字符串,这种情况下如果有恶意攻击发起请求,查询 where id = -1、-2、-3、... 这样的数据,缓存中肯定是没有这样数据的,就到数据库里面查询,也没有查到该条数据,只能返回空数据给前端了。【2】如果某个恶意用户用脚本不断的发这样的请求,直接穿透 redis 打到数据库上,那么所有请求都会打到数据库,而且会一直打到数据库中去,因为 redis 缓存这层根本拦截不到这样的数据,这就是所谓的缓存穿透。原创 2022-11-25 18:20:37 · 2166 阅读 · 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 · 6321 阅读 · 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 · 1108 阅读 · 0 评论 -
Redis缓存数据和表数据一致性之延迟双删策略
延迟1是为了等待更新数据表动作完成、2是为了等待更新数据表之前查询查到的旧数据写入缓存动作完成,最后再把写入缓存的旧数据删除。当请求1执行删除缓存数据后,还未来得及更新数据表或更新动作还未完成,此时请求2查询到数据表中仍然是更新之前的数据、并把脏数据写入了Redis缓存。当请求1执行update更新数据表后,还未来得及删除缓存数据或删除缓存动作还未完成,此时请求2查询到Redis缓存中仍然是旧数据、并返回给前端。3、Redis适用的是读频率远远大于改频率的数据表,不适合改频率大于读频率的数据。原创 2022-11-23 16:11:24 · 4609 阅读 · 0 评论 -
Redis缓存写入数据,解决Could not read JSON: Cannot construct instance of `xxx.xxDTO`的问题
2、redis 的这些序列化方式,使用的是构造函数进行创建对象。两种构造方式都可以,一种是显示写法,一种隐式写法。1、在实体类或DTO类添加无参构造方法,如下。1、序列化对象的时候出错了。原创 2022-11-14 12:55:02 · 1524 阅读 · 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 · 1725 阅读 · 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 · 325 阅读 · 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 · 1617 阅读 · 0 评论 -
分布式缓存RedisTemplate取不到数据的问题
1、首先检查redis的服务数据源配置是否一致。2、确认value是否存进去,中间是否有删除操作,过期时间3、检查key是否一致。这个特别得注意,存的一方和取的一方编码是否一致。4、存的方式和取的方式是否一致。key的类型是否一致...原创 2021-11-25 14:43:19 · 1546 阅读 · 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 · 1328 阅读 · 0 评论 -
redisTemplate自定义序列化配置,更改其默认序列化器。以及序列化反序列化注意问题
1、最好使用 @Resource 注入,注入的 RedisTemplate 类型、泛型和写入时的 RedisTemplate 类型保持一致,否则可能会出现获取不到value的问题。2、redis 反序列化时所用的dto属性必须全包含序列化时的dto全属性,反序列化所用的dto可以增加属性,但不能删除修改属性,否则会报错找不到对应属性。不推荐redis直接序列化是因为对dto所在的服务、包都有要求,在其他服务中即使同名同属性也无法反序列化,除非使用的还是原来包下的dto才可以,不够灵活。原创 2021-10-23 10:49:51 · 4403 阅读 · 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 · 13457 阅读 · 0 评论