环境准备:

redis php的redis扩展

redis version=4.0.8

php version:

php version.png

php redis extension:

php redis extension.png

环境redis配置文件配置:

RDB持久化默认安装完成就会自动开启,本文再开启AOF,RDB模式和AOF模式同时开启,默认无脑加载AOF的配置文件。

开启AOF:

打开 redis.conf 文件,找到 APPEND ONLY MODE 对应内容

redis 默认关闭,开启需要手动把no改为yes

appendonly yes

指定本地数据库文件名,默认值为 appendonly.aof

appendfilename "appendonly.aof"

指定本地数据库文件存放目录,默认值为 dir ./

# dir ./

dir /usr/local/redis/var

指定更新日志条件

# appendfsync always

appendfsync everysec

# appendfsync no

解说:

always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)

everysec:出厂默认推荐,每秒异步记录一次(默认值)

no:不同步

配置重写触发机制

auto-aof-rewrite-percentage 100

# auto-aof-rewrite-min-size 64mb

auto-aof-rewrite-min-size 4000mb

解说:auto-aof-rewrite-min-size默认为64M,指当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。一般都设置为3G,64M太小了。

1. 插入测试数据

创建create_redis_data.php

$redis = new Redis();

$redis->connect('127.0.0.1', 6379); //连接Redis

$redis->auth('xxxxxxxx'); //密码验证

//$redis->select(2);//选择数据库2

echo "开始生成redis测试数据".PHP_EOL;

$i = 1;

echo "".PHP_EOL;

while($i < 458235983){

$redis->set( $i , "gnYH7P6Gve1bNdsgFDGxzvrehU@Kdp#ytH3f"); //设置测试key

$i++;

}

echo "生成redis测试数据结束,条数为:$i".PHP_EOL;

?>

执行插入数据的php脚本:

[root@localhost download]# php create_redis_data.php

查看持久化文件:

[root@localhost var]# pwd

/usr/local/redis/var

[root@localhost var]# ll -lh

总用量 3.1G

-rw-r--r-- 1 root root 3.1G 5月 23 11:20 appendonly.aof

打开Redis Desktop Manager软件查看redis中数据:

插入数量查看.png

与插入数量相符!

2. 恢复数据

查看redis服务进程并终止它

[root@localhost var]# ps -aux | grep redis

root 3996 0.0 0.0 15232 5640 pts/0 Ss+ 5月21 0:00 redis-cli -c -p 7000

polkitd 11181 0.1 0.0 49908 7460 pts/0 Ssl+ 5月18 8:14 redis-server *:6379

polkitd 11289 0.1 0.0 51956 3640 ? Ssl 5月21 4:38 redis-server *:7000 [cluster]

polkitd 11423 0.1 0.0 47348 3704 ? Ssl 5月21 4:51 redis-server *:7001 [cluster]

polkitd 11552 0.1 0.0 45300 3872 ? Ssl 5月21 4:39 redis-server *:7002 [cluster]

polkitd 11684 0.1 0.0 47348 5564 ? Ssl 5月21 4:51 redis-server *:7003 [cluster]

polkitd 11812 0.1 0.0 43252 3736 ? Ssl 5月21 4:25 redis-server *:7004 [cluster]

root 11906 0.0 0.0 15232 7476 pts/1 S+ 5月18 0:00 redis-cli

polkitd 11950 0.1 0.0 47348 5700 ? Ssl 5月21 4:53 redis-server *:7005 [cluster]

root 13035 0.0 0.0 15232 1604 pts/1 S+ 5月20 0:00 redis-cli

root 13673 0.0 0.0 15232 1604 ? S+ 5月20 0:00 redis-cli

root 15331 0.0 0.0 112732 1000 pts/1 S+ 11:17 0:00 grep --color=auto redis

polkitd 21250 0.1 0.0 49908 9480 pts/0 Ssl+ 5月20 4:38 redis-server *:6379

root 29808 3.5 30.3 5070752 4930976 ? Ssl 10:46 1:05 /usr/local/redis/bin/redis-server *:6379

[root@localhost var]# kill 29808

重新启动redis服务:

[root@localhost var]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf

15387:C 23 May 11:17:21.836 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

15387:C 23 May 11:17:21.836 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=15387, just started

15387:C 23 May 11:17:21.836 # Configuration loaded

判断Redis重启后数据是否恢复完成,观察cpu,启动load数据时redis-server cpu几乎是100,降下来就是搞定了,通过top查看

top.png

解说:在恢复数据期间%CPU值差不多在90.0~100.0范围,%MEM持续一点点上升,最高到差不多30就结束恢复了

恢复数据时间:

恢复数据时间:.png

