为了保证服务器正常运行,需要为redis设定最大的内存空间,但是如果数据一直新增,内存很快就会占满:
采用LRU算法;可以讲内存中最近最不常使用的数据清空,保存其他的数据;
内存的优化:
1.设定内存空间,建议内存不要超过1G 256-512M
2.内存策略:
volatile-lru---------->为已经添加了超时时间的数据采用LRU算法进行删除
allkeys-lru---------->所有的key中通过LRU算法进行删除
volatile-random--->在已经设定超时时间的数据中,随机删除
allkeys-random--->在所有的key中,使用LRU算法进行随机删除
volatile-ttl----------->在已经设定超时时间的数据中,根据TTL机制排序,将马上要过期的数据删除
noeviction------(默认的)---->如果采用该机制,那么内存数据不会删除,将报错消息返回给用户
内存优化:
- 随时查看info memory,了解内存使用状况:
used_memory:2314624 //(字节单位形式)
used_memory_human:2.21M //Redis已分配的内存总量(易读单位形式)
used_memory_rss:1282048
used_memory_rss_human:1.22M //操作系统为Redis进程分配的内存总量
used_memory_peak:18010560
used_memory_peak_human:17.18M //最大使用内存总量(峰值)
used_memory_peak_perc:12.85%
used_memory_overhead:2078792
used_memory_startup:963088
used_memory_dataset:235832
used_memory_dataset_perc:17.45%
total_system_memory:4294967296
total_system_memory_human:4.00G
used_memory_lua:37888
used_memory_lua_human:37.00K //缓存Lua脚本占用的内存
maxmemory:0
maxmemory_human:0B //最大内存限制,0表示无限制
maxmemory_policy:noeviction //超过内存限制后的处理策略
mem_fragmentation_ratio:0.55 //碎片率(used_memory_rss/used_memory的比值),>1表示有碎片,<1表示部分Redis的内存被系统交换到硬盘(此时Redis性能变差)
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
https://www.cnblogs.com/susufufu/p/7875210.html
2. 数据结构优化
- 共享内存
- 采用压缩编码
- 数据类型替换