以下、試してみた。
$ 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 できるかをこれから確認します。