当前位置: 首页 > news >正文

NOSQL——Redis

什么是NOSQL

NOSQL(Not Only SQL):非关系型数据库;

包括:

Redis:基于内存的KV结构的数据;

MongoDB:文档型数据库,擅长存储JSON(BSON)数据;

HBase:列存储数据库,大数据存储;

特点:

存储半结构化、非结构化数据;

海量存储(通过分布式);

高并发场景;

Redis

Redis(Remote Dictionary Server)远程字典服务。

内存型数据库:数据存储到内存中的,读写速快(GB级);

支持高并发,查询11万次/秒,写入8万次/秒;

支持持久化(将数据定期存储到磁盘中);

常用于缓存,存储热点数据、临时数据;通过加缓存,可以提高并发,减少成本。

Redis常用数据类型

字符串

哈希(hash)

集合

列表

有序集合

缓存失败问题

缓存击穿:一个热点的key失效,直接访问到数据库,导致数据访问量激增。

加锁,从数据库中读取写入缓存后,返回给用户;

通过异步不断刷新过期时间;

缓存穿透:大量用户访问不存在的数据,导致请求直接访问数据库,占用数据库大量的资源;

缓存空值/默认值

布隆过滤器做一层过滤

缓存雪崩:最严重的缓存问题,缓存自身崩溃或者有大量的key都过去,后端数据库压力剧增,或直接崩溃。

缓存增加备份、高可用;

缓存集群;

过期时间设置均匀一些;

多级缓存;

配置项名称

配置项值范围

说明

daemonize

yes、no

yes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行

port

指定 Redis 监听端口,默认端口为 6379

bind

绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问

protected-mode

yes、no

保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no

loglevel

debug、verbose、notice、warning

日志级别,默认为 notice

databases

16

设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到

rdbcompression

yes、no

指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变得巨大

dbfilename

dump.rdb

指定本地数据库文件名,默认值为 dump.rdb

dir

指定本地数据库存放目录

requirepass

设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH命令提供密码,默认关闭

maxclients

0

设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息

maxmemory

xxx

指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值

安装Redis操作步骤

手动安装Redis

1.指定Redis存放位置

cd /usr/local/src/

wget http://download.redis.io/releases/redis-6.2.14.tar.gz

wget https://download.redis.io/releases/redis-6.2.14.tar.gz

2.解压

tar -xvf redis-6.2.14.tar.gz

3.安装依赖

(centos7)

yum clean all

yum makecache fast

yum -y install gcc gcc-c++ make tcl

(可选安装) 安装新版本gcc

yum -y install centos-release-scl

yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

source /opt/rh/devtoolset-9/enable

echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

(ubuntu)

sudo apt install build-essential gcc g++ make tcl -y

4.查看GCC版本

gcc --version

5. Redis的编译安装和配置文件处理

cd /usr/local/src/redis-6.2.14

make && make PREFIX=/usr/local/redis install

mkdir -p /usr/local/redis/{etc,logs,data}

egrep -v "^$|^#" redis.conf > /usr/local/redis/etc/redis.conf

6.启动服务

cd /usr/local/redis/bin

./redis-server

7.进入Redis

不要关,在xshell中再开一个,连接登录

cd /usr/local/redis/bin

./redis-cli

快速安装Redis

1.提前配好yum源或apt源

cd /etc/yum.repos.d/

2.编辑安装脚本

vim redis_install.sh

#!/bin/bash

# 检查系统类型

if [ -f /etc/os-release ]; then

    . /etc/os-release

    OS_NAME=$NAME

    OS_VERSION=$VERSION_ID

else

    echo "无法识别操作系统"

    exit 1

fi

echo "当前操作系统: $OS_NAME $OS_VERSION"

# 根据操作系统选择安装命令

if [[ "$OS_NAME" == "Ubuntu" ]]; then

    # 更新包列表并安装依赖

    apt update

    apt -y install build-essential tcl wget

