Redis安装、使用、主从、哨兵
1 | 原文:https: //www .jianshu.com /p/2f93bb771469 |
1.安装部署
- 安装编译环境
1 | yum install gcc patch libffi-devel python-devel zlib-devel bzip2 -devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y |
- 目录规划
1 2 3 4 5 | #redis配置文件目录:/opt/redis_cluster/redis{PORT}/conf/ #redis日志文件目录:/opt/redis_cluster/redis{PORT}/logs/ #redis数据文件目录:/opt/redis_cluster/redis{PORT}/data/ #redis pid文件目录:/opt/redis_cluster/redis{PORT}/pid/ #redis程序目录:/opt/redis |
- 创建目录
1 | mkdir -pv /opt/redis_cluster/redis {PORT}/{conf,logs,data,pid} |
- 下载并安装redis程序
1 2 3 4 5 | [root@nginx redis] # wget http://download.redis.io/releases/redis-3.2.13.tar.gz [root@nginx redis] # tar xf redis-3.2.13.tar.gz -C /opt/ [root@nginx redis] # ln -sv /opt/redis-3.2.13.tar.gz /opt/redis [root@nginx redis] # cd /opt/redis/ [root@nginx redis] # make && make install |
- 创建redis配置文件:/opt/redis_cluster/redis6379/conf/redis6379.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | ### 以守护进程模式启动 daemonize yes ### 绑定的主机地址 bind 192.168.1.92 ###关闭只能本地访问 protected-mode no ###添加认证密码 requirepass 123456 ### 监听端口 port 6379 ### 内存限制(最好是总内存的一半) maxmemory 5gb ### 超出内存之后的测率 #volatile-lru:根据LRU算法删除最老的key。 #allkeys-lru:根据LRU算法删除任何key。 #volatile-random:删除最老的key。 #allkeys->random:随机删。 #volatile-ttl:根据key的过期时间删除 #noeviction:谁也不删,没法再写 maxmemory-policy volatile-lru ### pid文件和log文件的保存地址 pidfile /opt/redis_cluster/redis6379/pid/redis6379 .pid logfile /opt/redis_cluster/redis6379/logs/redis6379 .log ### 本地数据库的目录 dir /opt/redis_cluster/redis6379/data ### 设置数据库的数量,默认数据库为0 databases 16 ###下面是持久化配置 ### 指定本地持久化文件的文件名,默认是dump.rdb dbfilename redis6379.rdb save 900 1 #900秒(15分钟)内有1个更改 save 300 10 #300秒(5分钟)内有10个更改 save 60 10000 #60秒内有10000个更改 appendonly yes #是否打开aof日志功能 appendfsync always #每1个命令,都立即同步到aof appendfsync everysec #每秒写1次 appendfsync no #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. appendfilename appendonly.aof #aof文件名 |
- 启动程序和关闭程序
1 2 3 4 5 | #启动 [root@nginx redis_cluster] # redis-server redis6379/conf/redis6379.conf #关闭 [root@nginx redis_cluster] # redis-cli -h 192.168.1.92 shutdown |
2.基本使用
- 全局命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #查看所有键值 > keys * #查看键的总数 > DBSIZE #查看键是否存在 > Exists KEY #删除键 > Del key [key …] #键过期 # Redis支持对键添加过期时间,当超过过期时间后,会自动删除键. # 通过ttl命令观察键的剩余时间 #>0: 键剩余过期时间 #-1: 键没设置过期时间 #-2: 键不存在 > Expire key seconds #键的数据类型 > Type key #查看redis使用情况 > info |
- 字符串数据类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #设置键 > set key1 value1 #获取键 > get key1 #增加删除键的值 > set key2 100 > incr key2 (integer) 101 > get key2 "101" > incrby key2 10 (integer) 111 > get key2 "111" #一次性设置多个值 > mset key3 v3 key4 v4 key5 v5 > mget key3 key4 key5 #判断键是否存在和删除键,DEL命令返回1说明键存在,返回0说明不存在 > exists key5 > del key5 #获取键类型 > type key5 #键超时,-1不超时,-2键不存在,>0还剩多少秒过期 > ttl key5 #设置键超时 > expire key5 10 #取消键超时 > persist key5 |
- 列表数据类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #向列表右侧添加数据 > rpush list1 A #向列表左侧添加数据库 > lpush list1 top1 #从列表中取范围内数据 > lrange list1 0 -1 #从列表左侧删除数据 > lpop list1 #从列表右侧删除数据 > rpop list1 |
- 哈希数据类型
1 2 3 4 5 6 7 8 9 10 11 | #指令设置hash中的多个域 > hmset user:1000 username zhangya age 27 job it #取回单个域. > hget user:1000 username #取回一系列的值 > hmget user:1000 username age job #取回所有值 > hgetall user:1000 |
- 集合数据类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #设置集合 > sadd set1 1 2 3 #获取集合 > smembers set1 #删除集合内的值 > srem set1 2 4 #取两个集合的差集 > sadd set1 1 2 3 4 > sadd set2 1 4 5 > sdiff set1 set2 1) "2" 2) "3" #取集合并集 > sinter set1 set2 1) "1" 2) "4" #取集合合集 > sunion set1 set2 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" |
3.持久化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | RDB 持久化优缺点 可以在指定的时间间隔内生成数据集的 时间点快照(point- in - time snapshot)。 优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。 缺点:会有数据丢失 dir /data/6379 dbfilename dump.rdb save 900 1 #900秒(15分钟)内有1个更改 save 300 10 #300秒(5分钟)内有10个更改 save 60 10000 #60秒内有10000个更改 AOF 持久化优缺点 记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 优点:可以最大程度保证数据不丢 缺点:日志记录量级比较大 appendonly yes #是否打开aof日志功能 appendfsync always #每1个命令,都立即同步到aof appendfsync everysec #每秒写1次 appendfsync no #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. appendfilename appendonly.aof #文件名 RDB和AOF文件同时存在时,会优先读取AOF文件。 |
4.安全认证
1 2 3 4 5 6 7 8 9 10 11 | #是否只让本地访问redis数据库 protected-mode yes |no #绑定内网地址 bind 10.0.0.51 127.0.0.1 #添加认证密码,最常用 requirepass 123456 #认证节点密码 masterauth 12345678 |
5.主从复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #每个从节点只能有一个主节点,主节点可以有多个从节点。开启复制有三种方法: 1.在配置文件中加入slaveof {masterHost} {masterPort} 随redis启动生效. 2.在redis-server启动命令后加入—slaveof {masterHost} {masterPort}生效. 3.直接使用命令:slaveof {masterHost} {masterPort}生效. #从节点断开复制命令 > slave of no one #查看主从复制状态 > Info replication #主从复制流程 1.从库发起同步请求 2.主库接收到请求,执行bgsave命令保存数据 3.主库将持久化的数据发送给从库 4.从库接收到主库的数据,先清空自己的数据 4.从库加载主库发来的数据 |
6.哨兵
- 在创建哨兵集群之前,需要先做好1主2从复制三个节点
- 创建哨兵服务存放目录,这里是在一台服务器上做的,生产需要分开服务器
1 | ] # mkdir -pv {redis26379,redis26380,redis26381}/{conf,logs,pid,data} |
- 哨兵26379节点配置(需要密码的话添加sentinel auth-pass mymaster 12345678)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #26379端口哨兵节点配置 bind 192.168.1.92 port 26379 daemonize yes logfile "/opt/redis_cluster/redis26379/logs/redis26379.log" pidfile "/opt/redis_cluster/redis26379/pid/redis26379.pid" dir "/opt/redis_cluster/redis26379/data" #mymaster主节点别名 主节点 ip 和端口,判断主节点失败,两个sentinel节点同意 sentinel monitor mymaster 192.168.1.92 6379 2 #选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。 sentinel down-after-milliseconds mymaster 30000 #向新的主节点发起复制操作的从节点个数,1轮询发起复制 sentinel parallel-syncs mymaster 1 #故障转移超时时间 sentinel failover-timeout mymaster 180000 |
- 哨兵26380节点配置
1 2 3 4 5 6 7 8 9 10 | bind 192.168.1.92 port 26380 daemonize yes logfile "/opt/redis_cluster/redis26380/logs/redis26380.log" pidfile "/opt/redis_cluster/redis26380/pid/redis26380.pid" dir "/opt/redis_cluster/redis26380/data" sentinel monitor mymaster 192.168.1.92 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 18000 |
- 哨兵26381节点配置
1 2 3 4 5 6 7 8 9 10 | bind 192.168.1.92 port 26381 daemonize yes logfile "/opt/redis_cluster/redis26381/logs/redis26381.log" pidfile "/opt/redis_cluster/redis26381/pid/redis26381.pid" dir "/opt/redis_cluster/redis26381/data" sentinel monitor mymaster 192.168.1.92 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 18000 |
- 启动三台哨兵
1 2 3 | ] # redis-sentinel redis26380/conf/redis26380.conf ] # redis-sentinel redis26381/conf/redis26381.conf ] # redis-sentinel redis26379/conf/redis26379.conf |
- 哨兵启动后,配置文件会发生变化
1 2 3 | 1)Sentinel节点自动发现了从节点,其余Sentinel节点 2)去掉了默认配置,例如parallel-syncs failover-timeout参数 3)添加了配置纪元相关参数 |
- 哨兵节点API命令
1 2 3 4 5 6 7 8 | Info Sentinel Sentinel masters Sentinel master <master name> Sentinel slaves <master name> Sentinel sentinels <master name> Sentinel get-master-addr-by-name <master name> Sentinel failover <master name> Sentinel flushconfig |
- 手动调整主节点
1 2 3 4 5 6 7 8 9 10 11 12 | #Redis Sentinel存在多个从节点时,如果想将指定的从节点晋升为主节点,可以将其他从节点的slavepriority配置为0,但是需要注意failover后,将slave-priority调回原值. 1.查询命令:CONFIG GET slave-priority 2.设置命令:CONFIG SET slave-priority 0 3.主动切换:sentinel failover mymaster #db02/db03操作 redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0 redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0 #db01操作 redis-cli -h db01 -p 26379 Sentinel failover mymaster |
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能