
redis
文章平均质量分 64
小甄笔记
这个作者很懒,什么都没留下…
展开
-
Redis Cluster故障转移原理
如果一个节点收到了某个节点失联的数量 (PFail Count) 已经达到了集群的大多数,就可以标记该节点为确定下线状态 (Fail),然后向整个集群广播,强迫其它节点也接收该节点已经下线的事实,并立即对该失联节点进行主从切换。当某个节点判断另一个节点主观下线后,相应的节点状态会跟随消息在集群内传播,通过Gossip消息传播,集群内节点不断收集到故障节点的下线报告。故障节点变为客观下线后,如果下线节点是持有槽的主节点则需要在它的从节点中选出一个替换它,从而保证集群的高可用。都标记某个节点是主观下线时。转载 2024-02-20 17:05:49 · 551 阅读 · 0 评论 -
Redis集群模式
Cluster模式是Redis的一种高级集群模式,它通过数据分片和分布式存储实现了负载均衡和高可用性。通过对数据的分片,Cluster模式可以突破单节点的内存限制,实现更大规模的数据存储。哨兵节点是一种特殊的Redis节点,它会监控主节点和从节点的运行状态。当主节点发生故障时,哨兵节点会自动从从节点中选举出一个新的主节点,并通知其他从节点和客户端,实现故障转移。是Redis的一种基本集群模式,它通过将一个Redis节点(主节点)的数据复制到一个或多个其他Redis节点(从节点)来实现数据的冗余和备份。原创 2023-11-29 16:43:00 · 481 阅读 · 0 评论 -
Redis内存满了会宕机吗
需要注意的是,当 Redis 内存数据满了时,如果没有采取相应的措施处理,继续写入操作可能会导致数据丢失或异常。因此,为了确保 Redis 的正常运行,你应该密切关注内存使用情况,并根据实际需求进行配置,包括设置合理的最大内存限制、选择适当的淘汰策略和持久化策略。当数据满时,根据配置的淘汰策略,Redis 可能会自动删除一些数据来腾出空间。持久化策略: 如果 Redis 配置了持久化(如 RDB 或 AOF),当内存数据满时,Redis 可以将数据持久化到磁盘,从而腾出内存空间。原创 2023-11-19 15:38:33 · 600 阅读 · 0 评论 -
分布式锁的实现方式
实现方式:基于数据库实现,基于缓存redis实现,基于zookeeper实现原创 2021-01-26 23:06:45 · 127 阅读 · 0 评论 -
redission的缺点
redisson实现了分布式和可扩展的java数据结构,支持的数据结构有:List, Set, Map, Queue,SortedSet, ConcureentMap, Lock, AtomicLong, CountDownLatch。并且是线程安全的,底层使用Netty 4实现网络通信。和jedis相比,功能比较简单,不支持排序,事务,管道,分区等redis特性,可以认为是jedis的补充,不能替换jedis。不支持字符串存储,Redisson的实现类中只支持集合操作,不能对普通字符做操作。..原创 2021-01-21 14:48:14 · 3244 阅读 · 0 评论 -
redis集群选举机制简介
高可用性与主备切换原理redis cluster的高可用的原理,跟redis replication sentinel类似,过程如下1、判断节点宕机 如果一个节点认为另外一个节点宕机,那么就是pfail,主观宕机。如果多个节点都认为另外一个节点宕机了,那么就是fail,客观宕机,跟哨兵的原理几乎一样,pfail对应sdown,fail对应odown 。 在cluster-node-timeout内,某个节点一直没有返回pong,那么就被认为pfail,如果一个节点认为某个节点pfai原创 2021-01-19 15:49:41 · 4040 阅读 · 2 评论 -
redis list数据结构实现队列
消息队列的好处提高响应速度、解耦、稳定性(故障处理)、可扩展性、有序性、异步性redis实现消息队列方法抓取异常,封装异常对象,插入redis队列中try{ // 业务代码}catch (ServiceException e){ // 异常信息封装 VouAccess vouAccess = '封装逻辑'; // 调用redis redisSentinelProxy.Lpush(RedisKeyTypeEnum.VOUCHER_ACCESS_ERR原创 2021-01-13 18:34:05 · 664 阅读 · 1 评论 -
redis的数据结构
数据类型stringString是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。 String类型是二进制安全的(序列化和反序列化后的结果是一致的)。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512Mget <key>: 查询对应键值set <key>: 添加键值对append &原创 2020-12-31 15:05:26 · 113 阅读 · 0 评论 -
缓存数据库双写一致性问题
先写缓存,再写数据库先操作缓存,在写数据库成功之前,如果有读请求发生,可能导致旧数据入缓存,引发数据不一致可以考虑用redisson的读写锁实现先写数据库,再写缓存会出现数据库中是新数据,缓存中是旧数据的情况,所以我们需要保证 DB 和缓存的操作,能够在“同一个事务”中,从而实现最终一致性方式一:基于Lua脚本实现// 把数据库原子性操作和redis原子性操作放到同一个事物中@Transactional(propagation = Propagation.REQUIRED, r原创 2020-10-26 15:40:46 · 497 阅读 · 0 评论 -
redis缓存击穿问题
是的发生的原创 2020-10-26 11:52:17 · 174 阅读 · 1 评论 -
redis为什么快
redis是基于内存的,内存的读写速度非常快redis是单线程的,省去了很多上下文切换线程的时间因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了 关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求 Redis的数据结构并不全是简单的Key-Value,还有list,hash等复杂的结构,这些结构有可能会进行很细粒度的操作,比如.原创 2020-10-10 11:12:52 · 128 阅读 · 1 评论 -
redis集群redisKey分步不均匀问题
问题描述项目中使用了redis集群,但是生产上发现redisKey 80%都被分配到了同一个节点,导致该节点磁盘容量报警,其余节点闲置的情况问题定位项目中为了保持数据的准确性,当系统发送异常时使用了LUA脚本对本次请求的redis操作进行了批量回滚(可实现redis批量操作的原子性) LUA脚本仅支持对同一节点上的Key批量操作,所以redisKey使用了统一的前置{redisClusterPrefix:}问题原理对于客户端请求的key,根据公式HASH_SLOT=CRC16(key原创 2020-09-28 14:41:59 · 6376 阅读 · 0 评论 -
redis击穿与雪崩
缓存穿透缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。这里需要注意和缓存击穿的区别,缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞穿透解决方原创 2020-07-22 15:03:47 · 139 阅读 · 0 评论 -
Redis: pipeline基本使用
基本介绍pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令。在原生模式下, 每执行一次redis命令,都需要经过发送命令(I/O)、执行命令(内存)和返回结果(I/O))三个阶段。 其中,主要耗时在发送命令与返回结果。在pipeline模式下, 一次性执行多条命令,也只需要一次发送命令和一次返回结果。 节省了大量花费在I/O上的...原创 2020-04-29 00:20:36 · 1093 阅读 · 1 评论 -
spring整合redisson配置
配置方式redis的部署方式有单节点部署、哨兵方式部署、集群方式部署3种方式各种配置方式可以去看xsd文件:redisson-1.1.xsd<xsd:element name="single-server"> // 单节点<xsd:element name="sentinel-servers"> // 哨兵<xsd:element name=...原创 2020-04-29 00:12:10 · 8430 阅读 · 2 评论 -
LUA批量原子性操作redis
LUA命令:eval、evalsha原创 2020-04-23 19:21:12 · 1360 阅读 · 0 评论 -
redis-生成redis自增id
sequenceUtil工具类import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.support.atomic.RedisAtomicLong;import org.springframework.stereotype...原创 2019-12-04 18:14:36 · 4755 阅读 · 0 评论 -
redis事物/持久化/主从复制/集群
应用服务器的压力:CPU和内存压力,解决方式:加服务器集群数据库的压力:IO压力,解决方式:加缓存,分区/分表/分库/读写分离redis的作用:服务器端的问题:解决多个服务器之间的共享信息问题,有效避免共享数据存在多个服务器造成的数据冗余,例如:分布式下的session共享数据库端的问题:有效避免过多的访问数据库,减低IO读的操作,提升响应数据避免mybatis的弊端:一个ma...原创 2019-12-11 21:01:42 · 151 阅读 · 0 评论 -
spring之spring-data-redis集群,哨兵整合
引入jar包 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7...原创 2019-12-13 15:56:26 · 336 阅读 · 1 评论 -
redis分布式锁(乐观锁)
redis分布式锁原理:视频教程:https://edu.youkuaiyun.com/course/play/25604setEX命令:成功返回ok,失败返回nosetNX命令:成功返回1,失败返回0命令详解:https://www.runoob.com/redis/strings-setex.html场景说明:A、B线程同时通过setEX,setNX命令用同一个key去添加redis,...原创 2019-12-20 11:09:59 · 1393 阅读 · 1 评论 -
redis分布式锁(redisson)
redis分布式锁api:redisson<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.7.2</version></dependency>...原创 2020-04-11 18:00:02 · 414 阅读 · 0 评论