elif [[ "$OS_NAME" == "CentOS Linux" ]] || [[ "$OS_NAME" == "Red Hat" ]]; then

    yum -y install gcc gcc-c++ make tcl wget

else

    echo "不支持的操作系统"

    exit 1

fi

cd /usr/local/src

# 下载Redis源码包

if [ -f redis-6.2.14.tar.gz ]; then

    echo "redis-6.2.14.tar.gz已存在不需要下载!"

else

    # wget http://download.redis.io/releases/redis-6.2.14.tar.gz

    wget http://192.168.56.200/Software/redis-6.2.14.tar.gz

fi

# 解压源码包

tar -xvf redis-6.2.14.tar.gz

# 进入解压后的目录

cd redis-6.2.14

# Redis编译安装

make

make PREFIX=/usr/local/redis install

# Redis基础配置

mkdir -p /usr/local/redis/{etc,logs,data}

egrep -v "^$|^#" redis.conf > /usr/local/redis/etc/redis.conf

sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /usr/local/redis/etc/redis.conf

sed -i "s/protected-mode yes/protected-mode no/g" /usr/local/redis/etc/redis.conf

sed -i "s/daemonize no/daemonize yes/g" /usr/local/redis/etc/redis.conf

sed -i "s/pidfile \/var\/run\/redis_6379.pid/pidfile \/usr\/local\/redis\/redis.pid/g" /usr/local/redis/etc/redis.conf

sed -i "s/dir \.\//dir \/usr\/local\/redis\/data/g" /usr/local/redis/etc/redis.conf

sed -i "s/logfile \"\"/logfile \"\/usr\/local\/redis\/logs\/redis.log\"/g" /usr/local/redis/etc/redis.conf

# 将配置文件复制到/etc下

mkdir -p /etc/redis/

cp /usr/local/redis/etc/redis.conf /etc/redis/

# 启动redis

/usr/local/redis/bin/redis-server /etc/redis/redis.conf

# 更新PATH环境变量

echo 'export PATH=$PATH:/usr/local/redis/bin/' >> /etc/profile

. /etc/profile

# 查看redis监听端口

echo "查看redis监听端口:"

netstat -tanp | grep redis

3.执行脚本

bash redis_install.sh

4.编辑Redis启动、关机、重启的脚步

vim redis.sh

#!/bin/bash

REDIS_PATH="/usr/local/redis"

REDIS_CONF="/etc/redis/redis.conf"

PID_FILE="$REDIS_PATH/redis.pid"

start() {

    if [ -f $PID_FILE ]; then

        echo "Redis is already running."

        exit 1

    fi

    echo "Starting Redis..."

    $REDIS_PATH/bin/redis-server $REDIS_CONF &

    echo $! > $PID_FILE

    echo "Redis started."

}

stop() {

    if [ ! -f $PID_FILE ]; then

        echo "Redis is not running."

        exit 1

    fi

    echo "Stopping Redis..."

    kill $(cat $PID_FILE)

    rm $PID_FILE

    echo "Redis stopped."

}

restart() {

    stop

    sleep 1

    start

}

case "$1" in

    start)

        start

        ;;

    stop)

        stop

        ;;

    restart)

        restart

        ;;

    *)

        echo "Usage: $0 {start|stop|restart}"

        exit 1

        ;;

esac

5.赋予可执行权限

chmod +x redis.sh

习惯上会把启动脚本放置在/etc/init.d/目录下,方便使用

cp redis.sh /etc/init.d/redis

6.启动Redis

./redis.sh start             # 启动Redis服务器

./redis.sh stop              # 停止Redis服务器

./redis.sh restart           # 重启Redis服务器

7.进入Redis

cd /usr/local/redis/bin

./redis-cli

#若不能再任意位置进入Redis

把 redis-cli 所在目录添加到 PATH(替换成你的实际路径!)

export PATH=$PATH:/usr/local/redis/bin

验证是否添加成功(会输出包含 /root/redis/bin 的路径)

echo $PATH

此时在任意目录执行 redis-cli 即可

