避免全库扫描的解决方案
由于安全方面限制,要求我们不能保存用户的信用卡信息,包括信用卡过期时间.
但是可以通过一个 api, 单次调用获得 一个用户的 信用卡过期时间 .
现在要求 在用户信息用卡过期的前三天,给用户发送邮件通知 .
请问如何避免每天大量全库用户调用 API 来实现这个功能 .
(信用卡过期时间 为 年月 eg: 07/21 2021年07月过期 , 一般认为 当月的最后一天为过期时间)
注意
不能存储用户的任何信用卡信息 . 因为 PCI 标准认为,存储一个信息也是存,只要有存储用户信用卡行为,那么必须保证整个环境(服务器,数据库,防火墙巴拉巴拉的 全部都要符合一定级别的标准) . 但是我们无法保证符合这么多标准.所以 用户信用卡信息, 一律不能存储,只能通过 API调用.
不管啥形式的,不管加密还是什么的,,只要有办法推算出具体的过期时间,就不能存了.
真不是我搞事,是真的就有这么奇葩的限定的条件下需求.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
楼主意思应该是阅后即焚,过期时间绝对不能持久化存储,所以楼上提到的存储当月是否过期也是不行的。
我目前的思路是这样,具体时间不能存储,但我们可以存储先后顺序:
1、每月也许还是需要扫描一次全库,把用户信用卡过期时间排序,我们不存储过期时间,只存储先后顺序,比如用户A比用户B先过期,A就排B用户前面。实现方法很多,不再赘述;
2、该发提醒邮件时,按上面的顺序开始读API,只要读到用户过期时间不是本月,就立即中止。
当然还有一些细节问题,比如新用户加入时如何添加到轮询中,但这些都不难处理,不再多说。
办法一
不记录信用卡过期时间,只记录提醒信时间,到这个时间的时候再扫描一次确认并提醒。当然如果这个时间是一个固定间隔,可以反推信用卡过期时间(但貌似已经符合要求了)
办法二
不用每天扫描,只在用户登录的时候进行一次扫描,并根据扫描结果判断是否提醒。如果用户长期不登录,当然这个提醒就不会触发,所以要看是否符合产品需求。
办法三
按月、周、季之类的周期定期扫描,并根据扫描结果记录下次应该扫描的时间。如果发现应该提醒了,就提醒。如果提醒时间落在平常扫描的大间隔周期之内,设置下次扫描时间的时候可以适当考虑一个更精确的扫描时间。如果希望用户信息不是那么容易被推测出来,可以将定期改为对每用户在一定范围(不过期)内随机选择下次扫描时间。
目前来看,办法三可能会更安全,同时也大大降低的扫描频率。
调用API提供了什么参数?是不是本站user_id
可以存储上次查询日期和是否当月过期么?这样大部分卡可以一个月查询一次,到月底三天前给所有有标记的用户发邮件?
取的时候标记下下次请求时间呗,然后把用户和下次请求时间丢到队列里去。。如果连这个都不行,那没办法了。只有全量
首先声明,我不知道过期时间是指确切的日期呢,还是说任何能计算出信用卡过期日期的数据都不可持久化。如果过期时间是指确切的日期,1. 那么可以持久化过期日期和此时此刻的时间差。2. 按照第一步拿到时间差,但是不持久化,选择创建定时任务,可以是在多少多少时间后执行这个任务,也可以是在何时执行这个任务,按时间差值分段持久化任务群,哪天不放心了就检查检查,也可以不持久化,就把这些定时炸弹埋在那里。