ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis

2021-11-29 13:34:07  阅读:142  来源: 互联网

标签:aof 0.1 redis 6379 conf rdb


一、什么是redis

redis是开源,BSD许可,高级的key-value存储系统。可以用来存储字符串,哈希结构,链表,集合,因此常用来提供数据结构服务。

1.1 redis和memcache区别

  1. redis可以用来做存储,而memcache是用来做缓存(redis的持久化)
  2. 存储的数据有结构,对于memcache来说,存储的数据只有字符串,而redis则可以存储字符串,链表,哈希结构,集合,有序集合

二、安装

2.1 官网下载

建议下载stable版本

官网地址:http://redis.io

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

2.2 解压安装

[root@vms27 ~]# tar xf redis-6.2.6.tar.gz 
[root@vms27 ~]# cd redis-6.2.6/
[root@vms27 ~]# make

[root@vms27 redis-6.2.6]# make test
cd src && make test
make[1]: 进入目录“/root/redis-6.2.6/src”
    CC Makefile.dep
make[1]: 离开目录“/root/redis-6.2.6/src”
make[1]: 进入目录“/root/redis-6.2.6/src”
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] 错误 1
make[1]: 离开目录“/root/redis-6.2.6/src”
make: *** [test] 错误 2

[root@vms27 redis-6.2.6]# yum install -y tcl
[root@vms27 redis-6.2.6]# make test

[root@vms27 redis-6.2.6]# make prefix=/usr/local/redis install

2.3 安装后的执行命令在src目录下

src/redis-benchmark    性能测试
src/redis-check-aof      检查aof日志
src/redis-check-rdb      检查rdb日志
src/redis-cli                 连接用的客户端
src/redis-server           redis服务进程
redis.conf                    配置文件

启动程序 
[root@vms27 redis-6.2.6]# src/redis-server redis.conf

端口:6379

2.4 修改redis.conf

让redis以守护进程方式运行
[root@vms27 redis-6.2.6]# sed -i '/daemonize no/c daemonize yes' redis.conf 
[root@vms27 redis-6.2.6]# src/redis-server redis.conf

三、redis的常用命令及数据结构的操作

 3.1 通过key操作

// 设置key
127.0.0.1:6379> set age 34
// 查看指定key值
127.0.0.1:6379> get age
// 查看有多少key
    支持正则匹配 127.0.0.1:6379> keys a*
127.0.0.1:6379> keys *
// 随机获取key
127.0.0.1:6379> randomkey
// 查看key类型
127.0.0.1:6379> type age
// 判断key是否存在
127.0.0.1:6379> exists age
    1表示存在,0表示不存在
// 删除指定key
127.0.0.1:6379> del age
// 修改key名称
127.0.0.1:6379> rename key newkey
    如果newkey存在则会覆盖newkey的值
// 修改key名称:如果newkey存在则执行不成功
127.0.0.1:6379> renamenx key newkey
// 切换库
127.0.0.1:6379> select 1
    redis默认为0号库,默认启动开启16个库为0~15在redis.conf的databases 16配置参数
// 移动key到指定库
127.0.0.1:6379> move key db
// 设置key的有效期
127.0.0.1:6379[1]> expire key seconds
// 查看指定key生命周期
127.0.0.1:6379[1]> ttl user
    n:剩余多少秒
    -1:为永久
    -2:不存在
// 修改指定key永久有效
127.0.0.1:6379[1]> persist key
通用key操作命令

3.2 字符串类型的操作

// 设置key
127.0.0.1:6379[1]> set name tome [EX seconds|PX milliseconds][NX|XX]
EX seconds: 生命周期秒
PX milliseconds:生命周期
127.0.0.1:6379[1]> set name tom px 8000
NX key不存在才可以设置
XX key必须存在才可以进行操作
127.0.0.1:6379[1]> set name tom xx
// 批量设置key
127.0.0.1:6379[1]> mset name tom age 24 sex boy
// 设置字符串的偏移值
127.0.0.1:6379[1]> setrange name 2 i
原数据:tom   修改后toi
如果原位置没有数据则新增
// 追加内容
127.0.0.1:6379[1]> append name o
// 根据偏移量获取指定范围数据
127.0.0.1:6379[1]> getrange name 0 2
// 获取之间的值指定新的值
127.0.0.1:6379[1]> getset name tom
字符串操作

 四、位图法统计活跃用户

