当前位置: 首页 > news >正文

redis超过内存大小是否会挂?

redis超过内存大小是否会挂

前提条件:appendonly yes

好奇这个问题,所以做了个实验。答案是会挂掉的,并且数据完全持久化。

容量达到限制之后,内存溢出,Redis服务会挂掉。但是重启redis可以发现,实际落库持久化的并执行了db13:keys=420,expires=0,avg_ttl=0db13:keys=420,expires=0,avg_ttl=0程序日志可以看出执行到这里开始挂掉,完全持久化成功。那redis的持久化策略是啥呢?

模拟插入大数据量

package icu.kevin.cache.avalanche;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Random;@Slf4j
@RequestMapping("large")
@RestController
public class LargeKeyController {@Autowiredprivate RedisTemplate redisTemplate;@GetMapping("init")@Asyncpublic void initData(@RequestParam (name = "size", defaultValue = "5000") Integer size){log.info("starting init size........." + size);for (int i = 0; i < size; i++) {log.info("starting init data........." + i);redisTemplate.opsForSet().add("large_key_" + i, generateTestData(10 * 1024));}}public static String generateTestData(int sizeInKb) {int length = sizeInKb * 1024;int chunkSize = 10;int chunks = length / chunkSize;StringBuilder sb = new StringBuilder(length);for (int i = 0; i < chunks; i++) {String chunk = generateRandomString(chunkSize);sb.append(chunk);}return sb.toString();}public static String generateRandomString(int length) {String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";StringBuilder sb = new StringBuilder(length);Random random = new Random();for (int i = 0; i < length; i++) {int index = random.nextInt(characters.length());sb.append(characters.charAt(index));}return sb.toString();}}

容量达到限制之后,内存溢出,Redis服务会挂掉

=== REDIS BUG REPORT START: Cut & paste starting from here ===
[28204] 07 Aug 10:57:51.458 # Redis version: 3.0.504
[28204] 07 Aug 10:57:51.459 # --- EXCEPTION_ACCESS_VIOLATION
[28204] 07 Aug 10:57:51.460 # --- STACK TRACE
redis-server.exe!LogStackTrace(c:\release\redis\src\win32_interop\win32_stacktrace.cpp:95)(0x00FBE580, 0x00FBFF60, 0x40028E60, 0x40124730)
。。。。。。。。。。。。。。。。。。。。
[28204] 07 Aug 10:57:51.488 # --- INFO OUTPUT
# Server
redis_version:3.0.504
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:a4f7a6e86f2d60b3
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:WinSock_IOCP
process_id:28204
run_id:56302233dfa6c8a9a5ce3804c5638c3415c8d668
tcp_port:6379
uptime_in_seconds:139
uptime_in_days:0
hz:10
lru_clock:11723439
config_file:D:\Program Files\Redis\redis.windows-service.conf# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0# Memory
used_memory:5386539784
used_memory_human:5.02G
used_memory_rss:5386481064
used_memory_peak:5386539784
used_memory_peak_human:5.02G
used_memory_lua:36864
mem_fragmentation_ratio:1.00
mem_allocator:jemalloc-3.6.0# Persistence
loading:0
rdb_changes_since_last_save:417
rdb_bgsave_in_progress:0
rdb_last_save_time:1722999332
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok# Stats
total_connections_received:420
total_commands_processed:841
instantaneous_ops_per_sec:6
total_net_input_bytes:4372605821
total_net_output_bytes:8298
instantaneous_input_kbps:34863.84
instantaneous_output_kbps:0.05
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0# CPU
used_cpu_sys:7.17
used_cpu_user:4.48
used_cpu_sys_children:0.00
used_cpu_user_children:0.00# Commandstats
cmdstat_sadd:calls=417,usec=1579622,usec_per_call=3788.06
cmdstat_select:calls=419,usec=2190,usec_per_call=5.23
cmdstat_scan:calls=1,usec=34,usec_per_call=34.00
cmdstat_ping:calls=3,usec=16,usec_per_call=5.33
cmdstat_info:calls=1,usec=107,usec_per_call=107.00# Cluster
cluster_enabled:0# Keyspace
db0:keys=21,expires=0,avg_ttl=0
db10:keys=4,expires=0,avg_ttl=0
db13:keys=420,expires=0,avg_ttl=0
[28204] 07 Aug 10:57:51.489 #
=== REDIS BUG REPORT END. Make sure to include from START to END. ===

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 怎么将mov视频转换成mp4?将mov视频转换成mp4的方法
  • 文心一言 VS 讯飞星火 VS chatgpt (323)-- 算法导论22.4 4题
  • 渗透测试实战-HFS远程RCE漏洞利用
  • Python爬虫——爬取bilibili中的视频
  • 数据结构(学习)2024.8.8(栈,队列)
  • 【物联网】(防水篇)电子产品如何做到IPX7级别的防水?
  • 【C++ 面试 - 基础题】每日 3 题(十三)
  • 趋动科技联合超聚变,让超融合彻底释放算力潜能
  • 单例模式(懒汉模式,饿汉模式)
  • PostgreSQL 触发器
  • uniapp h5本地预览pdf教程 (含白屏|跨域解决方案)
  • C++ primer plus 第17 章 输入、输出和文件:文件输入和输出03:文件模式:二进制文件
  • 图解大顶堆的构建、排序过程
  • 猫头虎 分享已解决Bug || 504 Gateway Timeout 解决方案
  • 手绘图系列 06 | 您一上Google就能接触到的Tries
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • css选择器
  •  D - 粉碎叛乱F - 其他起义
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java基本数据类型之Number
  • Js基础知识(一) - 变量
  • node-glob通配符
  • vue自定义指令实现v-tap插件
  • Web Storage相关
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 基于 Babel 的 npm 包最小化设置
  • 检测对象或数组
  • 前端面试题总结
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 学习ES6 变量的解构赋值
  • 学习HTTP相关知识笔记
  • 正则表达式
  • 《天龙八部3D》Unity技术方案揭秘
  • ionic入门之数据绑定显示-1
  • 带你开发类似Pokemon Go的AR游戏
  • ​520就是要宠粉,你的心头书我买单
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)球球大作战
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (十七)Flink 容错机制
  • (转)C#调用WebService 基础
  • (转)VC++中ondraw在什么时候调用的
  • .a文件和.so文件
  • .bashrc在哪里,alias妙用
  • .cfg\.dat\.mak(持续补充)
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 执行Linux下多行shell命令方法
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • /etc/motd and /etc/issue
  • ??如何把JavaScript脚本中的参数传到java代码段中