Redis安装

366 阅读5分钟

官网

gcc安装

yum -y install gcc automake autoconf libtool make

redis安装

安装 wget 命令插件

yum -y install wget

下载redis

// 进入软件目录 然后下载
cd /usr/local/soft/ 
// 下载
wget http://download.redis.io/releases/redis-5.0.8.tar.gz

解压 编译

tar -zxvf redis-5.0.8.tar.gz -C /usr/local

cd /usr/local/

cd redis-5.0.8/

// 进入redis目录 执行 make 命令

make


make PREFIX=/usr/local/redis-5.0.8 install

查看到 bin 目录 然后下面有可执行文件即可,如果有bin 和可执行 不安装也行

启动命令

启动方式一

cd /usr/local/redis-5.0.8/bin/

./redis-server

image.png

重新开一个终端查看

netstat -ntlp 查看下一端口

image.png

control + c 退出

control + z 不是退出哦

关闭

/usr/local/redis-5.0.8/bin/redis-cli shutdown

yum -y install lsof 强制关闭(因为control+z没退出)

启动方式二

redis-server --port=6380

启动方式三(推荐)

cd /usr/local/redis-5.0.8/

mkdir conf

把同级redis.conf 拷贝到conf目录下
cp redis.conf conf/

拷贝多个redis.conf文件 
cp redis.conf redis_6379.conf


/usr/local/redis-5.0.8/bin/redis-server /usr/local/redis-5.0.8/conf/redis_6379.conf 

配置

/usr/local/redis-5.0.8/conf
vi redis_6379.conf

搜索 daemonize

image.png

配置后台启动

/daemonize

daemonize yes

配置远程登录

修改成 0.0.0.0 为了测试用 实际还是按你局域网来 bind 127.0.0.1

image.png

image.png

端口配置

默认就是6379 就用默认就好

image.png

工作目录

image.png

dir /usr/local/redis-5.0.8/data

image.png

工作日志

image.png

image.png

:wq 退出保存一波

创建data

在redis目录下创建

mkdir data

设置密码 (云服务器 要设置密码哦)

requirepass

image.png

image.png

./redis-cli  -a '123456' shutdown

关闭redis

暴力方法 kill -9 PID

ps -ef |grep redis-server
或者 netstat -ntlp 查看一下
kill -9 PID

正常关闭

/usr/local/redis-5.0.8/bin/redis-cli shutdown
netstat -ntlp

image.png

光标不走无法输入

原因就是 我的后台模式 daemonize 设置no 得改成yes忘记改了

不过呢 加个 & 就行了

redis-server &
/usr/local/redis-5.0.8/bin/redis-server /usr/local/redis-5.0.8/conf/redis_6379.conf &

查看运行状态

ps -ef|grep reids

netstat -ntlp

ps -ef|grep reids
netstat -ntlp

进入客户端

/usr/local/redis-5.0.8/bin/redis-cli

主从复制

slave 奴隶;完全受(某事物)控制的人;完全依赖(某事物)的人;从动装置 一主多从

image.png

单个服务器做的配置 搞多个端口

查看conf主要配置内容 提炼出来

过滤 # 开头行

过滤 空格

cat redis_6379.conf |grep -v '#' |grep -v '^$'

其事内容还是很多 然后配置最基本就行了 进入 redis_6379.conf 删除所有内容 删除手段是 :1,$d 回车

port 6379

daemonize yes

pidfile /var/run/redis-6379.pid

logfile 6379.log

dbfilename dump_6379.rdb

dir /usr/local/redis-5.0.8/data/

拷贝redis_6379.conf 到 redis_6380.conf

cp redis_6379.conf redis_6380.conf

进入6380.conf 进行替换。%s/6379/6380/g

cd /usr/local/redis-5.0.8/
bin/redis-server conf/redis_6379.conf
bin/redis-server conf/redis_6380.conf

/usr/local/redis-5.0.8/bin/redis-server /usr/local/redis-5.0.8/conf/redis_6379.conf
/usr/local/redis-5.0.8/bin/redis-server /usr/local/redis-5.0.8/conf/redis_6380.conf

删除所有日志 到 data 下面 rm -fr *

把6379端口数据同步到6380中

bin/redis-cli

默认进入的就是6379端口的redis

