@nowazhu Redis 是长久存放的,很多数据不便于放里面,尤其是用了 redis-objects 将一些重要的数据也放 Redis 里面的时候,放到 Memcached 里面会变得放心些。 把握点就是不重要的 Cache 或 数据就扔 Memcached,重要的放 Redis 现在 Ruby China 也已经从之前的 redis-store 撤回到了 Memcached
100.times do |i|
print ("="*i).ljust(100) + "#{i}%\r"
$stdout.flush
sleep 1
end
哈哈,会了,谢啦
原理: 用 user_id + topic_id 作为 key,长期没有被访问的冷数据将会被 Memcached 自动挤掉,仅留下访问比较频繁的那些,此外存放只有一个 last_reply_id 有更新自动就过期了,无需手动清除
Redis 和 MongoDB 是同样的,Homebrew 这个神器可以搞定!
我一直喜欢用 TextMate 默认的 Mac Classic 不过目前家里面用的是 Sunburst 的改进版(无意中改出来的)
MongoDb 用 Homebrew 安装好以后会这么一段
➜ ~ brew install mongodb
mongodb 2.0.0-x86_64
http://www.mongodb.org/
/usr/local/Cellar/mongodb/2.0.0-x86_64 (17 files, 120M)
If this is your first install, automatically load on login with (这段就是用来设置 MongoDB for Mac 的服务的,会开机自启动):
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/mongodb/2.0.0-x86_64/org.mongodb.mongod.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/org.mongodb.mongod.plist
If this is an upgrade and you already have the org.mongodb.mongod.plist loaded:
launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist
cp /usr/local/Cellar/mongodb/2.0.0-x86_64/org.mongodb.mongod.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/org.mongodb.mongod.plist
Or start it manually:
mongod run --config /usr/local/Cellar/mongodb/2.0.0-x86_64/mongod.conf
MongoDB 1.8+ includes a feature for Write Ahead Logging (Journaling), which has been enabled by default.
To disable journaling, use --nojournal.
http://github.com/mxcl/homebrew/commits/master/Library/Formula/mongodb.rb
用 Homebrew 安装
brew install mongodb
# 安装完成后会有一段提示,执行提示那几个命令就可以了
#22 楼 @quakewang ^^ 我都忘了当初设定的原因了,看起来确实用不上
#13 楼 @quakewang 赞,不过这样还有那个绿色(2 最后是用户的回复)的状态无法实现
class User
def read_topic?(last_reply_id)
reply_ids = Rails.cache.read("user:#{self.id}:topic_read")
reply_ids.include?(last_reply_id)
end
def read_topic(last_reply_id)
reply_ids = Rails.cache.read("user:#{self.id}:topic_read")
reply_ids = [] if reply_ids.blank?
reply_ids.dup
reply_ids << last_reply_id
Rails.cache.write("user:#{self.id}:topic_read",reply_ids)
end
end
再改进点应该,不过这个或许太过头了:
def user_readed?(user_id)
uids = Rails.cache.read("Topic:user_read:#{self.id}")
return [self.last_reply_user_id,self.user_id].include?(user_id) == true ? 2 : 1 if uids.blank?
return 0 if uids.include?(user_id)
return 2 if [self.last_reply_user_id,self.user_id].include?(user_id)
1
end
我的做法,拆解成多个 if,以上面代码为例
def user_readed?(user_id)
uids = Rails.cache.read("Topic:user_read:#{self.id}")
if uids.blank?
if self.last_reply_user_id == user_id || self.user_id == user_id
return 2
else
return 1
end
end
if uids.index(user_id)
return 0
end
if self.last_reply_user_id == user_id || self.user_id == user_id
return 2
end
1
end
哈哈,看来该出个招聘栏目了
汗!昨天 @xdite 也这么说我代码很多地方乱。 其实这个是以前的老代码,一直没去重构,大家多多海涵
纳妮!居然没杭州和成都的
或许楼主是应为之前看了 rubybbs.com put.im 和 现在这里,才会这么觉得,应为都是出自同一个项目 Homeland 其实其他 Bootstrap 做出来得不是这个样,比如: http://www.githire.com/ 就连 Bootstrap 和这里差别还是很大的,除了那些控件和头部
谁之前用得熟悉的,看看 ruby-china 的 unicorn.rb 写得对不对 https://github.com/huacnlee/ruby-china/blob/master/config/unicorn.rb
用 Linode 东京翻的表示很流畅,哈哈