redis先日、ISUCONの練習としてISHOCONに参加してきました。ISUCONもそうですが初期実装のRDBMS部分をどれだけRedis等に移せるかでスコアの伸び方が違う気がします。少なくとも今回の問題はRedisを上手に使えるかが鍵です(少なくともPythonではしかし、イマイチRedisを触ったことがなかったのでまとめておきます。RedisWikipediaよりRedisは、データ構造サーバーを実装するオープンソースソフトウェアプロジェクトである。Labsがスポンサーとなって開発されている。ネットワーク接続されたインメモリデータベースでかつキー・バリュー型データベースであり、オプションとして永続性を持つ。売りとしてはマスタスレーブだったりってのもありますが、1ノードなのでただのおっきなDictとして使い潰します。memcachedとくらべて、バリューに配列やハッシュが使えるのが特徴らしいです。使い方redis-pyのインストールPythonからredisを使うにはredis-pyを使います。db=0)また、コネクションプールもあるようです。redis.StrictRedis(connection_pool=pool)手元の環境では、プールを使うほうが2倍程度接続が早かったです。each)データの保存・取り出しKVSなので、原則はKeyを指定してValueをしまう、です。KeyとValueは1:1なので2回setした場合はあとから行ったデータで上書きされます。"VALUE")取得時はgetを使います。VALUEが戻るリストValueの部分が配列として管理されます。一つのキーに複数まとめることができます。RDBMSに慣れている場合はキーがテーブルでValueに入るデータが行のようなイメージでしょうか。以下でKey=LISTに10000個のデータが登録されます。lpushであれば先頭へ、rpushであれば末尾に追加されます。"DATA{}".format(i))取り出す際はlrangeを使用します。範囲を指定しますが負数も可能です。endを指定した場合end自体は含まないですが、Redisの場合はendまでを含むので取得数に注意します。リスト型はllenで長さを取得することが可能です。10000ハッシュ型Valueの部分をPythonのDictのような形で持たせることができます。hsetで値を設定します。他のset系と異なり、通常のキーに加えてハッシュ型のキーも渡してからセットする値を指定します。"value3",}のような形のデータが保存されます。取得する際は、以下の様に2つのキーを指定します。"value1"が戻るさらに、hgetallでキー配下のすべてのデータを取得できます。b'value3'}リストよりも複雑なデータを扱う場合は有効だと思います。まとめredis-pyについて基本的な使い方をまとめました。次回は、ISHOCONで使用したもう少し実践的な話やパフォーマンス面についてまとめたいと思います。WebSocketをつかってTrelloみたいな...ChannelsとVue.jsの練習がてらカンバンを実装してみました。Bottleでのセッション...WEBアプリケーションを作ると、ログインしているか?や買い物か...2017-10-20Redisの永続化とパフォーマンスのバランスを考えてみる(redis-pyを添えて)ISUCONに関わって初めて真面目にRedisと向かい合ってます。embyを導入したISUCON11予選に参加して32位で敗退してきました。8はてなブログをはじめよう!denzowさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。