cache
新手路上的程序员
这个作者很懒,什么都没留下…
展开
-
Redis 笔记十二 Redisson分布式锁的使用
Redisson分布式锁的实现原理加锁机制 如果该客户端面对的是一个redis cluster集群,他首先会根据hash节点选择一台机器。发送lua脚本到redis服务器上,脚本如下 "if (redis.call('exists',KEYS[1])==0) then "+ --看有没有锁 "redis.call('hset',KEYS[1],ARGV[2],1) ; "+ --无锁 加锁 "redis.call('pexpire',KEYS[1],ARGV[1]) ; "+ "return nil; e原创 2020-08-05 14:08:45 · 663 阅读 · 0 评论 -
Redis 笔记十一 官方cluster分区
Redis3.0之后,Redis官方提供了完整的集群解决方案。 方案采用去中心化的方式,包括:sharding(分区)、replication(复制)、failover(故障转移)。 称为RedisCluster。 Redis5.0前采用redis-trib进行集群的创建和管理,需要ruby支持 Redis5.0可以直接使用Redis-cli进行集群的创建和管理部署架构 去中心化 RedisCluster由多个Redis节点组构成,是一个P2P无中心节点的集群架构,依靠Gossip协议传播原创 2020-08-01 12:04:14 · 193 阅读 · 0 评论 -
Redis 笔记十 一致性hash
一致性hash 基本概念 普通hash是对主机数量取模,而一致性hash是对2^32(4 294 967 296)取模。我们把2^32想象成一个圆,就像钟表一样,钟表的圆可以理解成由60个点组成的圆,而此处我们把这个圆想象成由2^32个点组成的圆,示意图如下: 圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、5、6……直到2^32-1,也就是说0点左侧的第一个点代表2^32-1 。我们把这个由2的32次方个点组成的圆环称为hash环。假设我们有3台缓存服务器,服务器A、服务器B、服原创 2020-08-01 11:44:39 · 184 阅读 · 0 评论 -
Redis 笔记九 哨兵模式
部署方案执行流程 启动并初始化Sentinel Sentinel是一个特殊的Redis服务器 不会进行持久化 Sentinel实例启动后 每个Sentinel会创建2个连向主服务器的网络连接 命令连接:用于向主服务器发送命令,并接收响应; 订阅连接:用于订阅主服务器的—sentinel—:hello频道。 获取主服务器信息 Sentinel默认每10s一次,向被监控的主服务器发送info命令,获取主服务器和其下属从服务器的信息。获取从服务器信息 当Sentinel发现主服务器有新.原创 2020-08-01 11:34:03 · 273 阅读 · 0 评论 -
Redis 笔记八 主从复制
原理与实现 复制流程 保存主节点信息 当客户端向从服务器发送slaveof(replicaof) 主机地址(127.0.0.1) 端口(6379)时:从服务器将主机ip(127.0.0.1)和端口(6379)保存到redisServer的masterhost和masterport中。 Struct redisServer{ char *masterhost;//主服务器ip int masterport;//主服务器端口 } ; 从服务器将向发送SLAVEOF命令的客户端返回原创 2020-08-01 11:21:17 · 144 阅读 · 0 评论 -
Redis 笔记七 监视器
Redis客户端通过执行MONITOR命令可以将自己变为一个监视器,实时地接受并打印出服务器当前处理的命令请求的相关信息。 此时,当其他客户端向服务器发送一条命令请求时,服务器除了会处理这条命令请求之外,还会将这条 命令请求的信息发送给所有监视器 实现监视器 redisServer 维护一个 monitors 的链表,记录自己的监视器,每次收到 MONITOR 命令之后,将客户端追加到链表尾。 void monitorCommand(redisClient *c) { /* ignore M原创 2020-07-31 23:25:58 · 170 阅读 · 0 评论 -
Redis 笔记六 慢查询日志
慢查询设置 在redis.conf中可以配置和慢查询日志相关的选项: #执行时间超过多少微秒的命令请求会被记录到日志上 0 :全记录 <0 不记录 slowlog-log-slower-than 10000 #slowlog-max-len 存储慢查询日志条数 slowlog-max-len 128 Redis使用列表存储慢查询日志,采用队列方式(FIFO) 慢查询记录的保存 在redisServer中保存和慢查询日志相关的信息 struct redisServer { .原创 2020-07-31 23:21:04 · 188 阅读 · 0 评论 -
Redis 笔记五 发布订阅
发布订阅的机制 订阅某个频道或模式: 客户端(client): 属性为pubsub_channels,该属性表明了该客户端订阅的所有频道 属性为pubsub_patterns,该属性表示该客户端订阅的所有模式 服务器端(RedisServer): 属性为pubsub_channels,该服务器端中的所有频道以及订阅了这个频道的客户端 属性为pubsub_patterns,该服务器端中的所有模式和订阅了这些模式的客户端 typedef struct redisClient { ... d原创 2020-07-31 23:00:14 · 80 阅读 · 0 评论 -
Redis 笔记四 AOF重写、触发方式、混合持久化
AOF重写Redis可以在 AOF体积变得过大时,自动地在后台(Fork子进程)对 AOF进行重写。重写后的新 AOF文件包含了恢复当前数据集所需的最小命令集合。 所谓的“重写”其实是一个有歧义的词语, 实际上, AOF 重写并不需要对原有的 AOF 文件进行任何写入和读取, 它针对的是数据库中键的当前值。 Redis 不希望 AOF 重写造成服务器无法处理请求, 所以 Redis 决定将 AOF 重写程序放到(后台)子进 程里执行, 这样处理的最大好处是: 1、子进程进行 AOF 重写期间,主进程可以继.原创 2020-07-31 22:53:05 · 1685 阅读 · 0 评论 -
Redis 笔记三 RDB执行流程
RDB执行流程(原理) 1. Redis父进程首先判断:当前是否在执行save,或bgsave/bgrewriteaof(aof文件重写命令)的子进程,如果在执行则bgsave命令直接返回。 2. 父进程执行fork(调用OS函数复制主进程)操作创建子进程,这个复制过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令。 3. 父进程fork后,bgsave命令返回”Background saving started”信息并不再阻塞父进程,并可以响应其他命令。 4. 子进程创建RDB文件,原创 2020-07-31 22:25:24 · 1948 阅读 · 0 评论 -
Redis 第一篇
这一篇主要讲一下关于redis的一些东西,个人习惯先上代码 然后再讲一些redis的东西 maven依赖: 因为在写redis的时候有两个版本,一个是用原生的方式去写的,第二个就是用springboot帮我们集成的 先说说第一个吧 redis.clients jedis --> org.springframework.boot原创 2018-01-12 17:54:17 · 261 阅读 · 2 评论 -
Redis 第二篇
第一篇说了一下实战应该怎么去写代码,这一章就稍微说一下理论方面的东西。redis是no-sql数据库,是内存数据库。 一:redis中存储的数据类型: 1.String 可以理解为map key和value都是字符串类型 这也是我们最常用的类型 如何就存储我就不介绍了,说一些特殊的,当我们设置String类型的key以nx的形式设置时(上一篇就最原始的方法写的时候就有注释)一般的key,原创 2018-01-13 22:17:10 · 191 阅读 · 0 评论