Redis学习笔记

MirrorYuChen
MirrorYuChen
发布于 2024-11-12 / 14 阅读
0
0

Redis学习笔记

0.内容概览

1.redis安装

  • [1] 源码下载
>> wget https://github.com/redis/redis/archive/7.2.4.tar.gz
  • [2] 文件解压
>> tar -zxvf 7.2.4.tar.gz && mv redis-7.2.4 redis && cd redis
  • [3] 编译安装
>> make -j 8 && sudo make install
  • [4] 运行启动
>> redis-server redis.conf

2.redis配置文件修改

  • [1] 拷贝一份默认配置文件
>> cp redis.conf redis7001.conf
  • [2] 修改redis7001.conf文件
>> vim redis7001.conf
port 7001    //端口7001,7002,7003 
  
bind 0.0.0.0  //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群 
  
daemonize yes  //redis后台运行 
  
pidfile /var/run/redis_7001.pid   //pidfile文件对应7001,7002,7003
  
logfile "redis7001.log"
  
dbfilename dump7001.rdb
  
appendonly yes  //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 
appendfilename "appendonly7001.aof"
  
cluster-enabled yes  //开启集群 把注释#去掉 
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成 7001,7002,7003 把注释#去掉 
cluster-node-timeout 15000  //请求超时 默认15秒,可自行设置  把注释#去掉  
  • 按照相同的方法修改得到redis7001.conf,redis7002.conf,可以使用下面的命令来生成redis7002.conf文件
>> sed 's/7001/7002/g' redis7001.conf > redis7002.conf
  • [3] 创建启动脚本
>> vim start-all-redis.sh
  • 脚本内容
#! /bin/bash

redis-server /home/mirror/software/redis-7.2.4/redis7001.conf
redis-server /home/mirror/software/redis-7.2.4/redis7002.conf
redis-server /home/mirror/software/redis-7.2.4/redis7003.conf
redis-server /home/mirror/software/redis-7.2.4/redis7004.conf
redis-server /home/mirror/software/redis-7.2.4/redis7005.conf
redis-server /home/mirror/software/redis-7.2.4/redis7006.conf
  • 给一下执行权限
>> chmod +x start-all-redis.sh
  • 执行启动脚本
>> sh start-all-redis.sh
  • 查看是否有redis启动
>> ps aux | grep redis

3.redis创建集群

3.1 原生集群步骤

  • [1] 配置开启集群节点
(1) cluster-enable yes
(2) cluster-config-file nodes_7001.conf
  • [2] meet:cluster meet ip port
  • [3] 指派槽位:
(1) 通过命令计算key的槽位:cluster keyslot key
  - (a) 3主:16384 / 3,每个主机分配槽位范围0-5462, 5462-10923, 10923-16384
  - (b) 4主:16384 / 4, 每个主机槽位4096
(2) cluster addslots slot(槽位下标)
  • [4] 分配主从:cluster replicate node-id

3.2 最新配置方式

  • redis5.0后,可以直接使用redis-cli来进行集群配置。
  • [1] 查看redis-cli的帮助参数:
>> redis-cli --cluster help
  • [2] 创建集群指令
>> redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
  • 其中 --cluster-replicas 1参数数字是分配主从节点数量比例:
1:一主一从;
2:一主两从;
  • [3] 测试集群
>> redis-cli -c -p 7001
  • -c表示以集群的形式访问 7001端口,-p 7001表示端口为7001。
>> set name laosun
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
>> get name
"laoshi"
>> exit
>> redis-cli -c -p 7006
>> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"laoshi"
  • 可以看到7006获取name值,会自动跳转到7002获取值,这也是redis cluster的特点,它去中心化,每个节点都是对等的,连接哪个节点都可以获取和设置数据。

4 redis集群扩容和缩容

  • [1] 创建配置文件,和前面一样
>> sed 's/7001/7007/g' redis7001.conf > redis7007.conf
>> sed 's/7001/7008/g' redis7001.conf > redis7008.conf
  • [2] 启动两个redis节点
>> redis-server redis7007.conf
>> redis-server redis7008.conf
  • [3] 向集群中添加节点
# redis-cli --cluster add-node new_host: new_port exist_host:exist_port --cluster-slave(以集群从节点身份加入) --cluster-master-id <arg>(跟随的主节点node-id) 
# 默认为主节点
>> redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 
# 以从节点身份加入
>> redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001 --cluster-slave --cluster-master-id 2f1b662489c7be79b6470408d6b4f4bcf8c37ccb
  • 7008跟随7007,此时集群虽然已经建立,但并未分配槽位,所以无法保存数据,从集群中分片出槽位:
>> redis-cli --cluster reshard 127.0.0.1:7001
  • 槽位就分配来了,注意,槽位分配过来,槽位上数据也跟随过来。
  • [4] 缩容
  • (a) 移除槽位
# redis-cli --cluster reshard 集群任意节点 --cluster-from 7007的nodeid --cluster-to 7001的nodeid --cluster-slots 槽位数
>> redis-cli --cluster reshard 127.0.0.1:7001 --cluster-from 2f1b662489c7be79b6470408d6b4f4bcf8c37ccb --cluster-to 8f6b141770840b0e9607c8c395c9b3b68161e96f --cluster-slots 1000
  • (b) 移除节点
# redis-cli --cluster del-node host:port node_id
>> redis-cli --cluster del-node 127.0.0.1:7008
afbdd25dadeda8a2de24323e207bdd4f5ec0d3d9
>> redis-cli --cluster del-node 127.0.0.1:7001
2f1b662489c7be79b6470408d6b4f4bcf8c37ccb

5.redis问题记录与修复

  • [1] Failed to write PID file:permision denied
# 1.查询pid文件读写路径
>> vim redis.conf
# 2.查询关键字
/pidfile
>> pidfile /home/mirror/software/redis/redis_6379.pid
# 3./var/run文件夹下创建redis_6379.pid文件,并给一下权限
>> sudo chmod 777 redis_6379.pid
  • [2] overcommit_memory is set to 0 Background save may fail under low memory condition
# 1.修改配置
>> sudo vim /etc/sysctl.conf
# 添加如下配置
vm.overcommit_memory = 1
# 2.使配置生效
>> sysctl -p 

评论