Redis基础知识补充及持久化、备份介绍
Redis知识补充
在上一篇博客《Redis基础认识及常用命令使用(一)–技术流ken》中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis持久化和备份。
一. 启用redis的认证功能
第一步:登录redis并创建几个字符串,并退出
[root@ken ~]# redis-cli 127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> set addr jiangsu OK 127.0.0.1:6379> set tel 123456 OK 127.0.0.1:6379> MGET name addr tel 1) "zhangsan" 2) "jiangsu" 3) "123456"
127.0.0.1:6379> exit
第二步:修改redis配置文件
大约在80行处启动protect-mode,并添加一行requirepass及密码
[root@ken ~]# vim /etc/redis.conf ... 76 # By default protected mode is enabled. You should disable it only if 77 # you are sure you want clients from other hosts to connect to Redis 78 # even if no authentication is configured, nor a specific set of interfaces 79 # are explicitly listed using the "bind" directive. 80 protected-mode yes 81 requirepass 123456 82 83 # Accept connections on the specified port, default is 6379 (IANA #815344). 84 # If port 0 is specified Redis will not listen on a TCP socket. ...
第三步:重启redis
[root@ken ~]# systemctl restart redis
第四步:登录redis
可以发现登录时可以正常登录,但是已经无法查看里面的key了
[root@ken ~]# redis-cli 127.0.0.1:6379> get name (error) NOAUTH Authentication required.
第五步:验证登录
使用auth加上配置文件中定义的密码即可进行验证,再次获取key就会成功了
127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> get name "zhangsan"
二.Redis的消息模式
订阅的基本格式:
SUBSCRIBE channel [channel …] #订阅给定的一个或多个频道的信息
发送消息基本格式:
PUBLISH channel message #将信息 message
发送到指定的频道 channel
第一步:xshell开启两个窗口,并登陆redis
第二步:订阅频道
在一个窗口中执行如下命令,开启订阅
127.0.0.1:6379> SUBSCRIBE ken Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "ken" 3) (integer) 1
第三步:频道发布内容
在另外一个窗口中在此频道发布内容
127.0.0.1:6379> PUBLISH ken "my name is ken" (integer) 1 127.0.0.1:6379> PUBLISH ken "welcome to my homepage" (integer) 1
第四步:在另外一个窗口进行查看
在订阅窗口查看。可以发现已经接收到订阅频道的信息了
127.0.0.1:6379> SUBSCRIBE ken Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "ken" 3) (integer) 1 1) "message" 2) "ken" 3) "my name is ken" 1) "message" 2) "ken" 3) "welcome to my homepage"
三.Redis事务
redis和mysql一样也支持事务
MULTI
标记一个事务块的开始。
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行
EXEC
执行所有事务块内的命令
第一步:启动事务
127.0.0.1:6379> MULTI OK
第二步:输入命令、指令
127.0.0.1:6379> INCR tel QUEUED 127.0.0.1:6379> INCR tel QUEUED 127.0.0.1:6379> INCR tel QUEUED 127.0.0.1:6379> INCR tel QUEUED
127.0.0.1:6379> get tel
QUEUED
第三步:执行
127.0.0.1:6379> EXEC 1) (integer) 123457 2) (integer) 123458 3) (integer) 123459 4) (integer) 123460 5) "123460"
完整演示如下
127.0.0.1:6379> MULTI OK 127.0.0.1:6379> INCR tel QUEUED 127.0.0.1:6379> INCR tel QUEUED 127.0.0.1:6379> INCR tel QUEUED 127.0.0.1:6379> INCR tel QUEUED 127.0.0.1:6379> get tel QUEUED 127.0.0.1:6379> EXEC 1) (integer) 123457 2) (integer) 123458 3) (integer) 123459 4) (integer) 123460 5) "123460"
Redis持久化
RDB持久化
一.redis持久化会在磁盘上依赖两个文件
数据文件:rdb
日志文件:aof
二.redis实现持久化两种机制
RDB:周期的将内存中的数据备份到磁盘
AOF:借助于一个日志文件,这个文件会记录每次操作
RDB:基于快照的方式实现的,数据文件dump.rdb
三.实现RDB持久化的方式有两种
1. save,bgsave
save,同步的方式,持久化操作完成前,系统会被阻塞
bgsave,异步方式
2. 依赖提前做好的计划任务来实现
异步:子进程来完成持久化操作,持久化会将快照中的内容写入到一个临时文件中,当持久化完成了,那么就将这个临时文件改名成dump.rdb
四./etc/redis.conf配置文件中关于rdb持久化参数介绍
save 900 1 #900秒和至少1个键改变才会被保存 save 300 10 #300秒和至少10个键改变才会被保存 save 60 10000 #60秒和至少10000个键改变才会被保存 stop-writes-on-bgsave-error yes #错误发生时停止写入 rdbcompression yes #启用压缩 rdbchecksum yes #检验 dbfilename dump.rdb #rdb文件名 dir /var/lib/redis #rdb文件保存路径
AOF持久化
AOF:比rdb方式更可靠
如果想要启动aof持久化,只要启动appendonly yes即可
appendonly yes #是否启用aof持久化 auto-aof-rewrite-percentage 100 #当aof文件的大小增张了指定比例的时候,执行一次重写操作 auto-aof-rewrite-min-size 64mb #指定aof文件做重写最小值 appendfilename "appendonly.aof" #aof持久化信息保存在哪个文件中(相当于mysql的二进制日志文件) # appendfsync always #一旦执行了操作,会立刻将操作的语句记录到aof文件中 appendfsync everysec #每秒向aof文件进行一次写入操作 # appendfsync no #不主动向aof执行写入操作,由系统自行判断何时向磁盘执行写入操作 no-appendfsync-on-rewrite no aof-load-truncated yes
Redis备份
备份持久化所生成的数据(rdb文件)
注意:生产环境中备份rdb文件需要关闭持久化
第一步:查看rdb文件是否存在
[root@ken ~]# ls /var/lib/redis/dump.rdb
第二步:查看redis中的key
[root@ken ~]# redis-cli 127.0.0.1:6379> keys * 1) "name" 2) "tel" 3) "addr"
第三步:关闭rdb持久化
配置文件200行处,save后面为空,并注释掉202 203 204
198 # like in the following example: 199 # 200 save "" 201 202 #save 900 1 203 #save 300 10 204 #save 60 10000 205
第四步:重启redis
[root@ken ~]# systemctl restart redis
第五步:移动rdb文件至home下
[root@ken ~]# mv /var/lib/redis/dump.rdb /home [root@ken ~]# ls /var/lib/redis/
第六步:重启redis
[root@ken ~]# systemctl restart redis
第七步:再次登录redis查看key
发现已经为空
[root@ken ~]# redis-cli 127.0.0.1:6379> keys * (empty list or set)
第八步:复制home下的rdb文件至/var/lib/redis下
[root@ken ~]# cp /home/dump.rdb /var/lib/redis/
第九步:重启redis加载rdb文件
[root@ken ~]# systemctl restart redis
第十步:再次查看keys
发现所有的keys又回来了
[root@ken ~]# redis-cli 127.0.0.1:6379> keys * 1) "name" 2) "tel" 3) "addr"
原文地址:https://www.cnblogs.com/it-peng/p/11393876.html
- Hbase源码系列之regionserver应答数据请求服务设计
- 大数据基础系列之kafkaConsumer010+的多样demo及注意事项
- 大数据基础系列之kafka011生产者缓存超时,幂等性和事务实现
- 大数据基础系列之提交spark应用及依赖管理
- 大数据集群安全系列之kafka使用SSL加密认证
- 基于zookeeper leader选举方式一
- Spark与mongodb整合完整版本
- spark源码系列之累加器实现机制及自定义累加器
- Scala语法基础之隐式转换
- SparkSql的优化器-Catalyst
- Scala语言基础之结合demo和spark讲实现链式计算
- Spark高级操作之json复杂和嵌套数据结构的操作二
- Spark高级操作之json复杂和嵌套数据结构的操作一
- hadoop系列之基础系列
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Angular依赖注入的一个例子和注入原理单步调试
- Angular依赖注入的一个常见错误NullInjectorError,No provider for XXX
- Redis系列(十二)scan Info Object等特殊命令集合
- 使用纯CSS给网站文章中的外链添加小图标
- iOS美团同款"ZSource"二进制调试实现
- 使用picocm来进行Linux下的串口调试
- vue-drawer-layout实现手势滑出菜单栏
- iOS面试之UI大全
- 基于Ant Design Vue封装一个表单控件
- Rust闭包的虫洞穿梭
- TS 设计模式08 - 发布订阅模式
- GrowingIO 数据采集 iOS SDK 测试实践
- Kubernetes 1.19.0——Pod(2)
- 极速40分钟写出SQLite数据展示与导出功能【技术创作101训练营】
- opencv cudacodec VideoReader 报错