Redis的使用

Redis的简介

一、Redis介绍

Redis是典型的NoSQL,非关系型数据库,结构类型是Key-Value结构。数据存在内存里,持久化在硬盘里,平时操作的数据都在内存中,效率特别高,一般作为缓存来使用。
Redis以slot(槽)作为存储单元,没有固定大小,只有固定个数,一共有16384个槽(crc16算法 0-16383),当做Redis集群时,不论几个集群都是16384个槽。
同时通过Redis Sentinel(哨兵)提供高可用,通过Redis Cluster(集群)提供自动分区。
优点:有命令集,查询效率高速度快。
缺点:没有批量数据操作,不如分页查询。

二、使用Redis作为缓存工具时流程(写代码时思路)

  1. 应用程序向Redis查询数据
  2. 判断Key是否存在
  3. 是否存在
    1)存在
    a. 把结果查询出来
    b. 返回数据给应用程序
    2)不存在
    a. 向MySQL查询数据
    b. 把数据返回给应用程序
    c. 把结果缓存到Redis中

三、持久化策略

  1. RDB(Redis DataBase)默认模式
    内存快照存储,rdb快照文件小,覆盖式的存储,效率高,但是当频率不达标,断电会丢失数据。
    save 持久化设置
    save 900 1 900秒内1次写数据 保存一次
    save 300 10 300秒内10次写数据 保存一次
    save 60 10000 60秒内10000次写数据 保存一次
    两种方案:同步(手动)和异步(默认) ,同步在写入快照时对外操作停止,异步可以操作。异步操作要两倍空间物理内存。
  2. AOF(AppendOnly File)
    AOF默认是关闭的,appendonly no ,用文件来记录命令流程,每一秒钟向文件中追加这一秒的命令,加载后会读取命令,然后逐条执行命令,时间越长恢复的越慢。
    AOF的优先级高于RDB。

Redis的安装

一、安装在Linux的两种方式

1、直接在Linux中安装
2、在Linux中使用Docker容器安装 安装文档

二、在Linux中安装Redis

1.安装依赖C语言依赖
yum install -y gcc-c++ automake autoconf libtool make tcl
2.上传并解压

Redis-6.2.6-Linux压缩包
提取码:zh01
把redis安装包上传到 /usr/local/tmp
进入文件夹

mkdir /usr/local/tmp
cd /usr/local/tmp

解压文件

tar -zxf redis-6.2.6.tar.gz
3.编译并安装

进入解压文件夹

cd redis-6.2.6

编译

make

安装,PREFIX表示把软件安装到哪个文件夹中

make install PREFIX=/usr/local/redis
4.开启守护进程

复制配置文件到安装目录

cp /usr/local/tmp/redis-6.2.6/redis.conf /usr/local/redis

进入安装文件夹

cd /usr/local/redis

修改配置文件

vim redis.conf

bind 可访问的客户端,想远程需要注释
protected-mode yes改为no 保护模型
daemonize no改为yes 精灵进程 会有进程描述文件 默认在/var/run/redis_6379.pid
logfile 日志文件自己配置 默认在/dev/null 黑洞目录写进去就消失
databases 16 数据库个数,默认访问0号数据库
save 持久化设置
save 900 1 1秒内900次写数据 保存一次
save 300 10 10秒内300次写数据 保存一次
save 60 10000 10000秒内60次写数据 保存一次

加载配置文件启动

bin/redis-server redis.conf

查看后台启动

ps aux | grep redis

启动客户端

bin/redis-cli

关闭redis
强杀 尽量不用 会丢失数据

优雅关机

bin/redis-cli shutdown

Redis的使用

一、value常用类型:

  • String 字符串
  • Hash 哈希表
  • List 列表
  • Set 集合
  • Sorted Set 有序集合(zSet)
连接到redis
bin/redis-cli
测试是否可用

输入 ping
回应 pong
输入 echo “test”
回应 “test”
在字符串中如果有空格 必须要有双引号代表边界

