过期不候--具备生命周期的数据的技术实现方案
1 引言
本文可以作为之前的一个 原理性文章 对应的 技术实现部分 。
此处给出其上文的直达电梯:
http://www.cnblogs.com/beer/p/6029861.html
基于token的多平台身份认证架构设计
2 数据生命周期
所谓的 “数据生命周期” 是指:为数据设定一定的生存期限,过了这个时间后, 此数据就被删除掉(失效)。
在进行web开发的时候,有很多需求场景是要求数据是具有一定的生命周期,比如:
- 具有一定时效的用户登录会话
- 邀请码系统的时效控制
- 具有时效的二维码/短信/邮件验证系统
- 接口调用认证的token有效期
- 第三方授权的期限控制
- 分享内容的时效控制
- 记录一段时间的日志
本文将以如下两种数据库特性为例子来对此功能的实现进行介绍:
- mongodb
- redis
3 mongodb
3.1 实现方法
在mongodb中有个 TTL(Time To Live 生存时间)索引 功能:
TTL索引是一种特殊索引,通过这种索引 MongoDB 会过一段时间后自动移除集合中的文档。 这对于某些类型的信息来说是一个很理想的特性,例如: 机器生成的事件数据,日志,会话信息等,这些数据都只需要在数据库中保存有限时间。
- 如果你可以设定这个生命周期是多久他只要过了这段时间之后,它就会自动删除掉
- 删除的周期就是一分钟左右(和mongodb服务的负载有关),mongodb后台会进行周期性地检查这些索引字段
在 mongodb 中的实现方式:
db.ttl_log_session.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )
主要解释如下:
- 对 ttl_log_session 合集建立索引
- 索引字段为 lastModifiedDate
- 索引顺序是 升序
- 有效生存周期为 3600 秒
达到的效果:以 lastModifiedDate 时刻开始,经过 3600 秒之后,此文档会失效被删除掉。
3.2 过期时间精度
删除操作的一些注意事项:
- TTL索引 不能 保证过期数据会被立刻删除
-
在文档过期和MongoDB从数据库中删除文档之间,可能会有延迟。
- 删除过期数据的后台任务每隔60秒运行一次
-
在文档过期之后和后台任务运行或者结束之前,文档会依然存在于集合中(删除操作还没有完成)。
- 删除操作的持续实际取决于您的 mongod 实例的负载
-
在两次后台任务运行的间隔间,过期数据可能会继续留在数据库中超过60秒。
4 redis
redis是一个内存数据库,它具备快速IO的特点。在性能上会比Mongodb进行大幅度提升。
4.1 实现方式
通过如下方式:
EXPIRE key seconds
为给定的key设置生存时间,当key过期时(生存时间为0),它会被自动删除。
如下是一些设置生存时间相关的基本操作:
redis> SET cache_page "www.google.com" OKredis> EXPIRE cache_page 30 # 设置过期时间为 30 秒 (integer) 1redis> TTL cache_page # 查看剩余生存时间 (integer) 23redis> EXPIRE cache_page 30000 # 更新过期时间 (integer) 1redis> TTL cache_page (integer) 29996
注意事项:
- 生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆写(overwrite)
- 如果使用 RENAME 对一个 key 进行改名,那么改名后的 key 的生存时间和改名前一样
- 将一个带生存时间的 key 改名成另一个带生存时间的 another_key ,这时旧的 another_key (以及它的生存时间)会被删除,然后旧的 key 会改名为 another_key
4.2 过期时间精度
- 在 Redis 2.4 版本中,过期时间的延迟在 1s 之内
-
就算key已经过期,但它还是可能在过期之后一秒钟之内被访问到
在新的 Redis 2.6 以后的版本中,延迟被降低到 1ms 之内
5 小结
在进行web开发过程中,很多场合都需要用到数据的生命周期的功能。 关于如何实现此功能时,可以参考如下结论后再进行相应的技术选型:
本文关于 "数据生命周期" 主题的主要结论如下:
- 可以通过在web应用层上面做一些定时任务,但是那样的效率远没有直接在数据库层做操作要效率高
- 内存数据库(Reids)在过期时间精度上面的控制要远比磁盘数据库(MongoDB)要强得多,可能达到6万倍
在进行技术选型时注意在如下几个特性上进行比较:
- IO速度
- 数据持久化
- 数据的备份和复制集
- 数据库对多核心的利用
- 数据库集群的部署的成本和难度
- 开发的成本和难度
最终能够得出合适自己的技术方案,实现自己系统的功能
转载于:https://www.cnblogs.com/monjeo/p/8888527.html
过期不候--具备生命周期的数据的技术实现方案相关推荐
- 《大数据导论》之数据生命周期和数据使用
1 数据生命周期 数据都存在一个生命周期,数据生命周期是指数据从创建.修改.发布利用到归档/销毁的整个过程. 1.1 数据生命周期管理工作包括以下几个方面: 分类:对数据进行自动分类,分离出有效的数据 ...
- activity生命周期及数据保存
为什么80%的码农都做不了架构师?>>> public class ActivityLife extends Activity {// 在Activity生命周期开始时被调用@ ...
- 数据科学生命周期_数据科学项目生命周期第1部分
数据科学生命周期 This is series of how to developed data science project. 这是如何开发数据科学项目的系列. This is part 1. 这 ...
- uni-app 封装js方、页面的生命周期、数据双向绑定、封装组件
1.在外部封装js方法 很多页面都会用到相同的方法,为了代码的复用,可以在外部封装相同的方法 在项目中创建一个utils目录,存放外部封装的js方法 在utils目录下创建getDate.js文件 e ...
- 数据中台技术架构方案
点击上方蓝色字体"肉眼品世界",关注公众号 深度价值体系传递 数据中台技术架构: 来源:方案经理
- 基本程序单元Activity—Activity生命周期之数据传递小程序
一. 实验目的 (1) 掌握Andriod Studio的基本使用方法: (2) 掌握Andriod Studio中常用的控件及其使用方法: 二. 实验内容 题目: 编写一个数据传递的小程序,要求在第 ...
- vue 在哪个生命周期进行数据请求
看实际情况,一般在 created(或beforeRouter) 里面就可以,如果涉及到需要页面加载完成之后的话就用 mounted. 在created的时候,视图中的html并没有渲染出来,所以此时 ...
- 基于生命周期理论的农业科学数据中心化管理模式
基于生命周期理论的农业科学数据中心化管理模式 高飞1,2, 周国民2,3, 满芮2,4 1 中国农业科学院作物科学研究所,北京 100081 2 国家农业科学数据中心,北京 100081 3 中国农业 ...
- 数据全生命周期管理应用平台的组成
一个智能敏捷的数据全生命周期管理应用平台,从主数据管理.元数据管理.数据质量.数据标准以及数据安全五大方面,全方位保障企业业务数据在采集.集成.交换.存储.应用等一系列业务流程中的完整性.准确性.一致 ...
- 数据API开发如何快速上手:先了解什么是数据API生命周期管理
任何事务都有一个生命周期,数据API也不例外.上一段视频,我们解释了什么是数据API?.这段视频,我们来了解一下数据API的生命周期管理. 我们把每个数据API生命周期,划分为API规划.API开发. ...
最新文章
- Ubuntu 下安装 nfs
- 2015年12月份学习总结,前端开发工程师的知识库指引
- 如何构建高并发高可用的剧场直播云端混流服务?
- 用python写简单爬虫,用Python写简单的爬虫
- hbase 按时刻查询_Hbase查询工具类,根据时间查询数据
- 最小函数值(信息学奥赛一本通-T1370)
- java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)
- 操作系统大作业模拟实现命令解释器_06 初识shell之系统命令基础
- Linux下查看和停止所有java进程
- 通信算法之三十五:GMSK/MSK/CPFSK/CPM/FSK仿真链路
- Python电影票房数据可视化分析基础实践
- 计算机安全常用防护策略,新手必看
- 从《象形拳法真诠》看王芗斋与薛颠
- 看完就学会系列,小小一篇文章教会你利用Python网络爬虫抓取王者荣耀图片(建议收藏)
- 入门须知:次世代3D建模软件有哪些?
- yum arm linux gcc 4.8,Linux-使用 yum 升级 gcc 到 4.8
- 计算机二级是wpsoffice高级应用吗,考计算机二级ms office高级应用但是自己电脑上office软件都是wps 这和word ppt excel 软件有区别吗...
- 物联网与无线传感器网络期末考试复习资料(教材--刘伟荣,何云--电子工业出版社)
- 【学习笔记】CSW网络目录服务
- 【51Nod】-1326 遥远的旅途
热门文章
- java当前类路径_Java取得当前类的路径
- 区块链 FISCO BCOS学习文章(2)-FISCO BCOS怎么搭建
- Hyperledger Fabric 节点类型Commiter、Endorser、Leader、Anchor
- python输出特征相关矩阵_两个特征矩阵的有效成对相关
- java filterconfig_使用FilterConfig读取配置文件的信息 ---学习笔记
- liunx中如何查看软件的安装目录
- linux系统pdf目录编辑器,Linux操作系统(三)编辑器与实用程序.pdf
- 2.9.PHP7.1 狐教程-【控制语句 循环】
- Android 六大布局之 GridLayout(网格布局)
- Reactive Extensions 初识