V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
EmbraceQWQ
V2EX  ›  程序员

想请教大佬们个问题

  •  
  •   EmbraceQWQ · 1 天前 · 1532 次点击
    最近在搞一个私下的项目,打算开发一个页面来展示随机用户没看过的图片,打算写一个每次出图片都是用户没看过的。

    想问问各位后端大佬们有没有什么好的设计思路。

    我现在想的是:

    每个用户都维护一个 log 表,然后加载最近 1000 条到 redis 的 布隆过滤去里面缓存保持一个星期,每次查个 5000 条或者一个特别大的数字,然后过滤出没看过的,再展示给用户。因为图片每天都会更新,我感觉他一天也看不到那么多张图片,不知道这样设计有没有问题?

    图片都放在一个表里面,然后主键 ID 是雪花,一开始要求是随机,我是打算随机一个数来进行 id 取余来查询的。不过后面要求出现没有看过的,问了 gpt 也没什么好思路,来看看大佬们,有没有做过,来讨论集思广益一下。


    现有的网站:

    有些不是很适合点开的内容,上班或者人多不要点开。

    https://www.girls-rating.com
    第 1 条附言  ·  19 小时 42 分钟前
    我现在有个新思路,也是比较简单的,我的页面都限制了分页,我打算使用一个简单的方法,记录页码,固定分页数量,把数据简单分组来进行遮罩处理,这样会不会好点呢?
    18 条回复    2025-01-07 20:17:08 +08:00
    NoOneNoBody
        1
    NoOneNoBody  
       1 天前
    还要看细化需求
    如果每天新图很多,又没有展示旧图的需求,就很简单
    >viewed_max_id ,然后随机或乱序就可以了

    但如果新图的量不足够,又或者需要展示旧图,这就难一些了,需要遮罩,就是你原来的思路
    leejinhong
        2
    leejinhong  
       1 天前
    我觉得尽量做到伪重复即可,再一段时间内不重复或者控制重复的概率降到极低,尽量使用 redis 去去重。如果需求确实是需要做到不重复的话,我觉得最好就是每个用户维持一个类似于信息流的东西,新的就放进来 ,看过的就丢到另外一个信息流,主要处理就是如何将新的信息流塞进去每个用户的池子里面
    tool2dx
        3
    tool2dx  
       1 天前
    你量那么大,服务器就直接返回随机也挺好的。

    如果用户需要看没看过的,那就本地客户端存一个最近 1000 条 ID 列表。正常人哪看到那么多图片。
    skallz
        4
    skallz  
       1 天前
    这种根本不需要放到后端做吧,前端不能做吗,为啥要浪费性能做这种东西。。。
    vipshf
        5
    vipshf  
       1 天前
    这个项目好啊兄弟,支持
    git00ll
        6
    git00ll  
       1 天前
    布隆过滤器, 偶尔重复一次也无妨吧
    abc1310054026
        7
    abc1310054026  
       1 天前
    假设有一个无限大不重复的图片数组:
    用户 1 从 0 + step * 0 开始按顺序访问
    用户 2 从 0 + step * 1 开始按顺序访问
    用户 n 从 0 + step * n 开始按顺序访问

    这可以保证用户看到的永远是没看过的。
    wangtian2020
        8
    wangtian2020  
       1 天前
    每隔用户给不同的种子,种子可以生成不重复的数字数组,每次输入参数加一就行了
    EmbraceQWQ
        9
    EmbraceQWQ  
    OP
       1 天前
    @NoOneNoBody
    @leejinhong
    @wangtian2020

    谢了几位大佬,我也是打算往这几个方向入手。晚上先搞一个简单的 API 试试
    EmbraceQWQ
        10
    EmbraceQWQ  
    OP
       1 天前
    @vipshf 你是说你打开之后,不小心点了确认加载弹窗,看到了一些图片(狗头)?
    BanShe
        11
    BanShe  
       1 天前
    谢谢你还好有个 Age Confirmation😂
    vipshf
        12
    vipshf  
       1 天前
    @EmbraceQWQ #10 下次建议把“有些不是很适合点开的内容,上班或者人多不要点开。”这个话加粗放在最前面
    abc0123xyz
        13
    abc0123xyz  
       1 天前
    我爱这个网站!
    pike0002
        14
    pike0002  
       1 天前
    纯粹来吐槽一下这个标题的
    opengps
        15
    opengps  
       1 天前
    记录图片的 md5
    EmbraceQWQ
        16
    EmbraceQWQ  
    OP
       1 天前
    @opengps 能详细说说吗?我没有想到这个思路
    EmbraceQWQ
        17
    EmbraceQWQ  
    OP
       1 天前
    @abc0123xyz 修生养性
    edwardzcn98
        18
    edwardzcn98  
       10 小时 14 分钟前
    @leejinhong 想请教一下用 redis 去重是什么概念
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 88ms · UTC 22:31 · PVG 06:31 · LAX 14:31 · JFK 17:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.