redis-cli

若ubuntu安装有问题

显示问题:正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 13996(unattended-upgr)持有

1.终止 unattended-upgr 进程

sudo kill 13996

2.确认进程已结束

ps -ef | grep unattended-upgr

3.移除锁定文件(如果仍有问题)

sudo rm /var/lib/dpkg/lock-frontend

sudo rm /var/lib/dpkg/lock

4.重新配置 dpkg

sudo dpkg --configure -a

8.其余命令

(1)查看端口(Redis默认端口6379)

netstat -lnutp|grep 6379

(2)查看是否启动

ps -ef|grep redis或./bin/redis-cli ping

前台启动

./bin/redis-server

后台启动

vim /usr/local/redis/etc/redis.conf

daemonize yes  #前台启动,改后台启动

指定配置文件启动

./bin/redis-server ./etc/redis.conf

(3)关闭

./bin/redis-cli shutdown

返回一主两从三哨兵:实验:一主两从三哨兵

返回Redis集群:Redis集群操作步骤

Redis基础命令

keys * #查看key

keys *ng* #查看带有“ng”的key

keys zhang?? #查看前面为“zahng”的key

keys zhan[ng]si #查看为zhangsi或zhansi的key

get keyi #查看i号库的内容

1.连接命令

ping #测试连接是否生效

echo m #打印特定信息m

select i #切换到i号数据库,默认是0号数据库

config set requirepass 密码 #设置密码

config set requirepass “” #清空密码

