也是一个业务需求,如题,有曾经实现过的大佬嘛?能否给个例子或文章链接参考一下
|  |      1Mazexal      2018-08-30 09:30:23 +08:00 存数据库 | 
|  |      2Light3      2018-08-30 09:44:30 +08:00 mysql  存一条 里面有个过期时间 不就完了吗 | 
|  |      3rockyou12      2018-08-30 09:45:15 +08:00 数据库存过期时间,然后程序轮询 | 
|  |      4tlday      2018-08-30 09:48:26 +08:00 via iPhone  5 不需要轮询让他失效,用的时候查一下是不是在有效期内就可以了。 | 
|      6batter      2018-08-30 10:04:05 +08:00 表里面添加一条数据,设置过期时间就可以了 | 
|      7ieiayaobb      2018-08-30 10:09:25 +08:00 我们之前有一种很 trick 的做法是用 JWT,也有 ttl,可以在验证签名的时候校验 | 
|      8Shynoob      2018-08-30 10:10:20 +08:00 相比问题我更好奇为什么不使用 redis | 
|  |      9tomfs      2018-08-30 10:14:50 +08:00 简单需求没必要弄卡车来跑吧,memcached 就足够了吧 | 
|  |      10Zzdex      2018-08-30 10:15:58 +08:00 via iPhone 用 jwt | 
|  |      11willchen      2018-08-30 10:18:52 +08:00 嗯 jwt 可以,大致就是把过期时间 加密后 作为参数 | 
|  |      12rockyou12      2018-08-30 10:27:36 +08:00 @matzoh 过期的时候可能需要触发其他业务,只存时间很多时候都不行。redis 本身 key 可以设置过期时间,而且可以订阅其事件达到一过期就自动触发业务,你只用数据库那不就只能轮询了。 | 
|  |      13Hayek      2018-08-30 10:29:41 +08:00 | 
|  |      14alwayshere      2018-08-30 10:35:43 +08:00 用数据库存时间也是醉了,你把时间用个可逆式加密的函数写进验证码不就行了吗,后端验证的时候解密验证时间不就行了 | 
|  |      15lerry      2018-08-30 10:37:15 +08:00  1 base64(过期时间$用户 id$sha1(过期时间+用户 id+secret_key)) 请求的时候,服务器拆开过期时间和用户 id(或者 token) 和哈希值,检查时间是否到期,对过期时间、用户 id、密钥做哈希,检查是否一致 并不需要用数据库 | 
|  |      16rockyou12      2018-08-30 10:38:18 +08:00 @Hayek 我又不是写需求,我是在解释为什么用 redis 比较好,还有为什么数据库轮询可以达到一样的效果。领导当惯了口气不小啊?(´・_・`) | 
|  |      18Hayek      2018-08-30 10:40:23 +08:00 @rockyou12 哈哈,抱歉了,不是领导,底层码农而已,偶尔带新人。您说的情况下确实 redis 好,然而楼主并没有说过期之后要触发什么需求,我只是不太喜欢过度优化,简单需求复杂化而已。 | 
|      19choice4      2018-08-30 10:49:16 +08:00 guava 呢 | 
|      21loveCoding      2018-08-30 10:59:02 +08:00 在 url 上带个过期时间的加密参数,前提是别让人解出来 | 
|  |      22ronglexie      2018-08-30 11:03:32 +08:00 | 
|      23wplct      2018-08-30 11:06:55 +08:00 楼上有些程序员的方案怕不是要被打死 | 
|  |      24rockyou12      2018-08-30 11:29:08 +08:00 | 
|  |      25tt67wq      2018-08-30 11:32:20 +08:00 jwt 可以做的吧 | 
|  |      26willchen      2018-08-30 11:37:10 +08:00 @Hayek 我用过的邮箱验证码都是链接 逃),说 jwt 是能让一个链接同时搞定认证用户 id 和有效时间,只需要有效时间的话,就是我说的后半句话。 | 
|  |      27zsdroid      2018-08-30 11:39:02 +08:00 @alwayshere #14 数字验证码了解下 | 
|  |      28ipwx      2018-08-30 11:44:41 +08:00 via iPhone 数据库存时间,后台任务定期轮询,反正时间序基本等于自然序,处理完开头的记录就可以等下一次轮询了,基本没有效率损失。 | 
|      29aa6563679      2018-08-30 11:46:19 +08:00 把过期时间加密写到验证码里面 | 
|  |      30reus      2018-08-30 11:47:16 +08:00 验证码太短,肯定要数据库,如果是验证 url,可以把过期时间和其他信息打包然后做 aes 之类的对称加密,验证时看记录的时间就行 | 
|  |      31yejinmo      2018-08-30 11:53:33 +08:00 List + 维护线程 | 
|      32derrickT      2018-08-30 12:20:41 +08:00 时间戳作为参数然后加密,验证的时候解密就可以了 | 
|  |      33opengps      2018-08-30 12:22:32 +08:00 存哪都行,只要带着时间就可以,验证时候检测是否超期,或者直接超期数据自动删掉 | 
|  |      34liuqitoday      2018-08-30 12:26:43 +08:00 via Android jwt | 
|      35reself      2018-08-30 12:41:10 +08:00 via Android @Hayek shut your mouth and show me your code。diss 别人时请拿出自己的方案。 | 
|  |      36d5      2018-08-30 12:43:13 +08:00 via iPhone jwt 思路不错 | 
|      37reself      2018-08-30 12:47:07 +08:00 via Android 假设这里的 redis 统指服务端存储。这就是一个 token 到过期信息的 map,就看把过期信息存储到哪里。可以考虑 jwt 或者类似的把信息存储到客户端的方案。甚至可以考虑区块链,把信息存到网络上。 | 
|      38honeycomb      2018-08-30 12:48:00 +08:00 via Android jwt 的 TTL,布隆过滤器什么的都可以 | 
|      39wfd0807      2018-08-30 12:55:33 +08:00  4 这个帖子暴露了 V2 的部分程序员的水平,好帖子~ | 
|      40wfd0807      2018-08-30 13:04:35 +08:00  1 先分析问题,再给解决方案 楼上那些上来就给方案的,我想问问,你们确定知道楼主要做的是"验证邮箱"还是"接收验证码"吗? | 
|      41wfd0807      2018-08-30 13:06:30 +08:00  1 最后还要喷一下楼主,要想别人提供有效的帮助,自己先学会高效的沟通 | 
|  |      42lhx2008      2018-08-30 13:10:30 +08:00 via Android 如果是 java 的话,guava cache 可以单机代替 redis | 
|      44panpanpan      2018-08-30 13:27:09 +08:00 via iPhone Jwt 贼适合干这事 | 
|  |      45Hayek      2018-08-30 14:16:51 +08:00 @reself shut your mouth and read other replies. 楼上有人说了存一条过期时间就行了,我就没必要重复了。而且我并没有 diss 的意思,第一条回复可能被误解 diss,我已经道歉。 哎,英文真是好,我还得查字典来回复您。 | 
|  |      46Hayek      2018-08-30 14:20:30 +08:00 @willchen 是的,邮箱一般都是链接,楼主这个描述确实有问题。我觉得用 jwt 的话,那这个发给用的链接里面要把 jwt 的参数带上,这个链接就会很长。 一般的网站的做法是生成一个加密字符串(大部分时候是加 salt 的 md5 ),数据里存下来,然后把这个加密字符串拼接到 url 里发送给客户。 | 
|      49honeycomb      2018-08-30 16:48:27 +08:00 via Android @lhx2008 现在用 caffeine 比 guava cache 更好,前者是利用了 Java 8 的 concurrenthashmap 重写版的后者 | 
|  |      50sky101001      2018-08-31 11:37:06 +08:00 via iPad 如果楼主的题干是指接收数字验证码,而不是链接 那么我真的很想知道楼主的那个数字验证码是存在哪里的 | 
|      51YiweiHangzhi OP @sky101001 我现在暂时先全存数据里了,验证码、有效状态、邮件发送时间三个字段 | 
|  |      52mmdsun      2018-09-01 01:00:13 +08:00 via Android 放 session 设置过期时间。。 |