redis客户端连接数量_实战解析无所不知的Redis拓展应用——Info,进阶学习,无所不能...

前言

学习是一个持续的过程。像咱们一直在更新的Redis学习内容,由基础结构,到原理应用,再到集群搭建,了解的够充分了,咱们接着又介绍Redis拓展应用,将知识面拓宽,毕竟技术都是相通的,只有灵活运用,才能发挥出最大作用。

好了,接着今天的学习更新,拓宽Redis应用。

拓展 2:无所不知 —— Info 指令

在使用 Redis 时,时常会遇到很多问题需要诊断,在诊断之前需要了解 Redis 的运行状 态,通过强大的 Info 指令,你可以清晰地知道 Redis 内部一系列运行参数。

Info 指令显示的信息非常繁多,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是:

  • ​1、Server 服务器运行的环境参数
  • 2、Clients 客户端相关信息
  • 3、Memory 服务器运行内存统计数据
  • 4、Persistence 持久化信息
  • 5、Stats 通用统计数据
  • 6、Replication 主从复制相关信息
  • 7、CPU CPU 使用情况
  • 8、Cluster 集群信息
  • 9、KeySpace 键值对统计数量信息

​Info 可以一次性获取所有的信息,也可以按块取信息。

# 获取所有信息> info# 获取内存相关信息> info memory# 获取复制相关信息> info replication

考虑到参数非常繁多,一一说明工作量巨大,下面我只挑一些关键性的、非常实用和最常用的参数进行详细讲解。

Redis 每秒执行多少次指令?

7f90f5de48f0e7b87e793574e2adddec.png

这个信息在 Stats 块里,可以通过 info stats 看到。

# ops_per_sec: operations per second,也就是每秒操作数> redis-cli info stats |grep opsinstantaneous_ops_per_sec:789

以上,表示 ops 是 789,也就是所有客户端每秒会发送 789 条指令到服务器执行。极限情况下,Redis 可以每秒执行 10w 次指令,CPU 几乎完全榨干。如果 qps 过高,可以考虑通过 monitor 指令快速观察一下究竟是哪些 key 访问比较频繁,从而在相应的业务上进行优化,以减少 IO 次数。monitor 指令会瞬间吐出来巨量的指令文本,所以一般在执行monitor 后立即 ctrl+c 中断输出。

> redis-cli monitor

Redis 连接了多少客户端?

这个信息在 Clients 块里,可以通过 info clients 看到。

> redis-cli info clients# Clientsconnected_clients:124 # 这个就是正在连接的客户端数量client_longest_output_list:0client_biggest_input_buf:0blocked_clients:0

这个信息也是比较有用的,通过观察这个数量可以确定是否存在意料之外的连接。如果发现这个数量不对劲,接着就可以使用 client list 指令列出所有的客户端链接地址来确定源头。

关于客户端的数量还有个重要的参数需要观察,那就是 rejected_connections,它表示因为超出最大连接数限制而被拒绝的客户端连接次数,如果这个数字很大,意味着服务器的最大连接数设置的过低需要调整 maxclients 参数。

> redis-cli info stats |grep rejectrejected_connections:0

Redis 内存占用多大 ?

10e7678b345b6ccaade8f0bbdc0aab2f.png

这个信息在 Memory 块里,可以通过 info memory 看到。

> redis-cli info memory | grep used | grep humanused_memory_human:827.46K # 内存分配器 (jemalloc) 从操作系统分配的内存总量used_memory_rss_human:3.61M # 操作系统看到的内存占用 ,top 命令看到的内存used_memory_peak_human:829.41K # Redis 内存消耗的峰值used_memory_lua_human:37.00K # lua 脚本引擎占用的内存大小

如果单个 Redis 内存占用过大,并且在业务上没有太多压缩的空间的话,可以考虑集群化了。

复制积压缓冲区多大?

这个信息在 Replication 块里,可以通过 info replication 看到。

> redis-cli info replication |grep backlogrepl_backlog_active:0repl_backlog_size:1048576 # 这个就是积压缓冲区大小repl_backlog_first_byte_offset:0repl_backlog_histlen:0

复制积压缓冲区大小非常重要,它严重影响到主从复制的效率。当从库因为网络原因临时断开了主库的复制,然后网络恢复了,又重新连上的时候,这段断开的时间内发生在 master 上的修改操作指令都会放在积压缓冲区中,这样从库可以通过积压缓冲区恢复中断的主从同步过程。

积压缓冲区是环形的,后来的指令会覆盖掉前面的内容。如果从库断开的时间过长,或者缓冲区的大小设置的太小,都会导致从库无法快速恢复中断的主从同步过程,因为中间的修改指令被覆盖掉了。这时候从库就会进行全量同步模式,非常耗费 CPU 和网络资源。

