Redis最大内存的设置是通过设置maxmemory来完成的,格式为maxmemory bytes ,当目前使用的内存超过了设置的最大内存,就要进行内存释放了, 当需要进行内存释放的时候,需要用某种策略对保存的的对象进行删除。Redis有六种策略(默认的策略是noeviction)
Redis最大内存设置
默认情况下,在32位OS中,Redis最大使用3GB的内存,在64位OS中则没有限制。
在使用Redis时,应该对数据占用的最大空间有一个基本准确的预估,并为Redis设定最大使用的内存,
否则在64位OS中Redis会无限制地占用内存(当物理内存被占满后会使用swap空间),容易引发各种各样的问题。
通过如下配置控制Redis使用的最大内存:
maxmemory 100mb
在内存占用达到了maxmemory后,再向Redis写入数据时,Redis会:
1)根据配置的数据淘汰策略尝试淘汰数据,释放空间
2)如果没有数据可以淘汰,或者没有配置数据淘汰策略,那么Redis会对所有写请求返回错误,但读请求仍然可以正常执行
maxmemory <bytes>
# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select among five behaviors:
#
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
#
# Note: with any of the above policies, Redis will return an error on write
# operations, when there are not suitable keys for eviction.
#
# At the date of writing this commands are: set setnx setex append
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset mset msetnx exec sort
#
# The default is:
#
# maxmemory-policy noeviction
Redis提供了下面几种淘汰策略供用户选择,其中默认的策略为noeviction策略:
1)noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
2)allkeys-lru:在主键空间中,优先移除最近未使用的key。
3)volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。
4)allkeys-random:在主键空间中,随机移除某个key。
5)volatile-random:在设置了过期时间的键空间中,随机移除某个key。
6)volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。
淘汰策略的选择可以通过下面的配置指定:
# maxmemory-policy noeviction
相关推荐
Redis内存过期策略,Redis的内存回收机制,相关配置项
介绍的redis过期策略和内存淘汰机制
实现redis缓存策略和Spring集成redis配置 1.1 Redis是一个key-value存储系统,支持多种存储结构,如String,Hash,list,zset等; 1.2 Redis采用内存中数据集的形式,因此读写性能优异; 1.3 Redis支持数据持久化,支持...
}} Redis持久化策略说明Redis中的数据都在内存中,如果断电宕机则内存数据丢失.其中数据应该持久化保存.不允许丢失.持久化策略:RDB模式AOF模式Re
Redis 服务等过期策略和内存淘汰策略解析
面试官:Redis 过期删除策略和内存淘汰策略有什么区别?.doc
6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 Windows 版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么 Redis 需要把所有数据放到内存中? 10、Redis 集群方案应该怎么做?都有哪些...
缓存使用场景,介绍redis/内存等缓存的使用场景,更新策略等
6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 Windows 版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么 Redis 需要把所有数据放到内存中? 10、Redis 集群方案应该怎么做?都有哪些...
redis的maxmemory参数用于控制redis可使用的最大内存容量。如果超过maxmemory的值,就会动用淘汰策略来处理expaire字典中的键。 关于redis的淘汰策略: Redis提供了下面几种淘汰策略供用户选择,其中默认的策略为...
在redis的配置文件中,可以设置redis内存使用的最大值,当redis使用内存达到最大值时(如何知道已达到最大值?),redis会根据配置文件中的策略选取要删除的key,并删除这些key-value的值。若根据配置的策略,没有符合...
1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等; 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储; 3...
主要介绍了redis 数据删除策略和逐出算法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
包括以下是常见的一些Redis缓存面试题目: 什么是Redis?...Redis的内存管理是如何进行的? 你如何监控Redis的性能? 在Redis中,如何进行大量的写操作? Redis的将来版本可能会增加什么样的功能?
什么是Redis? Redis相比memcached有哪些优势? Redis支持哪几种数据类型? 为什么Redis需要把所有数据放到内存中?...Redis有哪几种数据淘汰策略? redis分布式 锁? Redis的内存用完了会发生什么?
每次命令执行都会将所有redis内存快照到一个新的rdb文件里,并覆盖原有rdb快照文件。 bgsave的写时复制(COW)机制 Redis 借助操作系统提供的写时复制技术(Copy-On-Write, COW),在生成快照的同时,依然可以正常 ...
redis的数据类型、锁的机制、淘汰策略、缓存过期策略、持久化、内存分配、降低内存占用、集群等知识体系。 redis的数据类型、锁的机制、淘汰策略、缓存过期策略、持久化、内存分配、降低内存占用、集群等知识体系。
包含缓存穿透、雪崩、击穿发生原因和解决方案;先更新数据库还是redis(图解);是单线程还是多线程;乐观锁/悲观锁;持久化AOF/RDB + 优缺点;怎么保证原子性的;过期策略介绍+内存淘汰机制 等主流问题。
由于所有数据保持在内存中,所以对数据的更新将异步地保存到磁盘上,Redis提供了一些策略来保存数据,比如根据时间或更新次数。数据超过内存,使用swap,保证数据; memcacache不能持久化,mongo是部分在内存; 自动...