呃,你关注过 each map collect 之间的性能差异么。。。
HR 让我来顶贴来表示对大家的欢迎
可是用 React Native 也要写两遍。。。。。。。。。。。
Rails 4.2.3 开发环境没有问题,和之前是一样的,Ruby China 的场景的话
在开发环境下面,所有请求的速度都慢了几倍,4.2.2 / 4.2.4 都是正常的
revel & martini 好像都挺非主流的... 从 monthly trending 上来看,好像 go 的项目活跃度比 ruby 的高一点...
@ruby_sky ruby 版本开源难度太高.... 不过倒是有几个 ruby 开源的 gem https://github.com/qor
@peter 来吧,我们会讲讲我们怎么用 go 搭积木,分享下我们用 go 写的积木,并且我们的维护积木心得,让积木随着不断的变大而不倒........
没有试过。。。不过这个问题蛮变态的。。。。普通的测试还挺难测试出来。。。。应该就是上面的那个 issue,两年前的问题,这几天又在扯蛋了。。。。。。
我刚刚遇到这个问题以为是 rails 的关联缓存,debug 了一会才发现
我以为我说的挺明白了,结果。。。。。。。
# 上面有
def print_order_items
puts order.items.to_sql
end
# 下面有
order.reload.items(true).to_sql 仍然无效哦。。。。。
Order.find(order.id).items.to_sql 也并没有什么卵用。。。。。。
@hz_qiuyuanxin Show me the 文档
? 那里有讲?。。。。。。或者说你明白我说的是啥意思么?
@hz_qiuyuanxin 我只是了提一下这个 unexpected behaviour , 我有好多解决方案来解决这个问题,但仍然抵挡不了这个是个 unexpected behaviour (BUG) 啊!!!!!!!
@martin91 请认真读一遍!请认真读一遍!请认真读一遍!
@hz_qiuyuanxin 问题是这样子的,first_or_create 里面的条件 .where(product_id: 888)
给应用到 callbacks 中了,并且在 callback 中怎么也去不掉这个 where 条件
order.items
order.reload.items(true)
Order.find(order.id).items
也就是说,不管当前的订单有多少 items, 在 callbacks 中始终只能找出一个。。。。。
@hz_qiuyuanxin 再看看加的条件的位置?
order.items 不应该是
// SELECT `order_items`.* FROM `order_items` WHERE `order_items`.`order_id` = 99
么
@ch3n 撇开 gorm 功能应该是最多的不说。。。他有个强大的插件系统,你可以基于他写各种插件,例如我们基于它写的类似 rails admin/active admin 类似的后台管理软件 http://getqor.com/ ;)
@ruohanc puma 不是默认就有 capistrano 支持么...记得我还给改过...
@rockliu 我的 thinkpad 进了6杯水了....晾了晾就好了...
我想下吧。没在真实的产品环境实验过,读两次代价也挺高的,毕竟不是单机进程内读数据。 调用 memcache 是有网络开销的。你要一个方法内有 4 次调用数据库,无形中就可能多了 4 次的 memcache 调用
https://github.com/mperham/dalli 这种库一般都是维持一个长连接的,所以可以忽略网络开销。。。
@ihlayy 其实挺简单的,只是读两次 memcache 而已,第一次读 cache key,第二次读真正的缓存值。
这个带来的好处就是,你不需要维护缓存的数据 (不用清缓存) (这个的复杂度通常来说是很高的。。。特别在还有关联表的情况下)。。。。你看看和你上面的解决方案来比较,这个解决方案轻量级多了。。。
一般几个思路?
1. Rails,Java通用的类库
2. 各自独立,更新的时候通过队列,或者Rest api通知另一端更新
3. 数据统一从一个地方取,一个数据层?(这种效率就不清楚了)
@ihlayy 我的描述能力有这么差么?。。。。
再以你的例子举个例子:
getCacheKeyFromMemcache() -> 123456
rails cache_key(getCacheKeyFromMemcache()) -> customer1
java cache_key(getCacheKeyFromMemcache()) -> customer1
如果 rails 中 customer 变了:
getCacheKeyFromMemcache() -> 56789
rails cache_key(getCacheKeyFromMemcache()) -> customer1_change
java cache_key(getCacheKeyFromMemcache()) -> customer1_change
浅显易懂了么?
@ihlayy 给你举个例子,对于 customer 这个类来说 rails, java 要有一个同享的 cache key(例如名字叫:customer_cache_key, 这个 key 是用来存到 memcache 中的),这个 cache key 的值是一个随机值。
如果 rails 中 customer 变了的话,就更新 customer_cache_key 的值变成另一个随机值,如果 java 中 customer 变了的话,就更新 customer_cache_key 的值为另一个随机值。
这样子你取的时候,只需要根据 customer_cache_key 的值来读缓存,如果不存在缓存就写数据库就可以了
@ihlayy 你就压根不需要管 cache key 是什么组成的,你只要知道他是一个随机数就好了!java 那边难道不能做成一个随机数存到 memcache 里?。。。
参考这 18 行代码: https://github.com/qor/qor_cache/blob/master/lib/qor_cache/active_record.rb#L15-L33
以及这两行 https://github.com/qor/qor_cache/blob/master/lib/qor_cache/active_record.rb#L7-L8
你的类会维护一个类级别的 cache key,如果这个类有更新的话,就会改变这个类的 cache key,你所要做的就是在你的类方法上用这些类级别的 cache key 就好了...
@ihlayy 不要尝试写回调让缓存失效,只要改变缓存的 key 即可。逻辑挺简单的,也就是几十行代码的事情。 https://github.com/qor/qor_cache/blob/master/lib/qor_cache/active_record.rb
可以尝试下 https://github.com/qor/qor_cache 不用自己生成 cache_key,直接 cache 一个方法
基本上 paypal 就是这个时间收钱的 03:00:00 Mar 28, 2014 PDT,所以不会出现超过 24 小时的情况,不过为了用户体验,你可以在你的程序上控制一下,如果现在处于订阅状态,允许他一定的超时时间(防止信用卡过期之类的事情。。。)。
他在 paypal 那边取消的话,你会收到 cancel 的 ipn,所以没有收到通知的话,给他一定延时也没有问题应该。。。当然这个也取决于你们的产品性质。。。。
paypal 是批处理的,订阅差不多都是这个时间收钱。。。
可以尝试用 F{1-12}来绑定快捷。。。
例如 , a ..... 你一下子可以多出几百个快捷键来给你绑定
笔记本还有 Super 键,一下子又多出好多快捷键。。。
还可以以功能分类来绑定快捷键,例如我是 F3 相关的快捷键是社交相关,gtalk, twitter, weibo... F4 是文本操作相关,f2 是 org 相关,f1 是常用等等。。。。super+ 是超常用快捷键,keychord 是超超常用快捷键。。。。
@yangmiblog 这是马甲么。。。。。。。X_X
欢迎 emacs 用户试用 zeal at point
@code4craft 上面有说 ifttt,可以按这样子来做订票
@Yujing_Z 估计你还没有懂这个流程。。。