Redis4.0 之持久化存储
redis如果提供缓存服务,可以关闭所有持久化存储,如此一来redis重启后所有数据会丢失
开启rdb或aof持久化存储,能把redis中的数据持久化到磁盘中。
rdb和aof对性能都有影响,所以建议持久化的操作在从库上进行
Redis的rdb存储方式,使用save配置开启rdb存储或者关闭rdb存储
# 默认情况下rdb持久化存储是开启的
[root@redis01 ~]# redis-cli -h 127.0.0.1 config set save "" # 关闭rdb存储
OK
[root@redis01 ~]# redis-cli -h 127.0.0.1 config rewrite # 保存配置
OK
[root@redis01 ~]# redis-cli -h 127.0.0.1 config set save "180 1 120 10 60 10000" # 开启rdb
OK
[root@redis01 ~]# redis-cli -h 127.0.0.1 config rewrite # 保存配置
OK
进行数据写入 , 观察rdb存储日志
# 输入一万条数据
[root@redis01 ~]# for line in `seq -w `;do redis-cli set key_${line} value1_${line};done
# 查看日志
[root@redis01 ~]# tail - /data/redis/redis.log
:M Oct ::39.026 * changes in seconds. Saving... # 60秒内发生了一万条数据变化,出发rdb存储
:M Oct ::39.027 * Background saving started by pid
:C Oct ::39.032 * DB saved on disk
:C Oct ::39.033 * RDB: MB of memory used by copy-on-write
:M Oct ::39.127 * Background saving terminated with success
Redis也提供了bgsave命令能够立刻出发rdb存储
[root@redis01 ~]# redis-cli save # 会阻塞前端客户数据写入
OK
[root@redis01 ~]# redis-cli bgsave # 后台启动新进程进行rdb存储
Background saving started
[root@redis01 ~]# tail - /data/redis/redis.log
:M Oct ::44.263 * DB saved on disk # save触发rdb存储
:M Oct ::02.738 * Background saving started by pid 85602 # bgsave触发的rdb存储
:C Oct ::02.744 * DB saved on disk
:C Oct ::02.744 * RDB: MB of memory used by copy-on-write
:M Oct ::02.835 * Background saving terminated with success
Redis的AOF存储方式
aof持久化存储会把用户每次的操作都记录到文件中
# 动态开启和关闭aof
[root@redis01 ~]# redis-cli -h 127.0.0.1 config set appendonly yes # 开启aof
OK
[root@redis01 ~]# redis-cli -h 127.0.0.1 config rewrite
OK
[root@redis01 ~]# redis-cli -h 127.0.0.1 config set appendonly no # 关闭aof
OK
[root@redis01 ~]# redis-cli -h 127.0.0.1 config rewrite
OK
写入数据, 查看aof文件
[root@redis01 ~]# cd /data/redis/
[root@redis01 redis]# ls
appendonly.aof dump.rdb redis.log redis.pid
[root@redis01 redis]# du -sh appendonly.aof
460K appendonly.aof
[root@redis01 redis]# du -sh dump.rdb
236K dump.rdb
# 写入数据
[root@redis01 redis]# for line in `seq -w `;do redis-cli set key_${line} value1_${line};done
# 查看aof和rdb文件大小
[root@redis01 redis]# du -sh appendonly.aof
960K appendonly.aof
[root@redis01 redis]# du -sh dump.rdb
236K dump.rdb
重写aof文件 , 整理相同的key , 写入最后的有效值
执行AOF文件重写操作会重新创建一个当前AOF文件的体积优化版本
即使BGREWRITEAOF执行失败,也不会有任何数据丢失,因为旧的AOF文件在BGREWRITEAOF成功之前不会被修改
重写操作只会在没有其他持久化工作在后台执行时被触发
从Redis2.4开始,AOF重写由Redis自行触发,BGREWRITEAOF仅仅用于手动触发重写操作
[root@redis01 redis]# > appendonly.aof # 清空aof文件
[root@redis01 redis]# ll
总用量
-rw-r--r--. root root 10月 : appendonly.aof
-rw-r--r--. root root 10月 : dump.rdb
-rw-r--r--. root root 10月 : redis.log
-rw-r--r--. root root 10月 : redis.pid
[root@redis01 redis]# redis-cli bgrewriteaof # 手动触发aof重写
Background append only file rewriting started
[root@redis01 redis]# ll
总用量
-rw-r--r--. root root 10月 : appendonly.aof # redis里的所有数据会被重新写入aof
-rw-r--r--. root root 10月 : dump.rdb
-rw-r--r--. root root 10月 : redis.log
-rw-r--r--. root root 10月 : redis.pid
[root@redis01 redis]# > appendonly.aof
[root@redis01 redis]# ll
总用量
-rw-r--r--. root root 10月 : appendonly.aof
-rw-r--r--. root root 10月 : dump.rdb
-rw-r--r--. root root 10月 : redis.log
-rw-r--r--. root root 10月 : redis.pid
[root@redis01 redis]# redis-cli set weihan mingming
OK
[root@redis01 redis]# ll
总用量
-rw-r--r--. root root 10月 : appendonly.aof
-rw-r--r--. root root 10月 : dump.rdb
-rw-r--r--. root root 10月 : redis.log
-rw-r--r--. root root 10月 : redis.pid
[root@redis01 redis]# cat appendonly.aof
*
$
set
$
weihan
$
mingming
[root@redis01 redis]# redis-cli del weihan mingming
(integer)
[root@redis01 redis]# cat appendonly.aof
*
$
set
$
weihan
$
mingming
*
$
del
$
weihan
$
mingming
[root@redis01 redis]# ll
总用量
-rw-r--r--. root root 10月 : appendonly.aof
-rw-r--r--. root root 10月 : dump.rdb
-rw-r--r--. root root 10月 : redis.log
-rw-r--r--. root root 10月 : redis.pid
我们向redis添加了一个key,又删除了这个key,redis数据库从本质上来说并没有新增任何数据 但是aof文件仍旧把操作都给记录了 这样就会导致aof文件最终会非常大,所以aof文件的优化,就是让aof文件进行重写,只记录数据的增量部分 如此aof文件就小很多了
aof配置自动rewrite机制
[root@redis01 redis]# cd /usr/local/redis/conf/
[root@redis01 conf]# vim redis.conf
auto-aof-rewrite-percentage # 默认100%,也就是aof增加一倍后考虑rewrite,两个条件要同时满足
auto-aof-rewrite-min-size 64mb # 默认64mb,也就是aof达到64M后考虑rewirte,两个条件要同时满足
# 获取aof-rewrite配置
[root@redis01 conf]# redis-cli config get auto-aof-rewrite*
) "auto-aof-rewrite-percentage"
) ""
) "auto-aof-rewrite-min-size"
) ""
# 进行aof自动重写
[root@redis01 conf]# redis-cli config set auto-aof-rewrite-min-size
OK
[root@redis01 conf]# redis-cli config get auto-aof-rewrite*
) "auto-aof-rewrite-percentage"
) ""
) "auto-aof-rewrite-min-size"
) ""
[root@redis01 conf]# redis-cli config rewrite
OK
[root@redis01 conf]# cd /data/redis/
[root@redis01 redis]# > appendonly.aof
[root@redis01 redis]# du -sh appendonly.aof
0K appendonly.aof
[root@redis01 redis]# for line in `seq -w `;do redis-cli set key2_${line} value2_${line};done
[root@redis01 redis]# du -sh appendonly.aof
48K appendonly.aof
[root@redis01 redis]# for line in `seq -w `;do redis-cli set key2_${line} value2_${line};done
[root@redis01 redis]# du -sh appendonly.aof
128K appendonly.aof
[root@redis01 redis]# du -sh appendonly.aof
92K appendonly.aof # 自动触发了aof重写机制
Redis的删除算法
# Redis的键值设置有效期 , 过期自动删除
redis-cli flushall命令 # 手动清空redis里所有数据
[root@redis01 redis]# redis-cli set name weihan
OK
[root@redis01 redis]# redis-cli ttl name
(integer) -1 # -1代表key永不过期
[root@redis01 redis]# redis-cli expire name 10 # 设定key过期时间为10s
(integer)
[root@redis01 redis]# redis-cli ttl name # 查看key剩余的存活时间
(integer)
[root@redis01 redis]# redis-cli ttl name
(integer)
[root@redis01 redis]# redis-cli ttl name
(integer)
[root@redis01 redis]# redis-cli ttl name
(integer)
[root@redis01 redis]# redis-cli ttl name
(integer)
[root@redis01 redis]# redis-cli ttl name
(integer) -
[root@redis01 redis]# redis-cli get name # key已经因为过期被删除
(nil)
Redis的最大内存设置
[root@redis01 redis]# redis-cli config get maxmemory
) "maxmemory"
) "" # 默认对内存无限制
[root@redis01 redis]# redis-cli config set maxmemory 1M # 设置限制为1M
OK
[root@redis01 redis]# redis-cli config get maxmemory
) "maxmemory"
) ""
Redis的内存清理算法
volatile-lru : 使用LRU算法删除键(key需要设置过期时间)
volatile-random : 随机删除键(key需要设置过期时间)
volatile-ttl : 删除ttl最小的键(key需要设置过期时间)
allkeys-lru : 使用LRU算法删除键(所有key)
allkeys-random : 随机删除键(所有key)
noeviction : 不进行任何的操作,只返回错误,默认
[root@redis01 redis]# redis-cli config get maxmemory-policy
) "maxmemory-policy"
) "noeviction" # 默认算法
# 模拟内存溢出
[root@redis01 redis]# for line in `seq -w `;do redis-cli set key_${line} value_${line};done
[root@redis01 redis]# redis-cli set name weihan
(error) OOM command not allowed when used memory > 'maxmemory'.
[root@redis01 redis]# redis-cli
127.0.0.1:> set name weihan
(error) OOM command not allowed when used memory > 'maxmemory'. # 测试会报错
设置删除算法
# 将删除算法设置为volatile-lru
[root@redis01 redis]# redis-cli config get maxmemory-policy
) "maxmemory-policy"
) "noeviction"
[root@redis01 redis]# redis-cli config set maxmemory-policy volatile-lru
OK
[root@redis01 redis]# redis-cli config get maxmemory-policy
) "maxmemory-policy"
) "volatile-lru"
[root@redis01 redis]# redis-cli config rewrite
OK
[root@redis01 redis]# redis-cli get key_00111
"value1_00111"
[root@redis01 redis]# redis-cli expire key_00111
(integer)
[root@redis01 redis]# redis-cli ttl key_00111
(integer) -
[root@redis01 redis]# redis-cli get key_00111
(nil)
# 测试发现 volatile-lru算法可以实现当内存达到了预设的最大值后,会优先删除有过期时间的key
Redis禁用屏蔽危险命令
FLUSHALL和FLUSHDB会清除redis的数据,比较危险
KEYS在键过多的时候使用会阻塞业务请求
# 配置代码如下, 写入配置文件即可,此配置无法平滑更新
[root@redis01 redis]# vim /usr/local/redis/conf/redis.conf
rename-command FLUSHALL "" # 将命令改名成空
rename-command FLUSHDB "" # 将命令改名成空
rename-command KEYS "" # 将命令改名成空
[root@redis01 redis]# redis-cli shutdown
[root@redis01 redis]# redis-server /usr/local/redis/conf/redis.conf
[root@redis01 redis]# redis-cli flushall
(error) ERR unknown command 'flushall'
[root@redis01 redis]# redis-cli flushdb
(error) ERR unknown command 'flushdb'
[root@redis01 redis]# redis-cli
127.0.0.1:> keys *
(error) ERR unknown command 'keys'
Redis4.0 之持久化存储的更多相关文章
- Redis4.0之持久化存储
一,redis概述与实验环境说明 1.1 什么是redis redis是一种内存型的NoSQL数据库,优点是快,常用来做缓存用 redis存储数据的方法是以key-value的形式 value类型 ...
- redis系列--redis4.0深入持久化
前言 在之前的博文中已经详细的介绍了redis4.0基础部分,并且在memcache和redis对比中提及redis提供可靠的数据持久化方案,而memcache没有数据持久化方案,本篇博文将详细介绍r ...
- 自顶向下redis4.0(5)持久化
redis4.0的持久化 目录 redis4.0的持久化 简介 正文 rdb持久化 save命令 bgsave命令 rdb定期保存数据 进程结束保存数据 aof持久化 数据缓冲区 刷新数据到磁盘 ap ...
- Redis4.0.0 安装及配置 (Linux — Centos7)
本文中的两个配置文件可在这里找到 操作系统:Linux Linux发行版:Centos7 安装 下载地址,点这里Redis4.0.0.tar.gz 或者使用命令: wget http://downlo ...
- redis-4.0.8 配置文件解读
# Redis configuration file example.## Note that in order to read the configuration file, Redis must ...
- centos7.5 安装 redis-4.0.11
1.下载redis包 wget wget http://download.redis.io/releases/redis-4.0.11.tar.gz 2.解压安装 #解压 .tar.gz #安装 cd ...
- 阿里云 CentOS7安装redis4.0.9并开启远程访问
1 安装redis编译的c环境 yum install gcc-c++ redis是c语言开发的,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境. 如果没有gcc环境,需要安装gcc ...
- Redis(二)CentOS7安装Redis4.0.10与集群搭建
一 Redis单机安装 1 Redis下载安装 1.1 检查依赖环境(Redis是C语言开发,编译依赖gcc环境) [root@node21 redis-]$ gcc -v -bash: gcc: c ...
- linux下redis4.0.2安装与部署
一.redis的介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更 ...
随机推荐
- 自己总结的C#编码规范--7.文档下载 & 总结
今天终于把这一系列的编码规范写完了,这个编码规范算上前面阅读相关书籍,前前后后总共花了一个月的时间,也算是个人的呕心沥血之作了. 本来也没打算把这个系列写的这么长,但是在写的过程中自己搜了相关的网上资 ...
- Django与ajax、分页器
ajax简单数据响应 ajax请求,后台只需要返回信息,所以不会出现render.redirect 模板层: $('.btn').click(function() { $.ajax({ url: '/ ...
- 百度API获取经纬度使用
首先通过百度地图,注册账号,然后申请密钥 http://lbsyun.baidu.com/apiconsole/key 搜索某个关键字 http://api.map.baidu.com/place/v ...
- __x__(38)0909第五天__雪碧图的制作
1. 用ps打开目标图片若干. 2. 调整合适的画布大小. 3. 将图片拖曳到一张里. 4. 存储为Web所用格式,选择 png24 .
- (80)Wangdao.com第十六天_JavaScript Object 对象的相关方法
Object 对象的相关方法 Object.getPrototypeOf() 返回参数对象的原型. 这是获取某对象的原型对象的标准方法. var F = function () {}; var f = ...
- 09_ for 练习 _ FlowerNumber
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 十二、JDBC
day17 JDBC入门 l 导jar包:驱动! l 加载驱动类:Class.forName(“类名”); l 给出url.username.password,其中url背下来! l 使用Driver ...
- css3的动画
一.CSS3变形 CSS3变形是一些效果的集合 如平移.旋转.缩放.倾斜效果 每个效果都可以称为变形(transform),它们可以分别操控元素发生平移.旋转.缩放.倾斜等变化 二.CSS3位移:tr ...
- dhtmlx Gantt实例介绍分析
API地址:https://docs.dhtmlx.com/gantt/desktop__guides.html,这是英文的网页,可以用谷歌打开然后页面翻译,就是中文的啦! 我用的是DHTMLX Ga ...
- 关于word粘贴图片无法显示的原因
今天在进行word文档粘贴图片编辑操作的时候,老是无法完整的显示图片.或者干脆就不显示图片,以为是qq截图的图片格式无法粘贴到word文档里面,用Photoshop更改图片的格式仍然无法显示(将png ...