// 初始设置
127.0.0.1:6379[1]> setbit mon 10000 0
// 谁登录设置谁为1,如第4个人
127.0.0.1:6379[1]> SETBIT thu 3 1
// 判断这个人登录统计
127.0.0.1:6379[1]> bitop and res mon thu
// 获取
127.0.0.1:6379[1]> getbit res

五、set结构及命令详解

六、事务及锁的应用

七、消息发布与订阅

八、持久化

主从:通过从服务器保持和持久化,如mongoDB的replication sets配置
日志:操作生成相关日志,并通过日志来恢复数据
couchDB对于数据内容,不修改,只追加,则文件本身就是日志,不会丢失数据

8.1 rdb快照

rdb工作原理:
每隔`N分钟或N次`写操作后,
从内存ducp数据形成rdb文件,
`压缩`放在备份`目录`
注``内的部分可通过参数来配置

// 3600秒发生一次change则保存至硬盘
save 3600 1 
// 300秒内发生100次change则保存至硬盘
save 300 100
// 60秒内发生10000次change则保存至硬盘
save 60 10000
// 以上选项注释后则不进行数据存储至硬盘

// rdb如果导出错误暂停写入
stop-writes-on-bgsave-error yes
// 是否进行数据压缩
rdbcompression yes
// 存储和加载rdb文件时校验
rdbchecksum yes
// 设置rdb文件名
dbfilename dump.rdb
// 设置工作目录
dir ./

rdb的缺陷
在2个保存点之间,断电,将会丢失1-N分钟的数据。

rdb工作原理
redis-server进程监控,如果达到自定义的触发条件则调用rdbdump持久化保存到硬盘

8.2 aof日志(append of file)

vim redis.conf
// 是否打开aof日志功能
appendonly no
// 每1个命令,都立即同步到aof安全,速度慢
appendfsync always
// 折衷方案,每秒写1次
appendfsync everysec
// 写入工作交给操作系统,由操作系统判断缓冲区大小统一写入aof同步频率低,速度快
appendfsync no
// 正在导出rdb快照的过程中要不要停止同步aof
no-appendfsync-on-rewrit yes
// aof文件大小比旧城改造上次重写时的大小,增长率100%时,重写 即同一个Key反复修改则执行
auto-aof-rewrite-percentage 100
// aof文件至少超过64M时重写
auto0aof-rewrite-min-size 64mb
// aof文件存储位置
appendfilename appendonly.aof

注:在dump rdb过程中,aof如果停止同步,会不会丢失?
答:不会,所有的操作缓存在内存的队列里,dump完成后,统一操作

注:aof重写指的是什么?
答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.
以解决 aof日志过大的问题

问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?
答: aof

问: 2种是否可以同时用?
答: 可以,而且推荐这么做


问: 恢复时rdb和aof哪个恢复的快
答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行 

九、主从复制

9.1 集群的作用

1、主从备份 防止主机宕机
2、读写分离,分担master的任务
3、任务分离,如从服务器分别分担备份工作与计算工作

9.2 集群架构

master->slave1
master->slave2
//动作slave1修改成master
//slave2修改master为slave1

master->slave1->slave2
// 一步完成

// 同步原理
// 初始化
slave -->自动同步-->master
master-->dump rdb -->slave
master-->缓冲的aof-->slave
// 通知slave进行同步
master -->replicationFeedSlaves-->slave

9.3 主从配置

主机名 地址 备注
vms25 192.168.26.25 master
vms26 192.168.26.26 slave1
vms27 192.168.26.27 slave2
# redis增加密码
// 配置密码在master vim redis.conf requirepass passwd // 从节点配置 添加如下 masterauth passwd
均修改redis.conf文件
// master 配置
// 设置一台从节点产生aof,rdb
[root@vms25 redis-6.2.6]# sed -i '$a bind 192.168.26.25' redis.conf
[root@vms25 redis-6.2.6]# sed -i '/daemonize no/c daemonize yes' redis.conf
// 配置aof
[root@vms25 redis-6.2.6]#  sed -i '/appendonly no/c appendonly yes' redis.conf
src/redis-server redis.conf


// slave1 配置
[root@vms26 redis-6.2.6]# sed -i '$a bind 192.168.26.26' redis.conf

// 配置rdb
[root@vms26 redis-6.2.6]# sed -i '$a save 3600 1' redis.conf
[root@vms26 redis-6.2.6]# sed -i '$a save 300 100' redis.conf           
[root@vms26 redis-6.2.6]# sed -i '$a save 60 10000' redis.conf    
[root@vms26 redis-6.2.6]#  sed -i '$a slaveof 192.168.26.25 6379' redis.conf 
[root@vms26 redis-6.2.6]# sed -i '/daemonize no/c daemonize yes' redis.conf
src/redis-server redis.conf


