Redis是一个伟大的工具,用来在内存中存储列表是很合适的。

不过,如果你想要快速搜索列表,同时需要让列表中每项都在一定时间后过期,应该怎么做呢?

首先,当然不能使用不同的类似的key存储数据,然后使用keys命令来获取所有类似key的数据。这样的开销是不可接受的。

Redis并没有直接提供方法做这件事,但是这是可以做到的!虽然最后用的未必是Redis的List数据结构。

问题:

我想在cmdb数据采集中,为API 这里加上一个认证的功能,毕竟不能谁都可以随便提交数据给我, 我就接收的所以还是需要一个认证的。

参考了 tonadou 中的一个验证方式。

1. 服务端 于 客户端共同维护同一个key。  客户端在发送数据过来时要携带token。 这个token 由这个key + 客户端的当前时间,MD5加密之后的字符串, 和 客户端的当前时间的时间戳组成。

2. 服务端 除了维护key意外,另外维护一个 过期时间。 比如是10秒钟。 当客户端token过来后。

  1)取出token中的 客户端的时间戳,减去过期时间10秒,  于服务器端的当前时间做对比。  如果客户端的这个时间 比服务端当前时间减去10秒后,还要小的话。 那就说明这个时间太久远了直接不准链接。

  2)拿着客户端的时间戳 和自己维护的key, 同样的加密后。 判断一下这个加密后的值是否已经访问过了。(就是用redis解决这个). 如果访问过了就不准再访问

  3)最后比对一下, 服务端和客户端的加密值是否一样, 一样就通过。 并且把这个加密后的值,再加到redis中。

然后我在网上找到这篇文章,它描述了两种办法。

Redis的集合:“无序的字符串集合”,它的项有下面的特点

  • 唯一的(如果加入重复的数据,redis会默默的拒绝)
  • 无序,并且不可以用任何方法(在redis中)排序

Redis有序集合:“有序的字符串集合“,它的项有下面的特点:

  • 和集合一样,每个项都是唯一的
  • 拥有积分(项的积分并不必须是唯一的)
  • 根据积分排序(有索引)

两种解决方法:

1. 有序集合

查询有序集合是非常快的,因为redis将一个列表转换成了集合,所以当我们访问它的时候,它已经是排好序的了。

根据Redis文档的描述:

“排序集是通过一个双端口数据结构实现的,其中包含一个跳跃列表和一个哈希表,所以每次我们添加一个元素Redis都会执行一个O(log(N))操作。这很好,但当我们要求排序后的元素时Redis根本不需要做任何工作,它已经排好序了“

当然,你不可以对有序集合中每个项设置过期时间。

你可以通过score对有序集合进行查询,我们可以利用这个地方来形成一个解决方案: (其中scroe指的就是该有序集合成员的次序。默认从小到大。)

对于加入到有序集合的每个项,我们都将它的score设置为 Unix Timestamp,这个timestamp代表它的过期时间。然后,我们加入一个定时任务,定时移除那些过期的数据

2. 多个集合以及过期时间

这个方案使用普通的集合。

因为不能对集合中每项都设置TTL,但是可以对整个集合设置TTL。所以,我们可以将每个时间段的数据放在一个集合中。然后对这个集合设置过期时间。

转载于:https://www.cnblogs.com/chengege/p/11075023.html

如何为Redis中list中的项设置过期时间相关推荐

  1. c# redis 如何设置过期时间_Redis 过期时间与内存管理

    http://www.redis.cn/commands/expire.html http://www.redis.cn/topics/lru-cache.html 内存管理 当 Redis 作为缓存 ...

  2. c# redis hashid如何设置过期时间_Redis中Key过期策略amp;淘汰机制

    1. Redis中设置Key过期时间 我们有两种方式设置过期时间 1.1 设置多久后过期 设置一个 key 10s 过期,可以这样 127.0.0.1:6379> SET key value E ...

  3. redis list设置过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  4. Spring中RedisTemplate方法中,redis相关操作笔记。[redis生成指定长度自增批次号,删除、设置过期时间等]

    Spring中RedisTemplate方法中,redis相关操作笔记. redis获取自增批次号 // opsForValue()生成long UUID = redisTemplate.opsFor ...

  5. 设置过期时间_在Redis中设置了过期时间的Key,需要注意哪些问题?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:千山qianshan juejin.im/post/5d6b ...

  6. java cookie过期_Java中Servlet Cookie设置过期时间(expires,max-age)

    Java中Servlet Cookie设置过期时间(expires,max-age) expires或者max-age指定了coolie的生存期,默认情况下coolie是暂时存在的,他们存储的值只在浏 ...

  7. 前端小白闲着没事,封装一个可以设置过期时间的localStorage存储函数,在vue脚手架中使用

    本身localStorage 是没有这个功能的,除非手动删除要不永久保存在本地. seesionStorage 我们就不考虑 他这个只要网页的标签关闭了 在当前标签就自动清除了存储. 在工作中 我们用 ...

  8. c# redis hashid如何设置过期时间_Redis数据库实现原理(划重点)

    Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每一项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库, ...

  9. Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)

    字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...

  10. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间

    相信大家在很多业务场景都会遇到对数据设置过期时间,如安全认证token.短信验证码等.一般我们的解决有几种:存redis.存数据库.实时计算(如JWT),不管使用哪种方式,需求就是过期了对数据的清理. ...

最新文章

  1. python encoding报错_python用requests递归查询页面 报错 ChunkedEncodingError
  2. winhex使用经验
  3. 【附赠PPT】 KubeMeet 成都站回顾:让云原生应用交付和管理变得更简单
  4. php 打乱数组顺序_PHP实现大转盘抽奖算法
  5. 【Python】shutil内置模块复制和重命名文件
  6. c#如何实现excel导入到sqlserver,如何实现从sqlserver导出到excel中(详细)
  7. c#获取部分DRAW
  8. Windows平台调查网络程序的2个系统工具
  9. 关于一个正弦波程序表格生成器
  10. 痴情人, 浮生梦(上)
  11. 计算机基础技能培养,计算机基础技能培养大纲(非计算机专业).doc
  12. 矩阵微分常用公式整理
  13. php做seo优化,php做seo优化能力有哪些
  14. 隐函数存在定理1及求导公式_20160505
  15. resnet—吴恩达
  16. LVS+Keepalived之DR模式配置
  17. 如何购买云服务器----以华为云服务器为例
  18. MSSQLSERVER 2019修改数据库文件存放路径的简单实现
  19. 达梦物化视图概念及简单示例
  20. 在编写了一个c语言源程序c001.c,C习题及答案

热门文章

  1. Kernel: Do NOT use global variable as possible as you can 尽量不使用全局变量
  2. 计算机科学为什么重要,数学 – 为什么在计算机科学中有8和256个如此重要的数字?...
  3. 微软在线实验室启用谷歌的reCAPTCHA,我们又丢失了一个好东东
  4. js,jquery的数字型字符串变量比较大小
  5. socket编程—— 服务器遇到Broken Pipe崩溃
  6. javascript面向对象技术基础
  7. AS3改变显示对象亮度
  8. 阿里云Link Security为企业级区块链提供易用性安全解决方案
  9. 脱欧临近引民众忧心食品短缺 英“脱欧生存包”热卖
  10. windows 7系统安装与配置Tomcat服务器环境