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
作用
提高客户端的效率,减少网络时间的消耗
流水线的作用
注意:
redis命令是微秒级别
pipeline每次条数要控制(网络)
pipeline-Jedis使用
maven依赖
不使用pipeline,1w hset -> 50s
使用pipeline,1w hset -> 0.7s
使用建议:
注意每次pipeline携带数据量
pipeline每次只能作用在一个redis节点上
M操作与pipeline区别
角色:发布者 订阅者 频道
订阅者可以订阅多频道,但无法接收到订阅前的消息
命令
subscribe channel [channel ...] 订阅一个或多个频道的信息
publish channel message 信息发送到指定的频道
unsubscribe [channel [channel ...]] 指退订给定频道
Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列
消息队列 要抢 比如红包
发布订阅 都有 比如公告
作用:减少内存的方案
命令
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时的偏移量,可能有较大耗时
位图不是绝对好
作用
极小空间完成独立数据统计,用来做基数统计(不重复元素统计)的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的,本质还是字符串
命令
pfadd key element [element ...] 添加指定元素到 HyperLogLog 中
pfcount key [key ...] 返回给定 HyperLogLog 的基数估算值
pfmerge destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog
使用经验
是否能容忍错误,基数估计就是在误差可接受的范围内,快速计算基数。
是否需要单挑数据
作用
用于存储经纬度,计算两地距离,范围计算等, 其实zset类型实现
命令
geoadd key 经度longitude 纬度latitude 城市member 添加地理位置信息
geopos key member 获取地理位置信息
geodist key member1 member2[unit] 获取两地距离,单位m、km、mi(英里)、ft(尺)
关于Redis中怎么实现高可用分布式问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。