在循环内调用redis’get’来显示论坛post查看数据
我正在重建一个论坛/董事会。 其中一个要求是为主题记录视图信息。
在当前系统中,每次加载页面时都会进行数据库调用,从而更新该post的查看计数。
我想避免这种情况,并且正在考虑使用类似于此post的技术实现redis来记录该信息 – jQuery Redis点击计数器来跟踪缓存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)。
希望有道理。
- 即使从生产模式下的服务器运行,Resque也会写入开发数据库
- 如何让Redis从Heroku开始?
- 将redis部署到heroku无法连接
- 如何使用ActionController :: Live以及Resque + Redis(用于聊天应用程序)
- Rails Puma用完了Redis连接
- Redis :: CommandError:ERR客户端发送了AUTH,但没有设置密码
- 如何判断sidekiq是否连接到redis服务器?
- Redis正在寻找env redis url变量,不知道在哪里放置env变量坏URI(不是URI?):( URI :: InvalidURIError)
- 如何在Rails应用程序中创建redis侦听器