解说:第一个date是启动redis同时键入显示的时间,即恢复数据的开始时间,第二个date是top查看redis-server cpu和mem降下去后键入显示的时间,前后差距差不多70秒,因此3G的aof文件纯插入操作恢复redis数据时间还是很短的。

3.禁止淘汰策略下恢复大于redis内存限制数据情况

配置限制Redis使用的最大内存,打开 redis.conf 文件,找到 MEMORY MANAGEMENT 对应内容,将内存上限改为2G

# maxmemory

maxmemory 2147483648

配置Redis禁止淘汰策略

maxmemory-policy noeviction

重新启动redis,重置配置

[root@localhost var]# ps -aux | grep redis

root 3996 0.0 0.0 15232 5640 pts/0 Ss+ 5月21 0:00 redis-cli -c -p 7000

polkitd 11181 0.1 0.0 49908 7460 pts/0 Ssl+ 5月18 8:11 redis-server *:6379

polkitd 11289 0.1 0.0 51956 3660 ? Ssl 5月21 4:34 redis-server *:7000 [cluster]

polkitd 11423 0.1 0.0 47348 3708 ? Ssl 5月21 4:47 redis-server *:7001 [cluster]

polkitd 11552 0.1 0.0 45300 3876 ? Ssl 5月21 4:36 redis-server *:7002 [cluster]

polkitd 11684 0.1 0.0 47348 5648 ? Ssl 5月21 4:48 redis-server *:7003 [cluster]

polkitd 11812 0.1 0.0 43252 3740 ? Ssl 5月21 4:22 redis-server *:7004 [cluster]

root 11906 0.0 0.0 15232 7476 pts/1 S+ 5月18 0:00 redis-cli

polkitd 11950 0.1 0.0 47348 5716 ? Ssl 5月21 4:49 redis-server *:7005 [cluster]

root 13035 0.0 0.0 15232 1604 pts/1 S+ 5月20 0:00 redis-cli

root 13673 0.0 0.0 15232 1604 ? S+ 5月20 0:00 redis-cli

polkitd 21250 0.1 0.0 49908 9480 pts/0 Ssl+ 5月20 4:36 redis-server *:6379

root 23243 17.5 30.3 5068704 4930964 ? Ssl 10:34 1:06 /usr/local/redis/bin/redis-server *:6379

root 26528 0.0 0.0 112732 1000 pts/1 S+ 10:41 0:00 grep --color=auto redis

[root@localhost var]# kill 23243

[root@localhost var]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf

27098:C 23 May 11:41:30.230 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

27098:C 23 May 11:41:30.230 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=27098, just started

27098:C 23 May 11:41:30.230 # Configuration loaded

恢复数据期间插入数据

127.0.0.1:6379> set aaa 1

(error) LOADING Redis is loading the dataset in memory

说明:回复数据期间Redis正在将数据集加载到内存中,不能操作

恢复数据后,查看redis内存情况,以及redis中数据的数量

127.0.0.1:6379> info memory

# Memory

used_memory:4928991704

used_memory_human:4.59G

used_memory_rss:5049303040

used_memory_rss_human:4.70G

used_memory_peak:4929013576

used_memory_peak_human:4.59G

used_memory_peak_perc:100.00%

used_memory_overhead:2370725502

used_memory_startup:765640

used_memory_dataset:2558266202

used_memory_dataset_perc:51.91%

total_system_memory:16613605376

total_system_memory_human:15.47G

used_memory_lua:37888

used_memory_lua_human:37.00K

maxmemory:2147483648

maxmemory_human:2.00G

maxmemory_policy:noeviction

mem_fragmentation_ratio:1.02

mem_allocator:jemalloc-4.0.3

active_defrag_running:0

lazyfree_pending_objects:0

redis中数据的数量,与关掉redis服务之前数据数量一致

redis中数据的数量.png

说明:

used_memory_rss_human:4.70G表明redis实际使用了4.70G内存了,maxmemory_human:2.00G表明redis使用内存上限为2.00G,并且redis中数据的数量与关掉redis服务之前数据数量相等,因此禁止淘汰策略下恢复大于redis内存限制数据,数据会全量恢复到redis中,不会在redis内存使用达到上限后就不恢复aof中的增量操作了

指标说明

used_memory 数据占用了多少内存(字节)

used_memory_human 数据占用了多少内存(带单位的,可读性好)

used_memory_rss redis占用了多少内存

used_memory_peak 占用内存的峰值(字节)

used_memory_peak_human 占用内存的峰值(带单位的,可读性好)

used_memory_lua lua引擎所占用的内存大小(字节)

mem_fragmentation_ratio: 内存碎片率

mem_allocator redis内存分配器版本,在编译时指定的。有libc、jemalloc、tcmalloc这3种。

