redis缓存策略
最大缓存
在redis中允许用户设置最大使用内存大小maxmemory,默认为0,没有指定最大缓存,如果有新数据添加,超过最大内存,则会使redsi崩溃,所以一定要设置。
当当redis内存数据集大小上升到一定大小的时候,就会实行数据淘汰策略。
淘汰策略
redis淘汰策略配置::maxmemory-policy voltile-lru,支持热配置
redis提供6种数据淘汰策略:
1.volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
2.volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
3.volatile-random:从已设置过期时间的数据集(server.db[i].expies)中任意选择数据淘汰
4.allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
5.allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。
6.no-enviction(驱逐):禁止驱逐数据
LRU原理
LRU(Least recently used,最近很少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是:如果数据最近被访问过,那么将来被访问的几率也很高。
1.新数据插入到链表头部
2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部
3.当链表满的时候,将链表尾部的数据丢失。
Java中可以使用LinkHashMap去实现LRU
也可以用哈希链表实现。