image.png

启动6380

bin/redis-cli -p 6380
bin/redis-cli -p 6380 shutdown

启动后可以查看是否有值 和 是否主从

keys *

info replication

image.png

slaveof

这是同一个服务器拷贝的哦 所以

SLAVEOF 127.0.0.1 6379
keys *

image.png

image.png

6380端口 角色 也从 master 变成 slave

变成从服务不能写入数据,而且变成从服务后数据跟master一样 原本自己的数据会丢失

取消该服务器对主服务的跟从

slaveof no one

image.png

通过配置来进行主从关联

到redis_6380.conf中配置

bind 192.168.202.3
replicaof 192.168.202.3 6379

到redis_6379.conf配置

bind 192.168.202.3
/usr/local/redis-5.0.8/
bin/redis-server conf/redis_6379.conf
bin/redis-server conf/redis_6380.conf
bin/redis-cli -p 6380 -h 192.168.202.3
bin/redis-cli -p 6379 -h 192.168.202.3

哨兵机制配置

配置

vi redis_7000.conf

port 7000

daemonize yes

pidfile /var/run/redis-7000.pid

logfile 7000.log

dir /usr/local/redis-5.0.8/data/

bind 192.168.202.3

vi redis_7001.conf

port 7001

daemonize yes

pidfile /var/run/redis-7001.pid

logfile 7001.log

dir /usr/local/redis-5.0.8/data/

replicaof 192.168.202.3 7000
bind 192.168.202.3

vi redis_7002.conf

port 7002

daemonize yes

pidfile /var/run/redis-7002.pid

logfile 7002.log

dir /usr/local/redis-5.0.8/data/

replicaof 192.168.202.3 7000
bind 192.168.202.3

启动

cd /usr/local/redis-5.0.8/ 
bin/redis-server conf/redis_7000.conf 
bin/redis-server conf/redis_7001.conf 
bin/redis-server conf/redis_7002.conf 
bin/redis-cli -p 7000 -h 192.168.202.3
bin/redis-cli -p 7001 -h 192.168.202.3
bin/redis-cli -p 7002 -h 192.168.202.3

image.png

哨兵配置

不要保护 然后客户端连接不上 暂时这样吧

image.png

vi sentinel_26379.conf

port 26379
daemonize yes
pidfile /var/run/redis-sentinel-26379.pid
logfile "26379.log"
dir /usr/local/redis-5.0.8/data/
sentinel monitor mymaster 192.168.202.3 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
protected-mode no
bind 192.168.202.3

vi sentinel_26380.conf

port 26380
daemonize yes
pidfile /var/run/redis-sentinel-26380.pid
logfile "26380.log"
dir /usr/local/redis-5.0.8/data/
sentinel monitor mymaster 192.168.202.3 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
protected-mode no
bind 192.168.202.3

vi sentinel_26381.conf

port 26381
daemonize yes
pidfile /var/run/redis-sentinel-26381.pid
logfile "26381.log"
dir /usr/local/redis-5.0.8/data/
sentinel monitor mymaster 192.168.202.3 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
protected-mode no
bind 192.168.202.3

启动哨兵

bin/redis-sentinel conf/sentinel_26379.conf
bin/redis-sentinel conf/sentinel_26380.conf
bin/redis-sentinel conf/sentinel_26381.conf

查看 ps -ef|grep redis 删掉 sentinel

image.png

测试

bin/redis-cli -h 192.168.202.3 -p 7000 shutdown

image.png

集群 cluster

集群配置

vi redis_7000.conf

port 7000
daemonize yes
dir  /usr/local/redis-5.0.8/data
dbfilename dump_7000.dbf
logfile 7000.log
cluster-enabled yes
cluster-config-file  node_7000.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
bind 192.168.202.3
protected-mode no

复制拷贝一份7001的

sed 's/7000/7001/g' redis_7000.conf > redis_7001.conf
sed 's/7000/7002/g' redis_7000.conf > redis_7002.conf
sed 's/7000/7003/g' redis_7000.conf > redis_7003.conf
sed 's/7000/7004/g' redis_7000.conf > redis_7004.conf
sed 's/7000/7005/g' redis_7000.conf > redis_7005.conf

节点通信

启动

