百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

redis主从搭建、发现阻塞、内存管理优化(四)

wptr33 2025-06-10 18:36 4 浏览

一、redis主从搭建

1、下载安装指定版本redis

$ cd /opt/web_app
$ mkdir esheng
$ cd esheng
$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz  ##下载指定版本redis
$ tar -zxvf redis-3.0.7.tar.gz
$ ln -s redis-3.0.7 redis; ##建立软连接
$ cd ./redis/
$ make ##安装redis,安装完执行将在./redis/src目录下,新增redis-cli、redis-server、redis-sentinel等命令。
$ make install ##致使此版本命令添加到linux的环境变量,例如redis-cli 与 redis-server在任何目录均可执行。
注:环境变量只能配置一个版本的,其他redis版本不行,需要用本版本绝对路径执行相关命令。

2、配置启动主节点

1、修改redis.conf配置文件

$ vi redis/redis.conf
$ daemonize yes
$ port 7000
$ requirepass password ##当前服务密码
$ logfile "redis7000.log"
$ dbfilename dump-redis7000.rdb
$ dir ./ ##日志,以及持久化数据路径可不修改

2、启动主节点

$ redis-server redis.conf
##验证是否启动成功
$ redis-cli -p 7000 -a kcpt ping
PONG

3、配置启动从节点

1、修改redis.conf配置文件

$ vi redis/redis.conf
$ daemonize yes
$ port 7000
$ requirepass password ##当前服务密码
$ masterauth password ##主节点密码
$ slaveof 172.17.47.176 7000
$ logfile "redis7000.log"
$ dbfilename dump-redis7000.rdb
$ dir ./ ##日志,以及持久化数据路径可不修改

2、启动从节点

$ redis-server redis.conf
##验证是否启动成功
$ redis-cli -p 7000 -a kcpt ping
PONG

4、确认主从关系

1、主节点视角

$ redis-cli -p 7000 -a kcpt info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.47.177,port=7000,state=online,offset=255,lag=0
...

2、从节点视角

$ redis-cli -p 7000 -a kcpt info replication
# Replication
role:slave
master_host:172.17.47.176
master_port:7000
master_link_status:up
...


二、redis噩梦、阻塞

1、发现阻塞

内在阻塞原因:不合理使用API或数据结构,CPU饱和,持久化阻塞。

外在阻塞原因:CPU竞争,内存交换。网络问题

检测:通过java的logback或者log4j检测redis阻塞异常,如果redis集群,需要打印出redis的ip与端口。

2、内在原因

1、API使用不合理:尽量不使用时间复杂度O(n)的命令,例如:getall 、hgetall

发现慢查询:slowlog get n 获取最近n条慢查询命令,修复低时间复杂度命令,如getall改为hmget ,禁止keys、sort命令。大对象数据分解为小对象。

发现大对象:redis-cli --bigkeys 把历史扫描过的最大对象统计出来。

2、cpu饱和

top:查看cpu使用率,

redis-cli --stat:获取当前redis使用情况

info commandstats:分析命令执行耗时,查看不合理命令耗时

3、持久化阻塞

fork阻塞、AOF刷盘阻塞、HugePage写操作阻塞。


三、内存管理优化

1、内存消耗

1、内存使用统计:info memory

·

2、内存管理

redis主要通过控制内存上限与回收策略实现内存管理。

回收内存策略:删除到达过期时间的键对象,内存使用达到maxmemory上限时触发内存溢出控制策略。

控制内存溢出策略:默认策略,不删除任何数据,拒绝所有写入操作,并返回客户端错误信息,此时redis只响应读操作。

避免过频繁的内存回收策略

3、内存优化

redis存储的所有值对象在内部定义为redisObject结构体

缩减键值的长度:

key长度:user:userId 简化为 u:userId

value长度:把业务对象序列化为二进制数组放入redis,业务对象中去除无用字段。

共享对象池:value值为整数,同一个redisObject对应多个key引用

字符串优化:

编码优化:

控制键数量:根据建规模在客户端通过分组映射到一组hash对象中,hash的field作为记录原始key字符串。

相关推荐

开发者必看的八大Material Design开源项目

MaterialDesign是介于拟物和扁平之间的一种设计风格,自从它发布以来,便引起了很多开发者的关注,在这里小编介绍在Android开发者当中里最受青睐的八个MaterialDesign开源项...

另类插这么可爱,一定是…(另类t恤)

IT之家(www.ithome.com):另类插图:这么可爱,一定是…OSXMavericks和Yosemite打破了苹果对Mac操作系统传统的命名方式,使用加州的某些标志性景点来替换猫...

Android常用ADB命令(安卓adb工具是什么)

杀死应用①根据包名获取APP的PIDadbshellps|grep应用包名②执行kill命令...

微软Mac版PowerPoint测试Reading Order Pane功能

IT之家5月20日消息,微软公司昨日(5月19日)发布博文,邀请Microsoft365Insiders成员,测试macOS新版PowerPoint演示文稿应用,重点引入...

Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍

前言不同于iOS,Xamarin在VisualStudio中针对Android,可以直接设计使用者界面.在本篇教学文章中,笔者会针对Android的专案目录结构以及基本控制项进行介绍,包...

用云存储30分钟快速搭建APP,你信吗?

背景不管你承认与否,移动互联的时代已经到来,这是一个移动互联的时代,手机已经是当今世界上引领潮流的趋势,大型的全球化企业和中小企业都把APP程序开发纳入到他们的企业发展策略当中。但随着手机APP上传的...

谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果

Pine发自凹非寺量子位|公众号QbitAI当你拍照片时,“模特不好好配合”怎么办?...

iOS文本编辑控件UITextField和UITextVie

记录一个菜鸟的IOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!细心的朋友可能已经注意到了,IOS学习之旅系列教程在本篇公众号的文章中,封面已经换成美女图片了,...

Android入门图文教程集锦(android 入门教程)

Android入门视频教程集锦AndroidStudio错误gradientandroid:endXattributenotfound...

如何使用Android自定义复合视图(如何使用android自定义复合视图)

在最近的一个客户应用中,我遇到了一个需求,根据选定的值来生成指定数量的编辑框字段,这样用户可以输入人物信息。最初我的想法是把这些逻辑放到Fragment中,只是根据选中值的变化来向线性布局容器中增加编...

原生安卓开发app的框架frida常用关键代码定位

前言有时候可能会对APP进行字符串加密等操作,这样的话你的变量名等一些都被混淆了,看代码就可能无从下手...

教程10 | 三分钟搞定一个智能输入法程序

一案例描述1、考核知识点网格布局线性布局样式和主题Toast2、练习目标掌握网格布局的使用掌握Toast的使用掌握线性布局的使用...

(Android 8.1) 功能与新特性(android的功能)

和你一起终身学习,这里是程序员AndroidAndroid8.1(API级别27)为用户和开发人员引入了各种新特性和功能。本文档重点介绍了开发人员的新功能。通过本章阅读,您将获取到以下内容:Andr...

怎样设置EditText内部文字被锁定不可删除和修改

在做项目的时候,我曾经遇到过这样的要求,就是跟百度贴吧客户端上的一样,在回复帖子的时候,在EditText中显示回复人的名字,而且这个名字不可以修改和删除,说白了就是不可操作,只能在后面输入内容。在E...

如何阻止 Android 活动启动时 EditText 获得焦点

技术背景在Android开发中,当活动启动时,EditText有时会自动获得焦点并弹出虚拟键盘,这可能不是用户期望的行为。为了提升用户体验,我们需要阻止...