Redis专题
文章平均质量分 91
分布式中间件之redis
胡尚
只要学不死就往死里学
展开
-
redis持久化机制、主从哨兵架构原理
混合模式结合了rdb和aof两种文件的优点,在触发aof文件重写时,此时会把当前内存中的数据生成二进制文件的格式存储在appendonly.aof文件中,之后还是以之前aof文件存储的格式存储。StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。aof文件的重写其实就是结合当前内存中的数据生成命令,然后保存在appendonly.aof文件中。持久化的文件的文件名与文件存储路径的配置在redis.conf文件中是下面的配置。原创 2023-03-21 22:02:06 · 487 阅读 · 1 评论 -
Redis五种核心数据结构的基本使用与应用场景
相比较于Set有排序的功能,一般适用于排名/热搜。相比string操作消耗内存与cpu更小。同类数据归类整合储存,方便数据管理。相比string储存更节省空间。更方便的存储一个对象,比如。可以实现栈、队列的数据结构。原创 2023-03-21 08:54:31 · 171 阅读 · 0 评论 -
Redis Cluster集群搭建、Cluster集群扩缩容、底层原理
写操作只能在一台master节点上进行单台redis的使用内存一般不超过10G,因为内存如果太大持久化时会影响性能master宕机后,重新选举,这一段时间中整个redis集群是不可用的而Redis3.0版本开始就提供了RedisCluster的集群模式整个服务数据是分片存储在多个master节点上的,每个master中存储的数据是不一样的,各个master节点下又可以加多个从节点,这样就组成了一个一个的小集群,多个小集群就组成了整个Cluster集群。原创 2023-03-22 23:30:10 · 646 阅读 · 1 评论 -
Arthas工具、GC日志、常量池
2、Full GC(Metadata GC Threshold)指这是一次full gc,括号里是gc的原因, PSYoungGen是年轻代的GC,ParOldGen是老年代的GC,Metaspace是元空间的GC。下图是jdk1,6 的情况,两个字面量会在常量池中创建,new对象还会在堆中创建,最后会创建一个hello的字符串返回给s1,但是方法区永久代中不存在当前hello字符串,则会创再创建一个对象返回给s2。如果这个字符串对象在堆中存在,但常量池中不存在则直接返回堆中的这个对象地址。原创 2023-03-19 13:52:30 · 3689 阅读 · 0 评论 -
Redis HyperLogLog底层实现和Redis 7.0特性主从复制优化
剩余的50位的数据就决定往桶中放入什么内容,从第14位开始往前数,找到第一个为1的比特位数,比如17位是1,那么就是从第14位开始往前数第3位是1,然后把这个3转换为二进制数存入桶中,相当于就是存了一个K。将原来一整大块内存拆分为了很多小块内存(Block),使用链表的结构将多个block连接起来,每个block中还维护了一个变量refcount用来表示从库引用计数,各个从库的复制缓冲区都是读取的一块内存,只是移动指针表示各个从库读取到了哪一个位置。它是有误差的,误差在0.81%。,不是采用的算术平均数。原创 2023-03-28 20:36:54 · 976 阅读 · 0 评论 -
Redis分布式锁、Redisson原理
方法加锁,但是只会有一个线程加锁成功,如果线程1加锁成功了那么就会另外开启一个线程,默认每隔10s去检查锁是否还存在,如果还存在则重新设置锁过期时间为30秒。如果加锁成功是返回null,如果加锁没成功是返回的锁过期时间,所以这里接下来就是一个while(true)死循环,不断尝试获取锁。核心思想是首先等一段时间,延迟执行TimerTask类的run()方法,等待的时间是key过期时间的三分之一,默认是10s。方法没有加锁成功,那么返回的是这个锁的过期时间,那么接下来也就回到了加锁部分的第一张图中了。原创 2023-03-25 01:33:37 · 679 阅读 · 0 评论 -
Redis底层核心数据结构与Redis6.0新特性
在移动数据过程中如果客户端进行了更新操作,Redis会操作两个dictht,先去老数组ht[0]中找,如果没有找到就直接去新数组ht[1]中操作,如果老数组找到了就是在老数组中去操作,同时会把这个hash桶中的数据全都移动到新数组中去。中的level记录的是最高的层高数,因为索引遍历时是从最高的那一层开始往下找的,这个层高是通过一个随机函数生成的,越高的层数出现的概率越低。Redis中所有的key都是String类型的,底层是使用的SDS类型,没有使用c语言的字符数组去实现字符串。原创 2023-03-27 16:28:05 · 523 阅读 · 0 评论 -
Redis Stream队列与多线程模型
Redis5.0版本新出stream数据结构,是实现消息队列的功能的。Redis Stream 的结构如上图所示,每一个Stream都有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用xadd指令追加消息时创建的。每个 Stream 都可以挂多个消费组,每个消费组会有个游标last_delivered_id在 Stream 数组之上往前移动,表示当前消费组已经消费到哪条消息了。每个消费组都有原创 2023-03-28 15:49:20 · 852 阅读 · 0 评论 -
一线大厂高并发Redis缓存架构
的问题,我们都是请求–>web服务–>redis,如果并发量很大,多个web服务的请求到发到了一个redis节点上,redis处理不过来一秒十几万或更多的请求,那么redis就可能宕机或者是用户线程一直等待redis响应,此时并发很高,web服务中线程得不到释放,又不断有新的请求进来,又导致微服务可能宕机,进而影响到整个系统宕机。问题,热点数据过期或者是冷门数据忽然变成热点数据,这时缓存中没数据,DB中有数据,一瞬间大量的请求要查询这条数据就都落到了DB上。,锁的粒度要小,比如电商中使用锁前缀+商品id。原创 2023-03-25 21:42:07 · 1883 阅读 · 0 评论