二、Redis中文命令文档

命令不区分大小写 但存入的数据区分大小写
String 字符串

存入:set [key] [value]
查看:get [key]
存入不存在的:setnx [key] [value] ,key必须不存在 如果存在忽略本次操作
存入存活有效时长的:setex [key] [存活秒数] [value]
查看含有的key:keys [key] ,或:keys * ,没有返回-2
查看存活剩余时间:ttl [key]
查看有几个key存在:exists [key] [key] ,key可以有很多个 只会返回有几个存在 不会声明哪个存在
为一个存在的key设置存活时间:expire [key] [存活秒数]
手动删除key:del [key] [key] , key可以是一个也可以是多个 返回删除个数 没有返回0
存入多个key-value:mset [key] [value] [key] [value] ,必须成对
查看多个值:mget [key] [key] ,key可以是一个也可以是多个
删除key的有效时长:persist [key] ,返回删除成功的个数

Hash Hash表 结构 map(String,map(key,value))

存入hash表:hset [key] [field] [value] ,field 是第二个map中的key
查看key中field的值:hget [key] [field]
查看key中的field:hkeys [key]
查看key中的value:hvals [key]
查看key中的所有map对:hgetall [key]
存入完整的键值对:hmset [key] [field] [value] [field] [value] ,field和value成对出现
查看多个field对应的value:hmget [key] [field] [field]
删除key中的一个map:hdel [key] [field] ,删除所有的field,key自动删除

List 列表

存入列表数据:rpush [key] [value value] ,key相同会把第二次存入的数据加到末尾
存入列表数据:lpush [key] [value value] ,key相同会把第二次存入的数据加到开头
查看列表数据:lrange [key] [开始下标] [结束下标]
lrange [key] 0 -1 查看列表所有数据
lrange [key] -2 -1 查看从末尾开始的两数据
删除列表中的值:数值代表删除的个数和前后
lrem [key] 1 [value] ,从前删一个 ,lrem [key] 2 [value] ,从前删除两个
lrem [key] -1 [value] ,从后删一个

Set 集合

存入集合:sadd [key] [value value] ,重复数据不添加
查看所有:smembers [key] ,只能查看所有
查看数据条数:scard [key]
删除数据:srem [key] [value]

Sorted Set 有序集合(zSet)

存入数据:zadd [key] [分数] [value] ,按分数排序 分数相同按照字母顺序排列,分数不同按照分数排序,值相同会根据分数重新排序
查看数据:zrange [key] 0 -1
查看长度:zcard [key]
删除元素:zrem [key] [value] ,value可以是多个

Redis集群

一、Redis主从复制(安全性扩展)

每个节点可以有多个复制品,其中一个复制品是主(master),另外的复制品是从(Slave),一主多从。
在redis主从模型是只有主(Master)具备写的能力,从(Slave)只能读。如果主宕机,整个节点就不具备写能力。

1. 使用单个Linux多次启动搭建主从
  1. 创建集群文件夹
cd /usr/local
mkdir redis-replica
  1. 复制redis到集群文件夹中
cp -r redis redis-replica/
cd redis-replica/
  1. 需要删除快照文件,然后复制配置文件后修改配置。
cd redis
rm -rf dump.rdb
cp redis.conf redis-6001.conf
vim redis-6001.conf
  1. 修改端口号和文件名
    port 6001
    dbfilename dump-6001.rdb
    修改后复制多个,再次修改配置文件
cp redis-6001.conf redis-6002.conf

port 6002
dbfilename dump-6002.rdb
replicaof [主机ip] [主机端口] ,备份需要加上这个配置

cp redis-6001.conf redis-6003.conf

port 6003
dbfilename dump-6003.rdb
replicaof [主机ip] [主机端口] ,备份需要加上这个配置

  1. 启动多个redis
bin/redis-server redis-6001.conf
bin/redis-server redis-6002.conf
bin/redis-server redis-6003.conf
  1. 测试主从
