千家信息网

Redis中怎么实现高可用分布式

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,Redis中怎么实现高可用分布式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。慢查询作用将查询时间超过一定限制的语句记录到日志中,找
千家信息网最后更新 2025年02月06日Redis中怎么实现高可用分布式

Redis中怎么实现高可用分布式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

慢查询

作用

将查询时间超过一定限制的语句记录到日志中,找到系统中瓶颈的命令

客户端请求的生命周期

两点说明:

1.慢查询发生在第三阶段,判断依据是执行时长

2.客户端超时不一定慢查询(四个步骤都可能),但慢查询是客户端超时的一个可能因素

两个配置

config get slowlog-max-len=128 先进先出队列 通常设置1000,固定长度、保存在内存中

config get slowlog-log-slower-than=10000 慢查询阈值,单位微秒,即10ms,通常设置1ms

=0即记录所有命令(查看命令所用时间),<0即不记录任何命令

慢查询命令

slowlog get [n] 获取慢查询队列

slowlog len 获取慢查询队列长度 队列里面有多少慢查询

slowlog reset 清空慢查询队列

定期持久化慢查询

动态配置

config set slowlog-max-len 1000

config set slowlog-log-slower-than 1000

4.2pipeline 流水线

作用

提高客户端的效率,减少网络时间的消耗

流水线的作用

注意:

redis命令是微秒级别

pipeline每次条数要控制(网络)

pipeline-Jedis使用

maven依赖

不使用pipeline,1w hset -> 50s

使用pipeline,1w hset -> 0.7s

使用建议:

注意每次pipeline携带数据量

pipeline每次只能作用在一个redis节点上

M操作与pipeline区别

4.3 发布订阅

角色:发布者 订阅者 频道

订阅者可以订阅多频道,但无法接收到订阅前的消息

命令

subscribe channel [channel ...] 订阅一个或多个频道的信息

publish channel message 信息发送到指定的频道

unsubscribe [channel [channel ...]] 指退订给定频道

Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列

消息队列 要抢 比如红包

发布订阅 都有 比如公告

4.4 Bitmap 位图

作用:减少内存的方案

命令

setbit key offset value 设置指定位置偏移量为0/1

getbit key offset 获取指定位的值

bitcount key [start end] 获取指定范围值为1的个数,不指定则为全部

bitop op destkey key [key...] 做多个Bitmap的and(交集)、or(并集)、not(非)、xor(异或),并将结果保存在destkey

bitpos key targetBit [start] [end] 计算范围内,偏移量等于targetBit的,第一个位置,不指定范围则为全部

实战:独立用户统计

1亿用户,5千五独立,使用set和Bitmap区别

只有10万独立用户

使用经验

type=string,最大512MB

注意setbit时的偏移量,可能有较大耗时

位图不是绝对好

4.5 HyperLogLog

作用

极小空间完成独立数据统计,用来做基数统计(不重复元素统计)的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的,本质还是字符串

命令

pfadd key element [element ...] 添加指定元素到 HyperLogLog 中

pfcount key [key ...] 返回给定 HyperLogLog 的基数估算值

pfmerge destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog

使用经验

是否能容忍错误,基数估计就是在误差可接受的范围内,快速计算基数。

是否需要单挑数据

4.6 GEO 地理信息

作用

用于存储经纬度,计算两地距离,范围计算等, 其实zset类型实现

命令

geoadd key 经度longitude 纬度latitude 城市member 添加地理位置信息

geopos key member 获取地理位置信息

geodist key member1 member2[unit] 获取两地距离,单位m、km、mi(英里)、ft(尺)

关于Redis中怎么实现高可用分布式问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0