Redis
• Redis的单机安装和部署
1.yum install -y gcc
2.下载源码:
wget https://github.com/redis/redis/archive/refs/tags/6.2.14.tar.gz
3.解压缩:
tar -xvzf
4.编译:
radis目录下:make -j $(nproc)
5.安装:
make install
• Redis的启动:
▪ 前台启动:
redis-server
▪ 后台启动:
redis-server /etc/redis.conf
• Redis连接:redis-cli
• 默认端口:6379
**▶ Redis数据库的操作**
• 全局性操作:
▪ 查看所有的key值:
keys *
▪ 切换库:
select 共有16个库(0~15)
▪ 删除当前库所有数据:
flushdb
▪ 删除所有库所有数据:
flushall
• 字符串操作
▪ 增
单个增加:
set k1 value1
单个增加不覆盖:
setnx k1 new_value1
多个增加覆盖:
mset k2 value2 k3 value3
增加的时候配置key的有效期(单位是秒):
setex name 10 mike
设置新值的同时获得旧值:
getset name mike
▪ 删
del k5
获取值的同时删除:
getdel key
▪ 改
覆盖原来的值:
set k1 new_value
多个修改
mset
设置区间的值:
setrange name 4 wang #在第四个字符后追加wang
追加:
append name haha
▪ 查
单个查询:
get k1
多个查询
mget k1 k2 k3
获取key的过期时间
ttl name
查看字符串的长度
strlen name
字符串截取
set k2 bbwangwu
getrange k2 2 5
结果:wang
**▶ Redis配置文件详解**
• bind 127.0.0.1 -::1 #这种只能本地连接,要远程连接需要注释掉
• protected-mode yes #保护模式,远程连接要配置为no
• daemonize yes #是否开启后台启动
• requirepass 密码 #开启密码认证
若开启,redis-cli之后需要:auth 密码,进行认证
• tcp-backlog 511 #tcp建立三次握手队列总和(未完成+已完成值)不要过大
• timeout 0 #超时时长,0为永不超时,超时会断开客户端连接
• tcp-keepalive 300 #检查不活跃的链接时长,300s探测一次
• pidfile 地址 #进程id存放位置
• loglevel notice #日志等级
• logfile "" #日志文件位置
**▶ Redis持久化(把数据写入硬盘)**
**• RDB(默认开启)**
redis会创建一个fork子进程,首先把redis中内存的数据同步到临时存放数据区,之后再同步到dump.rdb这个磁盘文件上,实现持久化存储
▪ save 300 100:300秒或者有100个key发生变化,自动开启持久化
▪ dbfilename dump.rdb:默认文件名
▪ dir ./ :存放rdb的路径,某人是服务端程序所在目录,编译安装的话在/usr/local/bin下
**• AOF(默认不开启,两个都开启时,以AOF为准,不会去读取RDB)**
▪ 开启AOF:
appendonly on
▪ 默认文件名,路径跟RDB一样:
appendfilename "文件名"
• 配置AOF时若之前配置了RDB并且数据库中有数据,根据读取规则,不会读取RDB中的数据,感觉就是数据丢失了
解决方法:
1.备份dump.rdb文件
2.检查dump.rdb文件完整性
3.修改配置文件关闭AOF
4.重启redis,查看数据是否都在
5.临时开启appendonly
config set appendonly yes
6.重新生产appendonly日志
bgrewriteaof
7.关闭redis,修改appendonly yes
8.重启redis,查看数据是否恢复
**▶ RDB和AOF的优劣**
**RDB**
优势| 劣势
---|---
适合大规模的数据恢复(rdb单份完整二进制快照文件,当要恢复几十GB的大量数据,只需要把dump.rdb文件放到redis工作目录即可)| fork的时候,内存中的数据被克隆一份,大致2倍的膨胀性需求
更适用于对数据完整性和一致性要求不高的| fork时使用了写时复制拷贝技术,如果数据庞大的话比较消耗性能
节约磁盘空间(RDB是经过压缩的二进制镜像文件)| 因为备份周期的缘故,可能会丢失数据
恢复速度快(直接把二进制快照载入内存)|
**AOF**
优势| 劣势
---|---
备份机制更加稳健(每执行一条写命令,立刻刷盘)| 比起RDB占用更多的磁盘空间(存储一条条原始文本命令,占用空间高)
可读的日志文件,通过操作AOF文件,可以处理误操作(AOF是纯文本格式,人类可读文件,非二进制文件)| 恢复和备份速度更慢(回复时解析每一行命令,一条一条重新执行写命令重建数据)
| 每次读写都同步的话,有一定性能损耗
| 存在个别bug,操作恢复失败
**▶ Redis主从复制**
• 主节点配置:
▪ requirepass 密码 #主节点链接的密码
• 从节点配置:
▪ replicaof 主节点IP 6379 #配置复制主节点信息
▪ masterauth 密码 #配置复制主节点密码,必须跟主节点密码一致
• 查看复制信息:
redis-cli------->info replication
• 反客为主:
replicaof no one #客变为主
**▶ 哨兵模式**
主节点挂了,会自动切换主节点
• 配置文件:/etc/sentinel.conf
sentinel monitor mymaster 主节点IP 6379 1
#1代表有多少个哨兵同意切换新主,只有一个哨兵同意就会切换
一般为:哨兵总数/2+1取整,例如3个哨兵,配置为2
sentinel auth-pass mymaster 密码
#若主配置认证信息,哨兵也需要配置认证信息
• 启动哨兵模式
redis-sentinel /etc/sentinel.conf
**▶ Redis集群**
1.6台服务器,修改配置文件(6台一样):需要配置密码认证
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
2.启动服务(6台一起启动):
redis-server /etc/redis.conf
3.在其中的一台设备上启动同步:
redis-cli --cluster create --cluster-replicas 1 ip1:6379 ip2:6379........ip6:6379 -a 密码
4.登录到集群:
redis-cli -c -h 127.0.0.1 -p 6379 -a 密码
-c:启动集群模式登录 -a:登录密码
5.设定单个key:
set k1 123
获取key的槽位是多少:
cluster keyslot k1
获取集群节点信息:
cluster nodes