如果有多个从库复制,积压缓冲区是共享的,它不会因为从库过多而线性增长。如果实例的修改指令请求很频繁,那就把积压缓冲区调大一些,几十个 M 大小差不多了,如果很闲,那就设置为几个 M。

> redis-cli info stats | grep syncsync_full:0sync_partial_ok:0sync_partial_err:0 # 半同步失败次数

通过查看 sync_partial_err 变量的次数来决定是否需要扩大积压缓冲区,它表示主从半同步复制失败的次数。

拓展 3:拾遗漏补 —— 再谈分布式锁

​在之前,我们细致讲解了分布式锁的原理,它的使用非常简单,一条指令就可以完成 加锁操作。不过在集群环境下,这种方式是有缺陷的,它不是绝对安全的。

比如在 Sentinel 集群中,主节点挂掉时,从节点会取而代之,客户端上却并没有明显感 知。原先第一个客户端在主节点中申请成功了一把锁,但是这把锁还没有来得及同步到从节点,主节点突然挂掉了。然后从节点变成了主节点,这个新的节点内部没有这个锁,所以当另一个客户端过来请求加锁时,立即就批准了。这样就会导致系统中同样一把锁被两个客户端同时持有,不安全性由此产生。

0efff99fe832542aa6e201cd0a891995.png

​不过这种不安全也仅仅是在主从发生 failover 的情况下才会产生,而且持续时间极短, 业务系统多数情况下可以容忍。

Redlock 算法

为了解决这个问题,Antirez 发明了 Redlock 算法,它的流程比较复杂,不过已经有了很多开源的 library 做了良好的封装,用户可以拿来即用,比如 redlock-py。

import redlockaddrs = [{ "host": "localhost", "port": 6379, "db": 0}, { "host": "localhost", "port": 6479, "db": 0}, {  "host": "localhost", "port": 6579, "db": 0}]dlm = redlock.Redlock(addrs)success = dlm.lock("user-lck-laoqian", 5000)if success: print 'lock success' dlm.unlock('user-lck-laoqian')else: print 'lock failed'

​为了使用 Redlock,需要提供多个 Redis 实例,这些实例之前相互独立没有主从关系。 同很多分布式算法一样,redlock 也使用「大多数机制」。

加锁时,它会向过半节点发送 set(key, value, nx=True, ex=xxx) 指令,只要过半节点 set 成功,那就认为加锁成功。释放锁时,需要向所有节点发送 del 指令。不过 Redlock 算法还 需要考虑出错重试、时钟漂移等很多细节问题,同时因为 Redlock 需要向多个节点进行读写,意味着相比单实例 Redis 性能会下降一些。

Redlock 使用场景

如果你很在乎高可用性,希望挂了一台 redis 完全不受影响,那就应该考虑 redlock。不过代价也是有的,需要更多的 redis 实例,性能也下降了,代码上还需要引入额外的library,运维上也需要特殊对待,这些都是需要考虑的成本,使用前请再三斟酌。

今天的Redis拓展应用就先到这里吧,希望朋友们都有所收获啊~~~

喜欢请多多点赞评论分享,让更多的人看到获益,关注小编,后续小编会带来更丰富的学习内容更新,希望能帮到大家更好的学习~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Excle数据透视】如何用含有单元格的数据来创建数据透视

取消合并单元格,填充相同内容项,然后创建数据透视表. 如下图:需要使用数据创建数据透视表 步骤一 开始→格式刷,然后对单元格区域G2:G15使用格式刷功能,保留合并单元格格式 步骤二 选中A2:A18区…

css 超出文字头尾相接滚动_前端的一些雕虫小技,从100%和滚动条说起

1、100%和滚动条当我们在css中把html和body同时设为100%时,会出现滚动条html,body {width: 100%;height: 100%;}原因是html和body之间有8px的margin,这个margin怎么来的呢,我们在chrome中用F12看一下这个8px的margin来自于user agent stylesh…

小学生都能看懂的FFT!!!

小学生都能看懂的FFT!!! 前言 在创新实践中心偷偷看了一天FFT资料后,我终于看懂了一点。为了给大家提供一份简单易懂的学习资料,同时也方便自己以后复习,我决定动手写这份学习笔记。 食用指南: …

ComboBox自动补全小技巧

网上看的自动补全实在是太麻烦,有时候还用到了第三方控件,但是现在我的需求是这样的 有一个Person类,其中有Code、Name两个属性 Person需要绑定到ComboBox中,在ComboBox中输入Code时,即自动补全相应的Name 想了半天&am…

可做fft分析吗_小吃店生意好做吗,小吃业行情分析

现在创业已经成为一种风尚,不少创业者都打算开一家小吃店,现在小吃店的生意好做吗?开小吃店有没有前景呢?中国人一直以来都非常看重“吃”,民以食为天,食物就是中国人生存的灵魂所在。基本上每个城市、每个…

