redisでユーザをfollowしたときにTimeLineをsortして再構築

2010.03.27 / ruby kvs

前回のつづき。

課題の1つに挙げてた中で、「Followした瞬間に、そのユーザの過去のTweetを自分のTLに追加できていない」というのがありましたが、こんなかんじでいいのかな。自分のTLに他人のTLを混ぜて、sortしてstoreし直し。(redis-rbが0.2.0じゃないと動かないかも)

    def merge_timeline(user_id)
      my_id = @login_user[:id]
      return if @redis.type?("uid:#{user_id}:posts") == "none"
  
      user_statuses = @redis.lrange("uid:#{user_id}:posts", 0, 100)
      user_statuses.each do |status|
        @redis.lpush("uid:#{my_id}:home", status)
      end
      @redis.sort("uid:#{my_id}:home", :order => "desc alpha", :store => "uid:#{my_id}:home")
    end
  

でも、そうしたあとにremoveしたときにまた再構築し直さないと駄目なことに気づいた。。と、いうかremove面倒ですねぇ、どうするんだろう。泥臭く全statusを走査し直しなのか、それとも順序付Setとか使えば楽にremoveできるのかな。また考え直しです。

あと、このupdateについて、github上のRedTweetのコードもpushし直してますので、興味ある方はご確認ください。