前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Redis】Redis数据库

【Redis】Redis数据库

作者头像
石臻臻的杂货铺[同名公众号]
发布2021-07-14 10:08:14
1.3K0
发布2021-07-14 10:08:14
举报
文章被收录于专栏:kafka专栏

Redis读写键空间时的维护操作

当redis命令对数据库进行读写时,服务器不仅会对键空间执行指定的读写操作,还会执行一些额外的维护操作

  • 在读取一个键之后(读写都会对键进行读取),服务器会根据键是否存在,来更新服务器的键空间命中(hit)次数或键空间不命中(miss)次数
  • 在读取一个键之后,服务器会更新键的LRU(最后一次访问时间),这个值可以用于计算键的空闲时间
  • 如果服务器发现这个键过期了,会先删除这个过期键,然后才会执行其他操作
  • 如果有客户端使用WATCH命令监视了某个键,那么服务器在对被监视的键进行修改之后,会将这个键标记为脏(dirty),从而让事务程序注意到这个键已经被修改过.
  • 服务器每次修改一个键之后,都会对脏(dirty)键计数器的值增1,这个计数器会触发服务器的持久化及复制操作
  • 如果服务器开启了数据库通知功能,那么在对键进行修改之后,服务器将按配置发送相应的数据库通知。

过期时间

redisDb结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典;

  • 过期字典的键是一个指针,这个指正指向键空间中的某个键对象(就是也是 键,跟键空间的键指向同一个;例如键都是 a, 过期字典的键和键空间的键 都是指向 a 这个键对象的,所以不会浪费内存)
  • 过期字典的值是一个 long long类型的整数,这个整数保存了键所指向的数据库键的过期时间---- 一个毫秒精度的unix时间戳
移除过期时间

将过期字典中的键值对移除掉就行了

计算并返回剩余生存时间

计算键的过期时间与当前时间差 就行了

过期键的删除策略

  • 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作 优点:对内存最友好,通过定时器能让国企键尽可能快的被删除 缺点:对CPU时间很不友好,在过期键很多的情况下,删除过期键这一行为可能会占用相当一部分cpu时间,在内存不紧张但是cpu时间紧张的情况下,会对服务器相应时间和吞吐量造成影响
  • 惰性删除: 放任键过期不管,但是每次从键空间中获取键的时候,都检查取到的键是否过期,如果过期就删除; 优点:对CPU友好 缺点:对内存最不友好,如果一个键一直不去读取,那么就一直存在不会被删除
  • 定期删除:每隔一点时间,陈旭就对数据库进行一次检查,删除里面的过期键,至于要删除多少过期键,以及要检查多少个删除库,由算法决定; 定期删除策略难点在于确定删除操作执行的时长和频率,服务器必须根据情况,合理的设置执行时长和频率
Redis的过期删除策略

惰性删除+定期删除组合策略

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/03/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis读写键空间时的维护操作
    • 过期时间
      • 移除过期时间
      • 计算并返回剩余生存时间
    • 过期键的删除策略
      • Redis的过期删除策略
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档