当前位置: 首页 > 面试题库 >

在循环内调用redis“获取”以显示论坛帖子查看数据

柴瀚
2023-03-14
问题内容

我正在用Rails重建论坛/委员会。要求之一是记录主题的观看信息。

在当前系统中,每次页面加载时都会进行数据库调用,以更新该帖子的视图计数。

我想避免这种情况,并且正在考虑使用类似于此帖子的技术来实现redis来记录该信息-jQuery Redis hit
counter跟踪缓存的Rails页面的视图

因此,我将向一个请求请求的控制器(通过javascript)记录视图,然后执行cron作业将redis使用情况数据移至数据库(将其从redis中移除)。

我的难题是,当前的系统提供实时的使用信息,因此这将是前进的期望。按照我的计划,使用Heroku-最频繁的Cron工作将每小时运行一次,我认为这是不可接受的。

我的想法是,我可以将使用情况信息存储在redis中,然后在遍历主题时,我会将redis中存储的使用价值与cron作业中保存在数据库中的值结合起来。

这是一个愚蠢的主意吗?我是Redis的新手,所以我真的不知道有什么可能。像我建议的那样,在循环中进行redis呼叫是否是大禁忌?


问题答案:

如果您确实需要旧的应用程序来维护实时统计信息,并且想要使用Redis,则必须更改旧代码才能访问它。

这是您的代码的起点。

每次点击时,您都可以在Redis中检查线程的计数器。如果计数器键不存在,则会激活加载。

因此,这是保持统计信息更新的一种方式(使用php,phpredis客户端):

try {
    $redis = new \Redis();
    $thread_id = getFromPostGet("thread_id"); //suppose so
    $key = 'ViewCounterKey:' . $thread_id; //each thread has a counter key

    $redis->multi(); //begin transaction
    if (!$redis->exists($key)) {
        $counter = getFromDB("count(*) where thread_id = $thread_id"); //suppose so
        $redis->set($key, $counter);
    }
    $redis->incr($key); //every hit incrs the counter
    $redis->exec(); //end transaction
}
catch (\RedisException $e) {
    echo "Server down";
}

因此,该解决方案可以与cron作业放在一起,这样可以保持视图计数,并且每个cron之间的1h延迟都无关紧要,因为您一直在寻找内存(Redis,而不是DB)。

希望有道理。



 类似资料:
  • 自动检测设定论坛最新帖子,显示最新帖子列表,新帖自动提示,让你成为论坛抢沙发第一人!

  • 本文向大家介绍destoon调用discuz论坛中带图片帖子的实现方法,包括了destoon调用discuz论坛中带图片帖子的实现方法的使用技巧和注意事项,需要的朋友参考一下 在destoon开发中有时候我们需要调用论坛的帖子,但是带有图片的帖子该怎么调用出来呢,本文就来实例展示一个可以调用discuz论坛带图片的帖子的方法: 标签代码如下: 调用论坛新帖子的方法如下: 希望本文所述方法对大家de

  • 在一个新的WordPress模板中,我想自定义单个。php,以便仅向帖子作者显示评论列表。 其他用户(客人和其他帖子作者)不应该看到评论或空白。 总之,帖子作者(登录时)可以在他的帖子底部看到评论列表,但在其他作者写的帖子底部看不到任何内容。 我应该对下面的代码应用什么条件代码? 这仅适用于前端。我不关心管理面板。

  • 问题内容: 我正在为这个论坛进行编码,由于我是LINQ的新手,因此用户访问主页时遇到了这个问题。我想要一个显示这样的论坛列表的表: 我有以下SQL表: 谢谢… 问题答案: 如果您使用成员身份并且不想将aspnet_Users包含在dbml中,则用于显示用户名: 使发布的示例更好一点的另一项更改是在posts变量中添加orderbydescending:然后,您可以从select子句中删除重复4次的

  • 问题内容: 我知道这个问题已经被问过几次了,但是没有一个答案令我满意。这是因为几乎所有人都涉及与数据库相关的巨大读取/写入过程,我希望不惜一切代价避免这样做。 关于未读的讨论/主题/帖子,有很多需要考虑的地方。我不知道MyBB,vBulletin,Invision电源板,Vanilla,phpBB等论坛系统如何解决该问题,所以我想向大家介绍您的经验。我知道,仅为此目的使用数据库表是最简单的方法,但

  • php+mongodb能实现类似于”掘金“这个论坛的帖子功能,首页展示的基本上不会重复,并且都是随机的, 使用list存入文章id,然后把id变成随机的,但是重复刷新分页变成了1的话,数据又还原了,如果监听分页页数变成了1就重新排序一次的话,对于游客就不是很友好