ase加密放linux报错_Linux应用安装有福啦!和苹果Mac一样方便的单文件安装

自从用了苹果macbook,和windows基本上就再见了,苹果系统的稳定性太出色了,使用完合上盖子放十天半个月的没一点问题,一叫就醒,一醒就能接着工作,windows系统不行,要么睡了叫不醒,要么…

拼图展示

转载于:https://www.cnblogs.com/zm1994/p/8033332.html

c++全局监听ctrl s_号称史上最全!134个CAD快捷键强烈来袭,难道你只知道Ctrl+C?...

想要提高CAD绘图速率你就必须熟记CAD快捷键,小编盘点了134个CAD个快捷键,号称史上最全,一起来看看吧。一、常用字母键CO:复制MI:镜像AR:阵列O:偏移RO:旋转M:移动E&#x…

51nod 1623 完美消除(数位DP)

首先考虑一下给一个数如何求它需要多少次操作。 显然用一个单调栈就可以完成:塞入栈中,将比它大的所有数都弹出,如果栈中没有当前数,答案1。 因为数的范围只有0~9,所以我们可以用一个二进制数来模拟这个栈,…

代码 拉取_Git 利用 Webhooks 实现代码的自动拉取

WebHook 简介WebHook 功能是帮助用户 push 代码后,自动回调一个您设定的 http 地址。 这是一个通用的解决方案,用户可以自己根据不同的需求,来编写自己的脚本程序。环境服务器:ubuntuphp:7.2.28本文以拉取码云&#xf…

navicat连接mysql报10061错

可能原因:mysql服务未启动 解决办法:进入到计算机管理,找到服务,然后找到mysql服务,并启动该服务 转载于:https://www.cnblogs.com/mengyinianhua/p/8041201.html

长牙顺序

20个乳牙宝宝的诞生是有顺序的,虽然不一定一成不变,但是也可以作为参照的依据。 1.下乳中切牙 2.上乳中切牙 3.上乳侧切牙 4.下乳侧切牙 5.下第一乳磨牙 6.上第一乳磨牙 7.下乳尖牙 8.上乳尖牙 9.下第二乳磨牙 10.上第二乳磨牙 5~10个月&…

python天蝎座-day1笔记

一、接口测试即功能测试 最常见: get post 二、jmeter参数化有三种方法: 1、jmeter-选项-函数助手对话框-random-输入最小值和最大值,生成-将生成的函数字符串赋值到需要函数化的参数 2、添加配置元件:CSV Data Set Config&#x…

MYSQL高可用-Percona XtraDB Cluster

简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1).同步复制,事务要么在所有节点提交或不提交。 2).多主复制,可以在任意节点进行写操作。 3).在从服务器上并行应用事件…

python 矩阵点乘_Day276:普通乘积、矩阵点乘、克罗内克积

1、普通矩阵乘法(matmul product)假设矩阵A大小是M*N,矩阵B大小是N*P,CAB这里选取一个例子这里的矩阵乘法要求相乘的两个矩阵一个的行数得等于另一个的列数,否则,无法进行乘机运算。2、矩阵点乘(hadamard product)矩阵点乘&#x…

随机排列_图片视频特效一键生成,27 种特效可随机排列组合!

酷友们,大家好!相信很多酷友喜欢刷抖音,抖音视频中有很多特效也很酷。其实这些特效称作故障艺术(Glitch Art),就是利用事物形成的故障,进行艺术加工,使这种故障缺陷反而成为一种艺术品,具有特殊…

JMter随记

线程组( Threads (Users))理解:一个虚拟用户组,线程组内线程数量在运行过程中不会发生改变。 注意事项:线程间变量相互独立。 一个测试计划内可以包含多个线程组。 可定义内容: 取样…

OSPF协议概述(一)

1. 根据来源不同,路由表中的路由通常可以分为以下三类: 链路层协议发现的路由(也称为接口路由或直连路由)。 由网络管理员手工配置的静态路由 动态路由协议发现的路由。(RIP,OSPF,IS-IS) 2. 距离矢量算法和…

深度工作:充分使用每一份脑力

浮躁已经成了普遍的社会现象。判断一个人是否浮躁非常容易,看他一天主动拿起手机的次数就可以了。据TED的演讲者说,这个值一般是50次,除了8小时的睡觉之外,基本上每20分钟就要去翻翻手机。 你会去用手机做什么?看微信&…

Silverlight 2.5D RPG游戏技巧与特效处理:(七)动画特写

Silverlight中的HLSL不仅适用于场景与动画渲染,对于游戏中的角色,我们同样可以利用它制作动画特写。较常见的比如角色传送时的淡入淡出、扭曲变形、幻化呈现等切换动画,当然还有例如角色被DeBuff时所表现出来的放大缩小以及虚弱时的不规则体形…