/var/log/messages

debugging with sixth sense

Redis で云々

以下、試してみた。

$ heroku run console
> $redis = Redis.current
> $redis.zincrby("hoge", 1, "1")
> $redis.zincrby("hoge", 1, "1")
> $redis.zincrby("hoge", 1, "2")
> $redis.zincrby("hoge", 1, "3")
> $redis.zincrby("hoge", 1, "3")
> $redis.zincrby("hoge", 1, "3")
> $redis.zincrby("hoge", 1, "4")
> $redis.zincrby("hoge", 1, "4")
> $redis.zincrby("hoge", 1, "5")
> $redis.zrange("hoge", 0, 10)
=> ["2", "5", "1", "4", "3"]
> $redis.zrevrange("hoge", 0, 10)
=> ["3", "4", "1", "5", "2"]

これはまぁこれとして、クロスな集計が必要なナニをどうするか。とは言え

  • キーと回答で zincrby
  • 回答をキーにしてキー値を渡して zincrby

するしかないのかな。つうかこれ、自分の情報を、という話があるとすると端末内に同じようなデータを保持する必要があるし、平均とか言われるとアレ。

IMEI

IMEI 渡してそれをキーにして云々、ってすれば平均値なんかもなんとかなるのかどうなのか。なんとなく当初アレされた要件はカバーできそげなので実装してみます。

その後の備忘など

げ、rails g controller したら redis が居ない、と叱られたorz

redis-server したら難なく rails コマンドも通りましたがこれは色々とアレですね。とりあえず POST なナニから作成。

以下なカンジになるのかどうか。

  def security
    # { "security" : { "part" : "1", "rating" : "1" } }
    # part is 1 to 5.
    # rating is 1 to 5, too.

    @security_a = params[:security]
    $redis = Redis.current

    $redis.zincrby("security" + @security_a[:part],
                   1,
                   @security_a[:rating])

    render json: "{}"
  end

で、config/routes.rb が以下を追加、なのかな。

  post "/security", to: "survey#security"

ローカルで動くはずなので試してみます。ええと

$ rails s

して

$ curl -v -H "Accept: application/json" \ 
-H "Content-type: application/json" -X POST \ 
-d '{"security":{"part":"1","rating":"1"}}' \ 
http://localhost:3000/security

で良いのかな。あとは rails s したままで

$ rails c
> Redis.current.zrange("security1", 0, 10)
=> ["1"]

動いてますね。とりあえずこれを deploy して端末側から POST できるかをこれから確認します。

Comments