// slave2 配置
[root@vms27 redis-6.2.6]# sed -i '$a bind 192.168.26.27' redis.conf
[root@vms27 redis-6.2.6]# sed -i '$a slaveof 192.168.26.25 6379' redis.conf 
[root@vms27 redis-6.2.6]# sed -i '/daemonize no/c daemonize yes' redis.conf
src/redis-server redis.conf



//连接测试在vms25

/src/redis-cli -h  192.168.26.25

set user tom

//在vms26测试

/src/redis-cli  -h  192.168.26.26

get user
redis主从配置之星型结构
redis集群配置简要
Master配置
1、关闭rdb快照
2、可以开启aof日志

Slave配置
1、声明slave-of
2、配置密码【如果master有密码】
3、【某1个】slave打开rdb快照功能
4、配置是否只读【slave-read-only】

// redis 主从复制缺陷
每次slave断开后(无论是主动断开,还是网络故障)再连接master
都要master全部dump出来rdb,再aof,即同步的过程都要重新执行1遍

所以要记住--多台slave不要一下都启动起来,否则master的I/O剧增

十、redis常用运维命令

TIME 查看时间戳与微秒数
DBSIZE 查看当前库中的key数量
BGREWRITEAOF 后台进程重写AOF
BGSAVE       后台保存rdb快照
SAVE         保存rdb快照
LASTSAVE     上次保存时间
SLAVEOF      设为slave服务器
FLUSHALL     清空所有db
FLUSHDB      清空当前db
SHUTDOWN[""|save|nosave]     断开连接,关闭服务器
SLOWLOG   显示慢查询
INFO      显示服务器信息
CONFIG GET 获取配置信息
CONFIG SET 设置配置信息
MONITOR    打开控制台
SYNC       主从同步
CLIENT LIST 客户端列表
CLIENT KILL 关闭某个客户端
CLIENT SETNAME 为客户端设置名字
CLIENT GETNAME 获取客户端名字
// 慢日志查询
config set/get 也可以在redis.conf配置
// 执行命令时间超过10000微秒则记录
slowlog-log-slower-than 10000
// 查看慢日志记录的命令
slowlog-get
// 设置慢日志大小范围
slow-log-max-len

十一、aof恢复与rdb服务器间迁移

// master
step 1
当flushall后操作
shutdown nosave
step 2
// 编辑aof文件删除aof中关联flushall的相关三行命令
[root@vms25 redis-6.2.6]# vim appendonly.aof
*1
$8
flushall
step 3 启动redis
 src/redis-server redis.conf
aof&rdb备份恢复
// 检查rdb文件
src/redis-check-dump dump6380.rdb
// 在redis进程运行时rdb处于开启的状态是会被占用
// 需要关闭redis,然后复制rdb文件
kill redis
// 复制rdb文件到指定目录
cp dump.rdb dest
// 启动redis
恢复数据
rdb导入

十二、监控工具sentinel

// salve1配置
// 设置salve1为master
slaveof no one
// 配置可写入
confgi set slave-read-only yes

// 其它slave再指定slave1为master
slaveof 192.168.26.26:6379
手动配置slave升级成master
默认端口 26379
port 26379
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile ""
dir /tmp
// 几个slave发现无法连接则确认它为宕机
sentinel monitor mymaster 127.0.0.1 6379 2
##master被当前sentinel实例认定为“失效”的间隔时间  
##如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么  
##当前sentinel就认为master失效(SDOWN,“主观”失效)  
##<mastername> <millseconds>  
##默认为30秒  
sentinel down-after-milliseconds mymaster 30000
acllog-max-len 128
// 平行同步
sentinel parallel-syncs mymaster 1
// 超时未完成发送信息
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no
// 所有设备修改sentinel.conf文件
// 地址均为master地址 2为监测sentinel的节点如果2个未发现则执行
sentinel monitor mymaster 192.168.26.26 6379 2
// 所有启动redis和sentinel
src/redis-server redis.conf
src/redis-server sentinel.conf --sentinel
// 当master断开时会自动切换master
 

// 如果指定slave优先为master,则在redis.conf配置优先级
slave-priority 100  数值越小越靠前
redis集群配置sentinel

 

标签:aof,0.1,redis,6379,conf,rdb
来源: https://www.cnblogs.com/felx/p/15616668.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有