bin/redis-cli -p [端口号]
info replication

可以看到当前的主从状态。
这时主机器down(宕机),从机器不会自动切换为主机器,从机器是只读的。

  1. 为了启动方便可以编写脚本文件
    在redis文件夹中关闭所有启动的redis
bin/redis-cli -p 6001 shutdown

查看运行中的redis项

ps aux | grep redis

关闭所有后,编写脚本文件
启动脚本

vim startup.sh
bin/redis-server redis-6001.conf
bin/redis-server redis-6002.conf
bin/redis-server redis-6003.conf

脚本如果没有权限可以授予权限

chmod 755 startup.sh

停止脚本

vim shutpdown.sh
bin/redis-cli -p 6001 shutdown
bin/redis-cli -p 6002 shutdown
bin/redis-cli -p 6003 shutdown

脚本如果没有权限可以授予权限

chmod 755 shutdown.sh

二、哨兵(Sentinel)

Redis的哨兵就是帮助监控整个节点的,当主宕机等情况下,帮助重新选取主。
在主从模型中,主宕机,整个节点不具备写能力的情况下,哨兵可以帮助节点来使其重新选取主,以具备写能力。
Redis中哨兵支持单哨兵和多哨兵,单哨兵是只要这个哨兵发现master宕机了就直接选取另一个master。而多哨兵是根据我们设定,达到一定数量的哨兵认为master宕机后才会进行重新选取主。
单哨兵时,会发生哨兵连接不上redis主,但客户端可以,这时哨兵会把一个redis从升级为主,这时客户端会同时有两个主能写入,在备份的时候就有可能发生数据丢失。

1.部署Redis哨兵
  1. 基于主从模型创建哨兵
  2. 创建哨兵目录
mkdir /usr/local/redis-sentinel
  1. 复制redis到当前文件夹
cp /usr/local/redis ./ -r
  1. 进入redis,删除除了bin以外的所有配置文件
cd redis/
rm -rf dump.rdb
rm -rf redis.conf
  1. 复制原始配置文件
cd /usr/local/tmp/[解压后的redis文件名]
cp sentinel.conf /usr/local/redis-sentinel/redis
  1. 编辑哨兵配置文件
mv sentinel.conf sentinel-6101.conf
vim sentinel-6101.conf

修改端口号,精灵进程,进程描述文件,日志文件,备份节点数量
port 6101
daemonize yes
pidfile /var/run/redis-sentinel-6101.pid
logfile “/var/sentinel-6101.log”
sentinel monitor mymaster [redis IP] [端口号] [备份数量]
哨兵的名字是mymaster,可以改 但是下面会有 也要改统一

  1. 复制多个配置文件
    改端口号,进程描述文件,日志文件
cp sentinel-6101.conf sentinel-6102.conf
vim sentinel-6102.conf
cp sentinel-6101.conf sentinel-6103.conf
vim sentinel-6103.conf
  1. 启动三个哨兵
cd /usr/local/sentinel
./redis-sentinel sentinel-6101.conf
./redis-sentinel sentinel-6102.conf
./redis-sentinel sentinel-6103.conf

可以自己弄个启动脚本。

vim start-sentinel.sh

复制进脚本

./redis-sentinel sentinel-6101.conf
./redis-sentinel sentinel-6102.conf
./redis-sentinel sentinel-6103.conf

查看启动的哨兵

ps aux | grep redis-sentinel
  1. 测验哨兵
    进入目录
cd /usr/local/redis
bin/redis-cli -p 6001

查看当前状态

info replication

结果是当前为主节点,从节点两个
role:master
connected_slaves:2
关闭主节点

cd /usr/local/redis
bin/redis-cli -p 6001 shutdown

连接6002

bin/redis-cli -p 6002

查看当前6002的状态

info replication

状态为
role:master
connected_slaves:1
然后测试读写

set a b
get a

