背景:今天在SpringSecurity的短信登录那边,要把我存在session里面的验证码加个过期时间。这就引起对Redis和session这两个东西过期时间的考虑,即他们过期之后该何去何从。
1.session
1)浏览器关掉了,session就没有了。
session.setMaxInactiveInterval(5 * 60);
2)如图上述,设置了session过期时间,再过期之后,session是自动删除的,默认session存留时间是30min
2. Redis
1)删除策略目标
在内存和CPU之间找一个平衡,顾此失彼都会造成redis性能下降
2)删除机制
懒惰删除,定期删除
定期删除:定期随机选择几个数据,要是数据过期就删除
懒惰删除:在用户get该数据的时候。发现该数据有没有过期,要是过期就删除返回给用户就是null值
3)逐出算法
要是用户在存入一个数据的时候,redis会调用freeMemoryIfNeeded()检测内存是够充足,要是不符合最低要求的存储要求,redis就会临时删除一些数据为当前指令清理存储空间。这个策略就是逐出算法。要是所有数据都尝试清理了,还是不行就会报错。
相关配置
volatile-* 检测易失数据
allkeys-*检测全库数据
- volatile/allkeys-lru:挑选最近最少使用的数据淘汰
- volatile/allkeys-lfu:挑选最近使用次数最少的数据淘汰
- volatile-ttl:挑选将要过期的数据淘汰
- volatile/allkeys-random:任意选择数据淘汰
- no-enviction:禁止逐出数据 但是这样会内存溢出
ok 886 马上就下班了 回家回家