当前位置: 首页 > news >正文

上海建设单位工程备案网站百度推广和优化有什么区别

上海建设单位工程备案网站,百度推广和优化有什么区别,上海城乡住房建设部网站,网站没有做适配 怎么办游标遍历清除Redis过期的key 为什么要清除Redis过期的Key ​ Redis的过期清理是一种懒惰的清理方案,他不会过期后立刻清除,而是在Key被访问的时候进行删除,Redis这么做的目的就是为了提高性能降低资源开销。 ​ 具体来说,一个K…

游标遍历清除Redis过期的key

为什么要清除Redis过期的Key

​ Redis的过期清理是一种懒惰的清理方案,他不会过期后立刻清除,而是在Key被访问的时候进行删除,Redis这么做的目的就是为了提高性能降低资源开销。

​ 具体来说,一个Key过期的时候,Redis不会立刻从内存中删除。相反我们客户端进行访问的时候Reids会检查当前key是否过期,如果过期就进行删除,这也就是意味着只有被访问的时候才会被删除。而不是真正的过期就立刻删除。

​ 虽然我们的Reids会自动清除我们过期的Key,但是这个过期清除不是实时的,这个清理过程是在我们访问Key的时候,所以如果有很多Key的过期没有被访问,他们会在内存中存活一段时间,所以一些对过期Key清理要求严格的场景下需要借助其他机制和工具进行清理。

Redis自身的清除机制

读取和写入的时候

​ 当我们读取和写入的时候我们Reids会检测是否过期,如果过期了就会在读区或写入之前将它立即删除。

定期清理

​ Reidis会在一定时间间隔执行清理操作,清除过期的Key,这个时间间隔有配置项hz(每秒运行周期性操作的次数)和timeout(扫描时间限制)来决定,默认情况下,每秒运行10次周期性操作。每次周期性操作就是选择一些Key,这些Key可能过期了也可能没有过期,如果过期了就删除。

懒惰清理

​ 每次访问的时候查看这个Key是否过期,如果过期了就把他删除。

什么是游标操作或者分页操作

​ 在Redis游标时一种用于分批处理数据的机制,当需要遍历大量数据或进行大型操作的时候Redis提供了一些分页式的便利方式,使用游标来表示当前遍历的位置,通过多次迭代获取完整的操作。

​ 游标就是记录当前遍历的位置,一遍下一次遍历的时候从上一次停止的位置进行操作。通过游标可以有效处理大型数据集,避免一次性将所有数据加载到内存中。

​ 在Rdis可以使用scan进行遍历操作,可以通过传递游标参数来控制遍历的位置,直到游标变成0。

​ 使用游标的优势就是可以在遍历的过程中处理大量的数据,并且不会对Redis服务器造成过大的负担。游标可以在多个客户端之间进行共享,以支持并发遍历操作。

​ 需要注意!!!

​ 游标直表示当前遍历的位置,而不是一个唯一的标识符或键值。在不同的遍历中可能出现相同Key返回多次的情况,我们可以处理遍历结果进行去重进行处理。

游标遍历的缺点

1.不保证实时性

​ 游标遍历是一个迭代的操作,通过每次返回的游标来获取下一批数据,这意味着在遍历的过程中,增加和删除都是会重复处理一些Key。

2.对Redis服务器资源的占用

​ 游标遍历需要保持和Redis服务器的链接,而且需要持续发送命令获取下一批数据。这可能占用服务器网络宽带和处理能力,如果遍历过程中可能会持续较长时间,并且占用服务器资源。

3.潜在的性能问题

​ 当数据集很大的时候,使用游标遍历会对我们服务器的性能产生一定的影响。每次遍历迭代都会进行网络通信和执行命令,可能会引入一定的延迟和性能的开销。

4.遍历过程中的数据变动。

​ Redis是一个并发数据库,遍历过程中可能会有其他客户端对Key进行修改、删除、增加操作,这会影响到我们遍历结果的一致性。

5.不适合实时查询

​ 如果需要实时查询满足特定的条件的Key,游标遍历可能并不是最佳的选择。游标遍历睡一个逐步迭代的过程,需要遍历整个数据集才能找到满足的条件的Key。

Springboot定时任务+Redis游标处理过期Key

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisConnection;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class ExpiredKeyCleanupTask {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Autowiredprivate RedisConnectionFactory redisConnectionFactory;@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行一次任务public void cleanupExpiredKeys() {RedisConnection connection = redisConnectionFactory.getConnection();try (Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().match("*").count(100).build())) {while (cursor.hasNext()) {byte[] keyBytes = cursor.next();String key = new String(keyBytes);if (connection.ttl(keyBytes) <= 0) {redisTemplate.delete(key);}}}}
}
  1. 在上述代码中,使用了 @Autowired 注解将 RedisTemplateRedisConnectionFactory 注入到定时任务类中。
  2. 使用 @Scheduled 注解标记 cleanupExpiredKeys 方法为定时任务,并指定执行时间表达式,例如 cron = "0 0 1 * * ?" 表示每天凌晨1点执行任务。
  3. cleanupExpiredKeys 方法中,执行游标遍历逻辑,使用 scan 方法遍历 Redis 键空间,并根据 ttl 方法判断键是否过期,如果过期则使用 delete 方法删除键。
  4. 可根据需要调整时间表达式和其他参数,确保定时任务按预期执行。
http://www.hrbkazy.com/news/48850.html

相关文章:

  • 济南营销型网站建设公司营销型网站建设优化建站
  • 齐河做网站百度怎么提交收录
  • 深圳做手机网站多少钱百度今日数据
  • 十大不封号直播平台企业网站seo多少钱
  • wordpress $limit移动端seo关键词优化
  • 企业做网站要注意些什么问题上海网络推广渠道
  • 济宁网站开发招聘域名信息查询网站
  • 专门做淘宝收藏可以赚钱的网站公众号如何推广运营
  • 合肥网站建设找佳达长春网站制作公司
  • 易思企业网站管理系统免费软文发布平台
  • 网站系统荥阳网站优化公司
  • 哪个网站做h5好网络网站推广优化
  • 中山移动网站建设报价bt搜索引擎下载
  • 网站建设最重要的因素seo优化运营
  • 个人怎么做网站宁波seo优化报价多少
  • 免费建站哪个好企业网站代运营
  • 目前做网站最流行的程序语言拼多多关键词排名查询软件
  • wordpress分类列表显示网站seo报告
  • 高端网站建设wanghess网络营销推广的手段
  • 网站建设框架都有哪些怎样做网站推广啊
  • 关于公司申请建设门户网站的请示网站建设是干什么的
  • 做微整去那个网站找好的医院营销策划运营培训机构
  • 建设一个类似淘宝的网站搜索引擎收录
  • 十堰北京网站建设无锡百姓网推广
  • 厦门成交型网站建设公司百度优化是什么意思
  • 成都市住房和城乡建设局电话东莞百度网站排名优化
  • 运城云起时网站建设网站推广网络推广
  • 最新备案域名企业网站优化的三层含义
  • 网站开发与设计中学生百度关键词搜索查询
  • 做网站的服务器很卡怎么办百度地图网页版