再次启动主从文件夹的6001

cd /usr/local/redis-replica/redis/
bin/redis-server redis-6001.conf

查看老的主节点状态

bin/redis-cli -p 6001

查看状态

info replication

状态为
role:slave
master_port:6002
查看备份

get b

存入数据

set c c

提示只读
这种情况就是高可用

2.高可用介绍

高可用指的是当有备份情况发生时,主节点离线,不影响任何使用。
如果把备份扩展一下就是集群,在集群情况下,任意节点宕机时,不影响任何服务的提供。

可以查看sentinel的日志文件

cd /var
ls | grep sentinel
more sentinel-6101.log

空格查看下一页

三、集群

1.集群原理
  1. 集群搭建完成后由集群节点平分(不能平分时,前几个节点多一个槽)16384个槽。
  2. 客户端可以访问集群中任意节点。所以在写代码时都是需要把集群中所有节点都配置上。
  3. 当向集群中新增或查询一个键值对时,会对Key进行Crc16算法得出一个小于16384值,判断值在哪个节点上,然后就操作哪个节点。
2.搭建集群

目的:扩容、提升性能。
集群不需要哨兵,自动切换。但是节点需要哨兵,判断单个节点的主从,防止主宕机,这个节点不能用。
搭建集群为了安全性考虑,最少需要6台机器。

  1. 创建集群文件夹
cd /usr/local
mkdir redis-cluster
  1. 复制redis到文件夹中,并删除rdb文件
cp redis redis-cluster/ -r
cd redis-cluster/redis
rm -rf dump.rdb
  1. 修改配置文件,并复制多个。
mv redis.conf redis-7001.conf
vim redis-7001.conf

开启cluster-enabled,修改端口号,修改pidfile和日志文件地址,
cluster-enabled yes
port 7001
pidfile /var/run/redis-7001.pid
logfile “/var/redis-cluster-7001.log”

cluster-config-file nodes-7001.conf 同一个文件夹下启动6次需要配置。

cluster-node-timeout 15000 默认值15秒,确认超时,可以不配置。

复制多个

cp redis-7001.conf redis-7002.conf
cp redis-7001.conf redis-7003.conf
cp redis-7001.conf redis-7004.conf
cp redis-7001.conf redis-7005.conf
cp redis-7001.conf redis-7006.conf

修改其中的端口号,快照文件名,修改pidfile和日志文件地址,
port 7002
dbfilename dump-7001.rdb
pidfile /var/run/redis-7002.pid
logfile "/var/redis-cluster-7002.log
cluster-config-file nodes-7002.conf
其他的配置文件也要修改。
可以使用全文替换

:%s/7001/7003/g
  1. 启动redis
    编写启动脚本
vim startup.sh

把代码复制进脚本

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

给脚本授权

chmod 755 startup.sh

启动脚本

./startup.sh

查看启动的redis

ps aux | grep redis
  1. 用命令开启集群
./redis-cli --cluster create [ip:7001] [ip:7002] [ip:7003] [ip:7004] [ip:7005] [ip:7006] --cluster-replicas 1

ip建议设置为静态ip,ip改变集群失效
执行完命令后,询问是否按照当前配置创建集群,输入yes 而不是y。

  1. 测试集群
bin/redis-cli -p 7001 -c

端口号可以是集群中的任意一个
一定要加 -c 代表连接的是一个集群

set a a
set b b
set c c
get a
get b
get c
  1. 关闭所有redis
    编写关闭脚本
vim shutdown.sh

复制命令到脚本中

bin/redis-cli -p 7001 shutdown
bin/redis-cli -p 7002 shutdown
bin/redis-cli -p 7003 shutdown
bin/redis-cli -p 7004 shutdown
bin/redis-cli -p 7005 shutdown
bin/redis-cli -p 7006 shutdown

授权关闭脚本

chmod 755 shutdown.sh

启动脚本关闭

./shutdown.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carey Howe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值