bin/redis-server conf/redis_7000.conf
bin/redis-server conf/redis_7001.conf
bin/redis-server conf/redis_7002.conf
bin/redis-server conf/redis_7003.conf
bin/redis-server conf/redis_7004.conf
bin/redis-server conf/redis_7005.conf

image.png 启动 以集群模式启动 加 -c

bin/redis-cli -c -h 192.168.202.3 -p 7000

查看状态

CLUSTER INFO

CLUSTER NODES

开始通信 image.png

CLUSTER MEET 192.168.202.3 7001
CLUSTER MEET 192.168.202.3 7002
CLUSTER MEET 192.168.202.3 7003
CLUSTER MEET 192.168.202.3 7004
CLUSTER MEET 192.168.202.3 7005

分配slot卡槽

到bin目录 生成 addslots.sh脚本 vi addslots.sh

start=$1
end=$2
port=$3
for slot in `seq ${start} ${end}`
do
        ./redis-cli -h 192.168.202.3 -p ${port} cluster addslots ${slot}
done

可执行权限

chmod 755 addslots.sh

image.png

sh addslots.sh 0 5460 7000

sh addslots.sh 5461 10922 7001

sh addslots.sh 10923 16383 7002

image.png

image.png

配置从节点

获取 nodeId

cluster nodes


bf5972d9d51f6e4e6a15843bb11ea3498ae62fef 192.168.202.3:7004@17004 master - 0 1650368398000 0 connected

42fb030a76f762e60ba018bfead268370b38d3a0 192.168.202.3:7002@17002 master - 0 1650368397000 2 connected 10923-16383

11124492639dd6c351385bfc7f9b841496d96b37 192.168.202.3:7000@17000 master - 0 1650368400047 1 connected 0-5460

7fc77c2c1a3c976332ef750f42152388c050ee97 192.168.202.3:7005@17005 master - 0 1650368399006 4 connected

515b86d2becd8f712bf22e685c099e5b795f668e 192.168.202.3:7001@17001 myself,master - 0 1650368395000 3 connected 5461-10922

b82dd9866995873cdc1317f4ac603a4d8a47b14e 192.168.202.3:7003@17003 master - 0 1650368397000 5 connected

摘取

7000 11124492639dd6c351385bfc7f9b841496d96b37

7001 515b86d2becd8f712bf22e685c099e5b795f668e

7002 42fb030a76f762e60ba018bfead268370b38d3a0

bin/redis-cli -h 192.168.202.3 -p 7003 cluster replicate 11124492639dd6c351385bfc7f9b841496d96b37

bin/redis-cli -h 192.168.202.3 -p 7004 cluster replicate 515b86d2becd8f712bf22e685c099e5b795f668e

bin/redis-cli -h 192.168.202.3 -p 7005 cluster replicate 42fb030a76f762e60ba018bfead268370b38d3a0

image.png

bin/redis-cli -c -h 192.168.202.3 -p 7000

image.png

先关闭这些进程

查看
ps -ef|grep redis 
过滤
ps -ef|grep redis |grep -v grep

打印第二个参数
ps -ef|grep redis |grep -v grep |awk '{print $2}'
kill掉 
ps -ef|grep redis |grep -v grep |awk '{print $2}' |xargs kill -9

image.png

删除data里面的数据 配置啥的

rm -fr * data里面东西

启动集群

bin/redis-server conf/redis_7000.conf 
bin/redis-server conf/redis_7001.conf 
bin/redis-server conf/redis_7002.conf 
bin/redis-server conf/redis_7003.conf 
bin/redis-server conf/redis_7004.conf 
bin/redis-server conf/redis_7005.conf

bin/redis-cli -c -h 192.168.202.3 -p 7000

image.png

通过命令安装

// 通过命令进行安装

--cluster-replicas 1:表示主从比例1:1

--cluster-replicas 2:表示主从比例1:2

bin/redis-cli --cluster create 192.168.202.3:7000 192.168.202.3:7001 192.168.202.3:7002 192.168.202.3:7003 192.168.202.3:7004 192.168.202.3:7005 --cluster-replicas 1

然后yes 允许

image.png

image.png

登陆demo

把yum里面node切换一下即可 跑一下数据库

缓存穿透 解决方案搞个空对象村进去 时间搞1分钟

image.png

image.png