请问从数据库随机选择了一条数据,然后第二次随机的时候就排除掉这条数据,假设一分钟内。应该怎么做呢
我想的是,随机一个出来就存到redis,然后记一个时间。第二次随机的时候从redis取出来然后过滤,但感觉这方法有点不优雅,想问问大家有什么优雅的解决方法吗
随机出来的数据存个id 然后第二次随机的时候加个条件 id!=第一次存的id
存缓存里面 具体是redis 还是数据库里面都可以 要不然你没法拿到
能不能按照时间的唯一性去做随机查询呢?不同时间的有不同的随机池。如果是在一分钟内的话,是不是可以按照60个维度的随机池。
添加一个字段,取出时顺便修改那个字段,比如时间戳或批次。然后,下次查询时排除该批次该字段非空有时间戳的。
换个思路全取出来存redis里,然后一个个从redis里面随机去,然后loop :joy:
第一步:把所有数据的id取出来,转换成一纬数组,打乱数组顺序,然后循环push到redis的list里面
第二步:每次从list里面pop一个id出来,用id去数据库取数据
第三步:当list里面数据pop完之后,重复第一步
布隆过滤器可以实现哦
可以考虑使用一个临时表来记录随机选择的数据,并在第二次随机的时候,通过查询临时表来排除已经随机选择的数据。 例如,假设有一个数据表
my_table
,包含如下字段:第一次随机选择数据的 SQL 语句可能如下:
第二次随机选择数据的 SQL 语句可能如下:
上面的 SQL 语句中,首先通过子查询从临时表
tmp_table
中查询已经随机选择的数据,然后通过NOT IN
操作符来排除已经选择的数据。此外,如果需要在一分钟内排除已经随机选择的数据,可以在临时表中记录随机选择的数据的时间,并在第二次随机的时候,通过比较时间来判断是否需要排除该数据。例如,可以将临时表的字段增加如下:
第一次随机选择数据的 SQL 语句可能如下:
然后将选择的数据插入到临时表中,并记录选择时间。例如:
第二次随机选择数据的 SQL 语句可能如下:
上面的 SQL 语句中,首先通过子查询从临时表
tmp_table
中查询一分钟内已经随机选择的数据,然后通过NOT IN
操作符来排除已经选择的数据。