2.键命令(i指库号

set keyi value #将字符串值value关联到key

get keyi #关联字符串值,如果key不存在那么返回特殊值nil

del keyi[keyi1  keyi2… keyi3] #删除一个或多个key,返回删除key 的数量

exists keyi #检查key是否存在,存在返回1,不存在返回0

type keyi #返回 key 所储存的值的类型。none (key不存在)、string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)

expire keyi seconds #设置key的生存时间,单位为秒。设置成功返回1,其他返回0

pexpire keyi mseconds #以毫秒设置生存时间。成功返回1,其他返回0

ttl keyi #查看有效时间(单位:秒)。key不存在返回-2,key存在但没有设置剩余生存时间返回-1

pttl keyi #查看有效时间(单位:毫秒)。key不存在返回-2,key存在但没有设置剩余生存时间返回-1

exists keyi #验证是否存在

3.通配符

* 表示多个字符

? 表示一个字符

[] 表示只能是[]里面的字符

\ 表示指定特殊字符

#将当前数据库的key移动到给定的数据库db当中

move key db 例如:move zhangsan 1

移动成功返回1,失败则返回0

key不存在时,移动失败

key移动到1库时,1库中出现同名的key,移动失败

#从当前数据库中随机返回(不删除)一个 key

random key

当数据库不为空时,返回一个 key

当数据库为空时,返回 nil

#将key改名为newkey

rename key newkey

改名成功时提示 OK,失败时候返回一个错误

当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。

当 newkey 已经存在时, RENAME 命令将覆盖旧值

#当且仅当 newkey 不存在时,将 key 改名为 newkey

renamenx key newkey 例如:renamenx zhangsi zhangwu

修改成功时,返回 1 。如果 newkey 已经存在,返回 0

Redis数据类型

Redis常用数据类型.xmind

字符串命令:set key value [EX seconds] [PX milliseconds] [NX|XX]

EX:设置键的过期时间为 second秒 例如:set key1 hello EX 1000

PX:设置键的过期时间为 millisecond毫秒 例如:set key2 hello PX 100000

NX:只在键不存在时,才对键进行设置操作 例如:set key3 hello NX

XX:只在键已经存在时,才对键进行设置操作 例如: set key4 helloworld XX

数据结构

特点

典型使用场景

示例

String(字符串)

存储文本或二进制数据,最大512MB;支持自增/自减、拼接等操作

1.缓存简单键值对(如用户信息、商品详情)

2.计数器(如文章阅读量、接口调用次数)

3.分布式锁(通过SET NX实现)

SET user:1001 "name:张三,age:25"

INCR article:views:2001

Hash(哈希)

存储字段-值对的集合,适合表示对象;可单独操作字段,节省空间

1.缓存对象型数据(如用户资料、商品属性)

2.存储结构化数据(如订单详情中的多个字段)

HSET user:1001 name 张三 age 25

HGET user:1001 name

List(列表)

有序字符串集合,支持两端插入/删除,可按索引访问;底层是双向链表或压缩列表

1.消息队列(如异步任务队列、实时通知)

2.最新列表(如朋友圈动态、新闻Feed流)

3.排行榜(临时排序场景)

LPUSH news:feed "新闻A"

LRANGE news:feed 0 9(获取前10条)

Set(集合)

无序、唯一字符串集合,支持交集、并集、差集等集合运算

1.去重场景(如用户标签去重、投票防重复)

2.社交关系(如共同好友、关注列表)

3.筛选数据(如交集找共同兴趣)

SADD user:tags:1001 "音乐" "运动"

SINTER user:1001:friends user:1002:friends(共同好友)

Sorted Set(有序集合)

有序、唯一字符串集合,每个元素关联分数,按分数排序;支持范围查询

1.排行榜(如游戏积分排名、视频播放量排序)

2.带权重的消息队列

3.时间轴数据(如按时间排序的日志)

ZADD rank:game 950 "用户A" 880 "用户B"

ZRANGE rank:game 0 4 WITHSCORES(前5名及分数)

Bitmap(位图)

二进制位的集合,通过位操作高效存储和计算;节省空间(1MB可存800多万位)

1.签到记录(如用户每月签到情况,1位表示1天)

2.状态标记(如用户在线状态、功能开关)

3.基数统计(如独立访客UV计数)。

SETBIT sign:user:1001 5 1(第5天签到)

BITCOUNT sign:user:1001(签到总天数)

HyperLogLog

用于基数估算(统计不重复元素数量),占用空间极小(约12KB),有一定误差

1.大规模数据基数统计(如网站UV、页面访问独立用户数)

2.快速估算集合大小(无需存储全部元素)

PFADD uv:20240821 "user1" "user2"

PFCOUNT uv:20240821(估算当天UV)

Geospatial(地理空间)

存储经纬度信息,支持距离计算、范围查询(如附近的人/地点)。

1.LBS服务(如外卖配送范围、附近的商家)

2.地理位置排序(如按距离展示周边设施)

GEOADD shops:beijing 116.40 39.90 "商场A"

GEORADIUS shops:beijing 116.40 39.90 5000 m(5公里内的商场)

Redis数据持久化

数据持久化:将内存中的数据保存到磁盘中。

作用:让redis服务重启后可以恢复之前的数据。

Redis数据持久化的方式

RDB(快照):将内存中Redis缓存的所有数据,都以二进制字符串的方式保存为一个.rdb文件。

特点:占用存储小,当恢复所有数据时,速度快。不建议频繁生成快照。每次重启自动加载快照。

AOF(日志追加):将每次增、删、改的操作添加到.aof日志中,默认明文存储(可压缩),占据更大的存储空间,保存数据时,运行资源占用小。追加日志可以实时添加。

AOF默认是不开启的

RDB触发方式

手动触发:save与bgsave(save阻塞Redis主线程的执行,vgsave不阻塞)

自动触发:Redis通过判断,满足设置触发条件时自动执行bgsave命令

RDB优缺点

优点:1.RDB是一个紧凑的单一文件,方便传送,适用于灾难恢复。

2.与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些。

缺点:1Redis意外宕机,可能会丢失几分钟的数据(取决于配置的save时间点)。RDB方式需要保存整个数据集,是一个比较繁重的工作,通常需要设置5分钟或者更久做一次完整的保存。

AOF优缺点

优点:1.AOF只是追加日志文件,因此对服务器性能影响较小,速度比RDB要快,消耗的内存较少。

缺点:1.AOF方式生成的日志文件太大,即使通过AOF重写,文件体积仍然很大。

2.恢复数据的速度比RDB慢。

对比维度

RDB

AOF

数据格式

二进制文件(紧凑,体积小)

文本日志(记录命令,体积较大)

持久化粒度

全量数据快照(间隔性保存)

每条写命令(实时或近实时保存)

恢复速度

快(直接加载二进制文件)

慢(需重新执行所有命令)

文件体积

小(二进制压缩)

大(文本命令,可能包含冗余)

性能影响

持久化时(fork 子进程)可能短暂阻塞

频繁写入时(如always模式)性能损耗较大

数据安全性

可能丢失最后一次快照后的所有数据

丢失数据量少(最多丢失 1 秒数据,取决于配置)

兼容性

旧版本 Redis 可能不兼容新版本 RDB 文件

兼容性更好,命令格式相对稳定

适用场景

备份、灾难恢复(文件小,传输快)

对数据安全性要求高的场景

Redis集群

redis主从模式:一主一从或一主多从,自带读写分离,负载均衡。

redis哨兵集群:高可用,主服务宕机,从服务变成主服务。

redis集群模式(分片):将数据拆分存储到多个Redis主从集群中;从而实现高扩展;

Redis主从模式

原理:第一次同步时,使用RDB(快照),在同步时,主服务器产生的数据,会记录偏移量,在同步完成后,进行偏移量的同步。

之后的同步的数据是通过AOF日志方式同步的。

具体的原理

1.当slave启动后,主动向master发送SYNC(同步)命令;

2.master接受到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令;

3.将保存的快照文件和缓存的命令发送给slave;

4.slave收到快照文件和命令后加载快照文件和缓存的执行命令;

5.复制初始化后,master每次收到的写命令都会同步发送给slave,保证主从数据一致性。

缺点:只有主服务器能写入,从服务器只能读。主服务器一旦宕机,导致无法写入数据。

Redis哨兵模式

功能:

1.监控所有Redis服务器,重点监控主服务器,1秒ping一次主

2.主服务器宕机主观下线,10秒后未恢复,客观下线,选举新的主服务器,根据条件(数据完整性、服务器性能);

3.通知其他从服务器,主从变更,让其他服务器连接新的主服务。

多哨兵模式

哨兵监控主从的同时,也监控其他哨兵。

当主宕机,哨兵中选出一个哨兵,这个哨兵再从其他从中选出新的主。

Cluster模式

优点:

1.多个redis节点网络互联,数据共享

2.所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用

3.支持在线增加、删除节点

4.客户端可以连接任何一个主节点进行读写

缺点:

1.不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,

2.并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为

代理模式

twemproxy:快速、轻量级memcached和redis代理,Twitter推特公司开发

codis:redis集群代理解决方案,豌豆荚公司开发,需要修改redis源码

predixy:高性能全特征redis代理,支持Redis Sentinel和Redis Cluster

Redis-cerberus: Redis Cluster代理

Redis集群模式

哈希槽:默认Redis官方在Redis集群模式中内置了16384个槽

1 % 16384 = 1

重定向:在Redis集群任意节点查询或存储修改数据时,通过哈希槽运算,未命中节点,则会重新计算查找节点。

配置文件sentinel.conf说明

名称

说明

protected-mode no

关闭保护模式,使外网能访问

port 26379

修改端口

daemonize no

修改为后台运行

pidfile /var/run/redis-sentinel.pid

指定不同pid文件,注意文件夹不存在自己要新建

logfile ""

配置哨兵日志文件

dir "/tmp"

配置哨兵工作路径

sentinel monitor mymaster 127.0.0.1 6379 2

配置哨兵需要监控的主节点ip和端口,2表示哨兵数

sentinel auth-pass mymaster 123

配置哨兵连接主节点的认证密码

sentinel down-after-milliseconds mymaster 5000

配置多少毫秒后没收到主节点的反馈,则主观认为主节点宕机了

sentinel failover-timeout mymaster 30000

表示如果30秒后,主服务仍没活过来,则启动failover,从剩下的从服务中选一个升级为主服务

sentinel parallel-syncs mymaster 1

parallel-syncs 指定了在执行故障转移时,最多可以有多少个从服务同时对新的主服务进行同步,这个数字越小,完成故障转移所需的时间就越长

实验:一主两从三哨兵

192.168.8.11 主服务

192.168.8.12 从服务

192.168.8.13 从服务

主从模式(一主两从)

1.关闭防火墙

firewall-cmd --state #查看防火墙状态

service firewalld stop #关闭防火墙

2.安装Redis

安装Redis:安装Redis操作步骤

cd /usr/local/redis/bin

./redis-cli

3.配置主机和从机

cd /usr/local/redis/etc

只需要在从节点添加配置

vim redis.conf

最后一行添加

replicaof 192.168.81.11 6379

4.启动服务

启动三台主机的Redis服务器端服务

 ./bin/redis-server ./etc/redis.conf

ps -ef|grep redis

三台服务器进去Redis

 ./bin/redis-cli

5.手动设置从服务

slaveof 192.168.81.11 6379

6.查看主从信息

info replication

哨兵集群(单哨兵模式)

哨兵服务

1.备份配置文件

cp /usr/local/src/redis-6.2.14/sentinel.conf  /usr/local/redis/etc/sentinel.conf

2.进入etc目录

cd /usr/local/redis/etc/

3.编辑哨兵配置文件

vim sentinel.conf

sentinel monitor mymaster 192.168.81.11 6379 1

mymaster是监控主数据的名称,命名时可以使用大小写字母和“.-_”符号;

后面是主机IP、端口号和哨兵的数量,少数服从多数的命令

sentinel down-after-milliseconds mymaster 10000

配置多少毫秒后没收到主节点的反馈,则主观认为主节点宕机了

sentinel failover-timeout mymaster 15000

表示如果30秒后,主服务仍没活过来,则启动failover;

从剩下的从服务中选一个升级为主服务

5.返回到redis目录里
cd ../
或
cd /usr/local/redis
6.启动哨兵实时查看情况
./bin/redis-sentinel ./etc/sel.conf
或
./bin/redis-server ./etc/sentinel.conf --sentinel

(从服务)

7.从机宕机

(1)查看从服务进程号

ps -ef|grep redis
root 22163 1 0 12:18 ? 00:00:02 ./bin/redis-server 0.0.0.0:6379

(2)杀死进程

kill -s 9 22163

(3)重新启动服务

./bin/redis-server ./etc/redis.conf

(4)观察哨兵日志

(主服务)

8.主机宕机

(1)查看主服务进程

ps -ef | grep redis

(2)杀死进程

kill -s 9 进程号

(3)重新启动主服务

 ./bin/redis-server ./etc/redis.conf

(4)观察哨兵日志

(哨兵服务)

9.测试哨兵连接

端口默认为26379

redis-cli -p 26379 sentinel masters

如果哨兵工作正常,返回所有节点信息

10.通过哨兵获取当前节点地址
redis-cli  -p 26379 sentinel get-master-addr-by-name mymaster

哨兵集群(多哨兵模式)

(主服务)

1.备份配置文件
cp  /usr/local/src/redis-6.2.14/sentinel.conf  /usr/local/redis/etc/sentinel.conf
2.进入etc目录
cd  /usr/local/redis/etc/
3.复制份哨兵文件
cp sentinel.conf sentinel-1.conf
cp sentinel.conf sentinel-2.conf
cp sentinel.conf sentinel-3.conf
4.修改配置文件

先看看/usr/local/redis下有没有logs目录

(1)修改/sentinel-1.conf

vim sentinel-l.conf
protected-mode no
port 27001
daemonize yes
pidfile "/var/run/redis-sentinel-27001.pid"
logfile "/usr/local/redis/logs/27001.log"
sentinel monitor mymaster 192.168.81.11 6379 2

(2)修改/sentinel-2.conf

vim sentinel-2.conf
protected-mode no
port 27002
daemonize yes
pidfile "/var/run/redis-sentinel-27002.pid"
logfile "/usr/local/redis/logs/27002.log"
sentinel monitor mymaster 192.168.81.11 6379 2

(3)修改/sentinel-3.conf

vim sentinel-3.conf
protected-mode no
port 27003
daemonize yes
pidfile "/var/run/redis-sentinel-27003.pid"
logfile "/usr/local/redis/logs/27003.log"
sentinel monitor mymaster 192.168.81.11 6379 2
5.启动哨兵
cd  /usr/local/redis./bin/redis-sentinel ./etc/sentinel-1.conf./bin/redis-sentinel ./etc/sentinel-2.conf./bin/redis-sentinel ./etc/sentinel-3.conf
6.启动哨兵实时查看情况

tail -100 sentinel-1.conf

tail -100 sentinel-2.conf

tail -100 sentinel-3.conf

(从服务)

7.从机宕机

(1)查看进程

ps -ef|grep redis

(2)杀死进程

kill -s 9 进程名

(3)重新启动

./bin/redis-server ./etc/redis.conf

(主服务)

8.主机宕机

(1)查看进程

ps -ef|grep redis

(2)杀死进程

kill -s 9 进程名

(3)重新启动

./bin/redis-server ./etc/redis.conf

Redis集群操作步骤

用ubuntu操作,centos有问题

集群搭建:至少要三个master(123为主,456为从)

安装Redis:安装Redis操作步骤

1. 创建文件夹redis-cluster

cd /usr/local/redis
mkdir redis-cluster
cd redis-cluster/
mkdir 700{1..6}
#mkdir 700{1..6}与下面的相等
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
mkdir 7006

2.复制配置文件到700*

cd /usr/local/redis
cp ./etc/redis.conf ./redis-cluster/7001/redis.conf
cp ./etc/redis.conf ./redis-cluster/7002/redis.conf
cp ./etc/redis.conf ./redis-cluster/7003/redis.conf
cp ./etc/redis.conf ./redis-cluster/7004/redis.conf
cp ./etc/redis.conf ./redis-cluster/7005/redis.conf
cp ./etc/redis.conf ./redis-cluster/7006/redis.conf

3.安装ruby

apt install ruby
gem install redis

4.修改集群配置

配置修改的地方都一样,把700*改成相对应的值(例如:7001)

vim ./redis-cluster/700*/redis.conf
daemonize yes
port 700* 
#(分别对每个机器的端口号进行设置)
bind 192.168.3.210
#(必须要绑定当前机器的ip,不然会无限悲剧下去哇..深坑勿入!!!)
dir /usr/local/redis/redis-cluster/700*/
#(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据,深坑勿入!!!)
appendonly yes
pidfile /usr/local/redis/redis-700*.pid
logfile "/usr/local/redis/logs/redis-700*.log"#下面三行没有,添加上去
cluster-enabled yes  #(启动集群模式,开始玩耍)
cluster-config-file nodes700*.conf #(这里700*最好和port对应上)
cluster-node-timeout 5000  #redis节点宕机被发现的时间 #也可以把配置好的7001复制到其余上,在全文修改(以7002为例)
cp ./redis-cluster/7001/redis.conf ./redis-cluster/7002/redis.conf
vim ./redis-cluster/7002/redis.conf
:%s/7001/7002/g

5.启动Redis服务

./bin/redis-server ./redis-cluster/7001/redis.conf
./bin/redis-server ./redis-cluster/7002/redis.conf
./bin/redis-server ./redis-cluster/7003/redis.conf
./bin/redis-server ./redis-cluster/7004/redis.conf
./bin/redis-server ./redis-cluster/7005/redis.conf
./bin/redis-server ./redis-cluster/7006/redis.conf

6.创建集群

./bin/redis-cli --cluster create 192.168.3.210:7001 192.168.3.210:7002 192.168.3.210:7003 192.168.3.210:7004 192.168.3.210:7005 192.168.3.210:7006 --cluster-replicas 1

create表示创建一个redis集群。

cluster-replicas 1表示为集群中的每一个主节点指定一个从节点,即一比一的复制

显示OK即为成功

7.查看redis服务状态

ps -ef|grep redis

8.进入一个节点

./bin/redis-cli -c -h 192.168.3.210 -p 7001

192.168.3.210:7001> info cluster

cluster_enabled:1 #节点是否为cluster模式(1为是0为否)

9.测试

[root@zuolaoshi redis]# ./bin/redis-cli -c -h 192.168.3.210 -p 7005
192.168.3.210:7005> set b fdfsfsd
-> Redirected to slot [3300] located at 192.168.3.210:7001
OK
192.168.3.210:7001> get b
"fdfsfsd"
192.168.3.210:7001> set c fdsfdfdsfds
-> Redirected to slot [7365] located at 192.168.3.210:7002
OK
192.168.3.210:7002> get c
"fdsfdfdsfds"
192.168.3.210:7002> set x fdsfdsfsdf
-> Redirected to slot [16287] located at 192.168.3.210:7003
OK
192.168.3.210:7003> keys *
1) "x"
2) "a"
192.168.3.210:7003> get b
-> Redirected to slot [3300] located at 192.168.3.210:7001
"fdfsfsd"
192.168.3.210:7001> keys *
1) "b"
192.168.3.210:7001> set d fdsfdsfsd
-> Redirected to slot [11298] located at 192.168.3.210:7003
OK
192.168.3.210:7003> get d
"fdsfdsfsd"
192.168.3.210:7003> set x zhangsan
OK
192.168.3.210:7003> get x
"zhangsan"

