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"
Redis基础知识补充及持久化、备份介绍的更多相关文章
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化
引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...
- 【进阶之路】Redis基础知识两篇就满足(一)
导言 大家好,我是南橘,一名练习时常两年半的java练习生,这是我在博客园的第一篇文章,当然,都是要从别处搬运过来的,不过以后新的文章也会在博客园同步发布,希望大家能多多支持^_^ 这篇文章的出现,首 ...
- redis基础知识详解
一.redis基础知识 1.Redis是什么Redis是一个开源的key-value存储系统. 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表 ...
- 【进阶之路】Redis基础知识两篇就满足(二)
导言 大家好,我是南橘,一名练习时常两年半的java练习生,这是我在博客园的第二篇文章,当然,都是要从别处搬运过来的,不过以后新的文章也会在博客园同步发布,希望大家能多多支持^_^ 这篇文章的出现,首 ...
- redis笔记之两种持久化备份方式(RDB & AOF)
Redis支持的两种持久化备份方式(RDB & AOF) redis支持两种持久化方式,一种是RDB,一种是AOF. RDB是根据指定的规则定时将内存中的数据备份到硬盘上,AOF是在每次执行命 ...
- Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令
Redis基础知识 1).测试redis服务的性能: redis-benchmark 2).查看redis服务是否正常运行: ping 如果正常---pong 3).查看redis服务器的统计信息: ...
- 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
- Redis基础知识详解(非原创)
文章大纲 一.Redis介绍二.Redis安装并设置开机自动启动三.Redis文件结构四.Redis启动方式五.Redis持久化六.Redis配置文件详解七.Redis图形化工具八.Java之Jedi ...
随机推荐
- 数据结构与算法笔记(java)目录
数据结构: 一个动态可视化数据结构的网站 线性结构 数组 动态数组 链表 单向链表 双向链表 单向循环链表 双向循环链表 栈 栈 队列 队列 双端队列 哈希表 树形结构 二叉树 二叉树 二叉搜索树 A ...
- First-Spike-Based Visual Categorization Using Reward-Modulated STDP
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 强化学习(RL)最近以击败欧洲围棋冠军等重大成就重新受到欢迎.在这里,我们第一次表明,RL可以有效地用于训练一个脉冲神经 ...
- Protocol buffers--python 实践 简介以及安装与使用
简介: Protocol Buffers以下简称pb,是google开发的一个可以序列化 反序列化object的数据交换格式,类似于xml,但是比xml 更轻,更快,更简单.而且以上的重点突出一个跨平 ...
- 【Flutter 实战】动画序列、共享动画、路由动画
老孟导读:此篇文章是 Flutter 动画系列文章第四篇,本文介绍动画序列.共享动画.路由动画. 动画序列 Flutter中组合动画使用Interval,Interval继承自Curve,用法如下: ...
- python接口测试自动化之python基础语法
一.pycharm的使用和python基本语法 (一).pycharm的使用和python环境 1.python以及pycharm的安装 python 的版本选择:3.x 版本,不要安装2.x 版本, ...
- MySQL集群搭建方案(PXC)
服务器快过期了,清一点库存,把运维这块的知识复习下 为什么要搭MySQL集群 技术层面上,传统的单节点数据库,万一宕机了,就凉凉了.容灾性能差.抗并发能力有限,数据量大的时候查询有瓶颈.学习层面上,作 ...
- day43:CSS样式相关
目录 1.高度和宽度 2.字体相关 3.字体对齐 4.颜色设置 5.背景 6.边框 7.盒子模型 8.display属性 9.伪元素选择器 10.伪类选择器 11.浮动 12.文字装饰 13.相对定位 ...
- JMeter尝鲜
最近打算对一个线上HTTP接口做下压力测试,选择JMeter做为压测工具. 关于JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具.可以用于对静态的和动态的资源 ...
- 【Linux利用远程SSH连接】SecureCRT中文出现乱码解决办法 Linux服务器技术
1. 修改远程linux机器的配置 vim /etc/sysconfig/i18n 把LANG改成支持UTF-8的字符集 如: LANG="zh_CN.UTF-8″ 或者 ...
- 英文ubuntu中的乱码,输入法问题 、mint字体发虚
英文ubuntu文本文件默认编码是utf-8,windows下是gbk,所以产生乱码问题. 1.前言 运行命令查看系统编码 $locale 结果如下: LANG=en_US.UTF-8 LANGUAG ...