恢复数据后插入数据

127.0.0.1:6379> set aaa 1

(error) OOM command not allowed when used memory > 'maxmemory'.

说明:禁止淘汰策略下redis内存已达到上限,在插入将会报错了

redis php数据插入失败,redis插入数据,恢复数据测试(禁止淘汰策略下恢复大于redis内存限制数据情况)...相关推荐

  1. Redis基本数据类型、持久化机制、集群模式、淘汰策略、缓存穿透、击穿、雪崩、常见面试题大集合!

    redis redis reids的常用数据类型 1.String 2.Hash 3.List 5.Sorted Set(ZSet) 6.其他 发布(pub)订阅模式(sub)模式 作用 Redis的 ...

  2. oracle procedures批量删除带索引条件数据很慢_redis数据结构、持久化、缓存淘汰策略...

    Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题.redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放 ...

  3. Redis集群CentOS系统配置企业级数据备份方案以及数据恢复的操作(在开启AOF功能下恢复冷备RDB文件数据,保持AOF和RDB双开情况下恢复数据及错误的数据恢复步骤详解)

    1. 设置每小时保存一份 /var/redis/6379/dump.rdb 文件至指定目录(我这边存放在 /usr/local/redis_backup 目录下),并删除48小时前的文件.     为 ...

  4. 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)

    1. 数据结构 1.1 字典 dictht 是一个散列表结构,使用拉链法保存哈希冲突的 dictEntry /* This is our hash table structure. Every dic ...

  5. oracle定时器定时删除30天前的数据_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  6. redis 存储数据不设置过期时间 会自动过期吗_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  7. 定时器取数据时实时进来的数据_Redis-数据淘汰策略amp;持久化方式(RDB/AOF)amp;Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  8. Redis追命连环问,你能回答到第几问?(中)Redis性能,与memcache区别,淘汰策略及数据持久化

    ​上次的Redis连环问问到了Redis是什么,Redis支持的数据类型和缓存雪崩缓存穿透缓存击穿. Redis常见面试题连环问,你能回答到第几问?(上) Redis常见面试题连环问,你能回答到第几问 ...

  9. php接口 汉字出错 空,php接口开发时,数据解析失败问题,字符转义,编码问题(示例代码)...

    php接口开发时,数据解析失败问题,字符转义,编码问题 情景: A平台--->向接口请求数据---->接口向B平台请求数据---->B平台返回数据给接口---->接口返回数据给 ...

最新文章

  1. 脂肪肝,应该拿你怎么办
  2. 统计学常犯的18个错误,请务必跳过这些坑!
  3. TiDB 在量化派风控系统中的应用
  4. ThreeJS的特效合成器和后期处理通道
  5. UILable在Autolayout模式下面自动调节字体大小
  6. UNIX再学习 -- 信号
  7. boost::gil::for_each_pixel用法的测试程序
  8. dataframe 选择输出_使用 Python 实现机器学习特征选择的 4 种方法
  9. ajax核心技术1---XMLHttpRequset对象的使用
  10. python绘制三维图散点图_python matplotlib模块——绘制三维图形、三维数据散点图...
  11. win7下vs2008如何进行注册?
  12. 面试必备|ID3、C4.5、CART、RF、boosting、Adaboost、GBDT、xgboost模型
  13. WCF中几个容易忽略的知识点
  14. 活动目录系列之一……活动目录简介及部署
  15. 系统建模与仿真 - 电子书下载(高清版PDF格式+EPUB格式)
  16. 1's Complement和2's Complement的区别
  17. 游戏服务器redis mysql_redis服务器环境下mysql实现lnmp架构缓存
  18. Jetson Nano系列教程4-生死看淡,不服就干之I2C
  19. EXPLAIN语法详解
  20. 74HC573锁存器简单应用

热门文章

  1. pandas使用applymap函数替换dataframe的内容或者数值:applymap函数使用字典替换多个列的内容(数值)
  2. pandas对dataframe的数据行(rows)进行随机抽样:使用sample函数进行数据行(rows)随机抽样
  3. R语言ggplot2可视化facet间隔设置语法实战
  4. R构建Logistic回归实战(Logistic Regression)
  5. 熊出没之伐木机器人_熊出没第一首富之争:李老板真的是第一吗?难道不是他第一?...
  6. 分式的二阶导数怎么求_高考数学导数大题如何抢分? 名师手把手教你! 高一高二也要看...
  7. 中国科学家研发新的全基因组组装算法
  8. mysql数据库目标库_修改mysql数据库的库名
  9. 1.AutoRec: Autoencoders Meet Collaborative Filtering论文解读以及AutoRec代码实现(pytorch)
  10. 【文本分类】A C-LSTM Neural Network for Text Classification