http://www.dtcms.com/a/362026.html

相关文章:

  • MySQL基础知识保姆级教程(四)视图与约束
  • 浅谈中断控制器:从 IRQ 到 IRR、IMR、In-Service Register
  • 软考-操作系统-错题收集(3)文件系统的索引节点结构
  • 【前端】《手把手带你入门前端》前端的一整套从开发到打包流程, 这篇文章都会教会你;什么是vue,Ajax,Nginx,前端三大件?
  • ComPE for win 纯净的PE系统
  • 软考中级数据库系统工程师学习专篇(67、数据库恢复)
  • Spring Security 深度学习(四): 会话管理与CSRF防护
  • 2025 数字化转型期,值得关注的 10 项高价值证书解析
  • Linux笔记---计算机网络概述
  • 视频动作识别模型-C3D
  • 线程池项目代码细节5(解决linux死锁问题)
  • 关系型数据库——GaussDB的简单学习
  • 《投资-43》- 自然=》生物=》人类社会=》商业=》金融=》股市=》投资的共同逻辑:生存竞争与进化论
  • 前端实现查询数据【导出】功能
  • 自制扫地机器人(二) Arduino 机器人避障设计——东方仙盟
  • A股大盘数据-20250901 分析
  • 设计模式:代理模式(Proxy Pattern)
  • HOW - 前端团队组长提升(沟通篇)
  • kubectl-etcd
  • RSA的CTF题目环境和做题复现第1集
  • nacos微服务介绍及环境搭建
  • linux 函数 kthread_should_stop
  • 「Unity3D」RectTransform的AnchorMin与Max直接定位到Rect四角,使得Left-Top-Right-Bottom都为0
  • 【Spark Core】(三)RDD的持久化
  • MT-Workflow: Odoo 可视化工作流引擎
  • 程序员与杀毒软件:一场不必要的“战争”?程序员用什么杀毒软件?-优雅草卓伊凡
  • 人工智能语音交互开发(五)麦克风频率响应范围
  • PostgreSQL 索引大全
  • 奇偶破题:当反函数撞上奇函数
  • Nano Banana一战封神,我总结了10种官方不会告诉你的神级技巧。