一.前言
(1)注意区分六种内存淘汰策略和常用三种缓存淘汰策略,
前者在redis.conf里配置,后者则是java代码里体现
(2)六种策略
①noeviction: 不删除策略, 达到最大内存限制时, 如果需要更多内存, 直接返回错误信息。
②allkeys-lru: 所有key通用; 优先删除最近最少使用(less recently used ,LRU) 的 key。
③volatile-lru: 只限于设置了 expire 的部分; 优先删除最近最少使用又过期(less recently used ,LRU) 的 key。
④allkeys-random: 所有key通用; 随机删除一部分 key。
⑤volatile-random: 只限于设置了 expire 的部分; 随机删除一部分过期 key。
⑥volatile-ttl: 只限于设置了 expire 的部分; 优先删除剩余时间(time to live,TTL) 短的key。
注意:如果没有设置 expire 的key, 不满足先决条件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。
(3)怎么设置六种淘汰策略
在redis目录下打开redis.windows.conf,找到下面黑色字
maxmemory
maxmemory-policy noeviction
解析:maxmemory 设置redis使用最大内存,比如设置成100mb,如下:
maxmemory 100mb
maxmemory-policy noeviction 设置redis在超最大内存时采取策略,默认是noeviction策略
二.redis删除key三种策略
①主动删除:
volatile-lru,、volatile-random 、 volatile-ttl、allkeys-lru、allkeys-random、noeviction
②被动删除:读写某个早就过期的key时才会删除这个key
③被动清理:内存满了会主动删除一大批key(maxmemory 100mb)
三.缓存淘汰策略(java代码体现逻辑)
1.Cache Aside Pattern(旁路缓存模式)
写 :先更新 DB,更新好后直接删除 cache,当然也可以先更新DB,然后让cache过期,选中哪种都行反正都是能让缓存无效
读 :
从 cache 中读取数据,读取到就直接返回,cache中读取不到的话,就从 DB 中读取数据返