存储-redis
2021-12-24 09:25:15 0 举报
redis简介
作者其他创作
大纲/内容
SET lock_key random_value NX PX 5000
string
blpop 阻塞弹出
list
set
延时队列,score为毫秒数
sortedSet
map
数据结构
config get/set slowlog-log-slower-than 10000 执行时间大于多少微秒的记录
config get/set slowlog-max-len 128储存多少条慢查询的记录
slowlog get N 获取慢日志
慢日志
dbsize当前数据库的key的数量
Showdown [save/nosave] 关闭
human开头:以可读格式返回
used_memory: Redis分配的内存总量
used_memory_peak:内存使用的最大值
total_system_memory:系统总内存
used_memory_lua:Lua进程使用内存
如何产生
碎片率的意义
碎片率大解决
mem_fragmentation_ratio:内存碎片率,等价于(used_memory_rss /used_memory)
INFO 查看Replication/CPU/Memory/server/clients/stats/Persistence/Cluster
子主题
config get/set 获取设置文件参数
publish发布
Subscribe订阅
watch unwatch 监控及取消
multi 开启
exec 提交
discard 回滚
事务
randomkey 返回随机key
type 存储的值的类型
ttl 查询生命周期
persist 置为永久有效
keys pattern 查询相应的key
eval 执行lua
常用命令
Value对象
Key对象
对象内存
复制积压缓冲区
AOF缓冲区
普通客户端的连接
从客服端链接
订阅客户端
客户端缓冲
缓冲内存
不由jemalloc分配,不计在used_memory
自身进程内存
Redis默认的内存分配器是jemalloc,删除数据后会被redis截留
频繁更新
大量过期键删除
原因
减小内存碎片
尽量数据对齐
redis4.0以上手动回收内存碎片
方案
内存碎片
指AOF/RDB重写时Redis创建的子进程内存消耗
子进程内存消耗
超出物理内存时:数据在内存与磁盘换入换出的一个持久化策略,管理成本高
虚拟内存
内存组成
惰性删除
定期删除
定时任务删除
volatile-lru
allkeys-lru
volatile-random
allkeys-random
volatile-ttl
noeviction
内存溢出的控制策略
内存回收策略
bgsave 子进程生成快照
save 生成快照
rdbcompression 导出的rdb文件是否压缩
dbfilename 导出来的rdb文件名
dir ./ 放置路径
快照
BGREWRITEAOF 后台进程重写AOF
appendonly no/yes 打开关闭aof功能
AOF
持久化
config set maxmemory 8GB 设置最大内存
开快照,设置45%,否95%
maxmemory-policy过期策略 noeviction
maxmemory
参数
slaveof no one 不做从改为主
slaveof IP port 指为IP的从
命令
slave发送一个 PSYNC命令给 master
初次连接到 master会触发一次 full resynchronization 全量复制
RDB生成完毕后, master将这RDB 发送给 slave,slave 会先写入本地磁盘,然后再从本地磁盘加载到内存中。
master将内存中缓存的写命令发送到 slave,slave 也会同步这些数据。
内存缓冲区(in-memory backlog)
复制偏移量(replication offset)和master run id ,
master run id系统且偏移量在内存缓冲区有效
slave跟master有网络故障,断开了连接,会自动重连,连接之后 master仅复制给 slave部分缺少的数据。
过程
Redis从2.8.18版本开始尝试支持无磁盘的复制
主从复制??
集群监控
消息通知
故障转移
配置中心
功能
每个哨兵节点每隔10s会向Master发送info replication命令,获取最新拓扑
每个哨兵每隔1s会向集群中的Master和各个Slave节点发送心跳,判断节点是否存活
每个哨兵每隔2s会向Redis中的指定频道发布其对Master节点的判断,同时每个哨兵会订阅该频道
投票,发现Master节点故障后,且超过指定数量,哨兵充当Leader进行故障转移
选举,挑选其中一个存活的Slave节点断开与Master节点的连接,并使其成为新的Master节点
然后将其他Slave节点与该新的Master节点建立联系
最后修改各个节点的redis.conf配置文件,更新主从映射关系
工作机制
redis-server.exe sentinel.conf --sentinel 启动
sentinel down-after-milliseconds mymaster 30000 多少毫秒后连接不到master认为断开
entinel parallel-syncs mymaster 1 一次性修改几个slave指向新的new master
主动切换过程
参数配置
sentinel
图示
内部使用二进制协议优化传输速度和带宽
节点的fail是通过集群中超过半数的节点检测失效时才生效
key放在CRC16(key) % 16384槽对应的机器上
Gossip 协议
设计
主从复制
哨兵模式
分片分区
核心功能
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002创建cluster:主,从(1个副本),主分的槽,主从关系。
./redis-trib.rb check 127.0.0.1:7002检测cluster状态
配置
hash 算法(扩减会大量缓存重建)
1 对2的32次方取模,从小到大首位相连形成虚拟圆环
2 对服务器的IP或主机名进行哈希,定位在环中位置。每个服务器节点顺时针到下个节点,则为该机器的数据范围。
3 对数据key哈希,定位在哪台服务器。
减少增加节点,只对变更节点到下个节点产生影响。
1 各个服务增加虚机节点。如:每个服务器名增加10个序号
2 对虚拟节点哈希后定位位置
3 数据哈希找到虚拟节点再由虚拟节点找到实际服务器ip。
数据倾斜问题(服务器数据分布不均)
一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡)
一共有2^14(16384)个槽
集群用CRC16(key) %16384 来计算属于哪个槽
每个服务节点负责哈希槽的一个子集
redis cluster 的 hash slot 算法
分布式寻址算法
Redis Cluster
redis
0 条评论
回复 删除
下一页