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万倍

在进行技术选型时注意在如下几个特性上进行比较:

  1. IO速度
  2. 数据持久化
  3. 数据的备份和复制集
  4. 数据库对多核心的利用
  5. 数据库集群的部署的成本和难度
  6. 开发的成本和难度

最终能够得出合适自己的技术方案,实现自己系统的功能

转载于:https://www.cnblogs.com/monjeo/p/8888527.html

过期不候--具备生命周期的数据的技术实现方案相关推荐

  1. 《大数据导论》之数据生命周期和数据使用

    1 数据生命周期 数据都存在一个生命周期,数据生命周期是指数据从创建.修改.发布利用到归档/销毁的整个过程. 1.1 数据生命周期管理工作包括以下几个方面: 分类:对数据进行自动分类,分离出有效的数据 ...

  2. activity生命周期及数据保存

    为什么80%的码农都做不了架构师?>>>    public class ActivityLife extends Activity {// 在Activity生命周期开始时被调用@ ...

  3. 数据科学生命周期_数据科学项目生命周期第1部分

    数据科学生命周期 This is series of how to developed data science project. 这是如何开发数据科学项目的系列. This is part 1. 这 ...

  4. uni-app 封装js方、页面的生命周期、数据双向绑定、封装组件

    1.在外部封装js方法 很多页面都会用到相同的方法,为了代码的复用,可以在外部封装相同的方法 在项目中创建一个utils目录,存放外部封装的js方法 在utils目录下创建getDate.js文件 e ...

  5. 数据中台技术架构方案

    点击上方蓝色字体"肉眼品世界",关注公众号 深度价值体系传递 数据中台技术架构: 来源:方案经理

  6. 基本程序单元Activity—Activity生命周期之数据传递小程序

    一. 实验目的 (1) 掌握Andriod Studio的基本使用方法: (2) 掌握Andriod Studio中常用的控件及其使用方法: 二. 实验内容 题目: 编写一个数据传递的小程序,要求在第 ...

  7. vue 在哪个生命周期进行数据请求

    看实际情况,一般在 created(或beforeRouter) 里面就可以,如果涉及到需要页面加载完成之后的话就用 mounted. 在created的时候,视图中的html并没有渲染出来,所以此时 ...

  8. 基于生命周期理论的农业科学数据中心化管理模式

    基于生命周期理论的农业科学数据中心化管理模式 高飞1,2, 周国民2,3, 满芮2,4 1 中国农业科学院作物科学研究所,北京 100081 2 国家农业科学数据中心,北京 100081 3 中国农业 ...

  9. 数据全生命周期管理应用平台的组成

    一个智能敏捷的数据全生命周期管理应用平台,从主数据管理.元数据管理.数据质量.数据标准以及数据安全五大方面,全方位保障企业业务数据在采集.集成.交换.存储.应用等一系列业务流程中的完整性.准确性.一致 ...

  10. 数据API开发如何快速上手:先了解什么是数据API生命周期管理

    任何事务都有一个生命周期,数据API也不例外.上一段视频,我们解释了什么是数据API?.这段视频,我们来了解一下数据API的生命周期管理. 我们把每个数据API生命周期,划分为API规划.API开发. ...

最新文章

  1. Ubuntu 下安装 nfs
  2. 2015年12月份学习总结,前端开发工程师的知识库指引
  3. 如何构建高并发高可用的剧场直播云端混流服务?
  4. 用python写简单爬虫,用Python写简单的爬虫
  5. hbase 按时刻查询_Hbase查询工具类,根据时间查询数据
  6. 最小函数值(信息学奥赛一本通-T1370)
  7. java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)
  8. 操作系统大作业模拟实现命令解释器_06 初识shell之系统命令基础
  9. Linux下查看和停止所有java进程
  10. 通信算法之三十五:GMSK/MSK/CPFSK/CPM/FSK仿真链路
  11. Python电影票房数据可视化分析基础实践
  12. 计算机安全常用防护策略,新手必看
  13. 从《象形拳法真诠》看王芗斋与薛颠
  14. 看完就学会系列,小小一篇文章教会你利用Python网络爬虫抓取王者荣耀图片(建议收藏)
  15. 入门须知:次世代3D建模软件有哪些?
  16. yum arm linux gcc 4.8,Linux-使用 yum 升级 gcc 到 4.8
  17. 计算机二级是wpsoffice高级应用吗,考计算机二级ms office高级应用但是自己电脑上office软件都是wps 这和word ppt excel 软件有区别吗...
  18. 物联网与无线传感器网络期末考试复习资料(教材--刘伟荣,何云--电子工业出版社)
  19. 【学习笔记】CSW网络目录服务
  20. 【51Nod】-1326 遥远的旅途

热门文章

  1. java当前类路径_Java取得当前类的路径
  2. 区块链 FISCO BCOS学习文章(2)-FISCO BCOS怎么搭建
  3. Hyperledger Fabric 节点类型Commiter、Endorser、Leader、Anchor
  4. python输出特征相关矩阵_两个特征矩阵的有效成对相关
  5. java filterconfig_使用FilterConfig读取配置文件的信息 ---学习笔记
  6. liunx中如何查看软件的安装目录
  7. linux系统pdf目录编辑器,Linux操作系统(三)编辑器与实用程序.pdf
  8. 2.9.PHP7.1 狐教程-【控制语句 循环】
  9. Android 六大布局之 GridLayout(网格布局)
  10. Reactive Extensions 初识