问题描述:用户访问app首页信息,根据请求参数来拼接redis的实时缓存key,如果首页信息编辑了信息,需要对redis做清除缓存操作,请问如何实现?
思路:使用redis的有序集合去存储实时缓存的key,分数为实时缓存key的过期时间戳,每次新增缓存的时候,都去判断有序集合里的成员是否有过期的,有过期的然后清除; 那如果是一个操作很频繁的接口,每次都要去判断有没有过期的,然后再去做删除操作,这个会不会很影响性能,假设是访问频率是每秒500次,请问有没有更好的方案实现?
可不可以对有序集合key做处理,让key按某一规则生成,这样过期了的key就不用去操作删除,只是在统一清除缓存的时候,在根据规则去获取有序集合的key,再操作删除?
引用gpt 回答 有帮助的话 采纳一下
对于频繁访问且需要实时清除缓存的场景,我推荐以下方案:
答:如果大量的 key 过期时间设置的过于集中,到过期的那个时间点,redis 可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。
段落1:有序集合有两种排序方式:而成员按照从小到大排序,然后分数从大到小排序,或者成员按照从大到小排序,然后分数从小到大排序。我们可以利用有序集合中的成员按照分数排序的特性来实现高效的清除缓存操作。
参考资料:
- https://redis.io/topics/lru-cache#how-keys-expire-in-redis