タグ

redisに関するkei_yam1209のブックマーク (15)

  • Redis 本番障害から学んだコードレビューの勘所

    Redis不適切利用による問題は番運用が始まってから顕在化することが多く、時限爆弾みたいな存在です。事前に防ぐにはコードレビュー段階で叩くしかありません。 Redisはスクリプト言語と相性が良く、適切に利用するとRDBと比較し驚くほど高速なプログラムを組むことができます。昨年尊敬する先輩にコードレビューで斧100くらい(レビューコメント)投げられて血まみれになりつつ学んだことを、まとめて書いてます。概要は『消えても良いデータならRedis』 Redisのメモリが溢れたら... (この話は事実ではなくファンタジーです。) 深夜電話で叩き起こされました。どうやらアクセス障害みたいです。 何人かで実機確認したら、まったくゲームが遊べない。データ不整合怖いのでメンテIN。 ほどなくしてRedisが溢れメモリ不足で新規書き込みが出来なくなっていると判明。サーバのメモリ容量は64GByteでこれ以

    Redis 本番障害から学んだコードレビューの勘所
  • moco(beta)'s backup: Redis でロックを実装する (1)

    「Redis入門」6.2節「分散ロック」について Redis のトランザクション (Python版) で、WATCH / UNWATCH コマンドを使った簡易な楽観ロックを使いましたが、6.2節では(悲観)ロックの実装方法が紹介されていて、実用的&面白かったので試してみました。 Redis 自体は(悲観)ロックの機構をもっていないので、排他制御をしたい場合は自前で構築することになります。キーが存在しない場合にかぎり値をセットできる SETNX コマンドを使って、予約したいリソースに応じたキー(全クライアントで共通の約束事)に一意な識別子をセットすることで、セマフォ(Mutex のほうが正確な表現かな?)を実現できます。キーが存在していなかったらユニークな(ロックしたのが自分だと後でわかるようにするため、必ず一意になるようにする)識別子をバリューにセットしてロック獲得成功、キーがすでにあった

  • moco(beta)'s backup: Redis のメモリ使用量削減 (大きな SET の場合)

    「Redis入門」 つづき。9章は、Redis のメモリ使用量を削減する tips の紹介です。方法はいくつかありますが、その中で、大きな SET を複数の小さな SET に水平分割(シャーディング)してメモリを節約する方法について、まとめてみました。 前提知識について補足 Redis は、LIST / HASH / SET / ZSET のサイズ(要素数、各要素の大きさ)が十分に小さい場合、特殊なエンコーディングを施すことでメモリ使用量を節約します。 【参照】メモリ最適化についての公式ドキュメント Memory-optimization (“Special encoding of small aggregate data types” という節)ざっくりいうと、データ構造を圧縮して、計算量(CPU)と引き換えにメモリを削減する、、、という話です。LIST / HASH / ZSET では

  • Twitterのキャッシュを支えるRedis - ワザノバ | wazanova

    https://www.youtube.com/watch?v=rP9EKvWt0zo 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約1時間前 TwitterのYao Yuが、大規模サービスのキャッシュにおいてRedisを活用する取組みについて紹介しています。 1) Redisを採用している理由 キャッシュだけで、ストレージとしては利用していない。 主なところでは、Twitterのタイムラインで利用している。ホーム画面であれ、ユーザ画面であれ、タイムラインはTweetのインデックスなので、key/valueストア型のRedisを利用するケースとして最適。 以前はmemcachedを使っていたが、問題になったのは、タイムラインでおきるread/writeは、(ユーザが閲覧している範囲に追加反映するということなの

  • Redis、計算量の恐怖 | Akatsuki Hackers Lab アカツキハッカーズラボ

    はじめまして。アカツキのサーバエンジニアのこうのです。サウザンドメモリーズで主にサーバ側のプログラム・インフラを担当しています。 今回はサウザンドメモリーズで発生した、Redisにまつわるトラブルを紹介したいと思います。 TL;DR RedisのSorted SetのZRANGE系のコマンドは計算量がO(log(N)+M)(Mは取得結果の数)になるので、 適切にLIMITをつけるなどして取得結果数を制限しないと負荷が高くなってしまいますよ、というお話。 背景 サウザンドメモリーズではバトル出撃時に一緒に出撃するフレンドやランダムに選ばれた他のプレイヤーを選択することができます。 この「ランダムに選ばれた他のプレイヤー」の選択ロジックに弊社ではRedisのSorted Setを利用した実装を行っています。 ランダムといってもすべてのプレイヤーからランダムで選んでしまってはアクティブでないプレ

    Redis、計算量の恐怖 | Akatsuki Hackers Lab アカツキハッカーズラボ
  • Uzabase Tech: 荒ぶるRedisとNewsPicks

    2014年11月5日水曜日 荒ぶるRedisとNewsPicks NewsPicks の開発を担当している杉浦です。 NewsPicksはおかげさまでユーザ数が20万を突破しました。 サービスが順調に成長するということは大変にうれしいことなのですが、エンジニアとしては負荷との戦いになったりします。我々も例に漏れず日々、負荷との戦いを強いられています。 NewsPicksの機能面の特長として次の2つがあります。 ・フォローしているユーザのPickが自分のタイムラインに集約される ・各カテゴリで話題になった記事を閲覧できる これらの機能を高速に処理・実現するためにRedisを採用しているのですが、 ユーザ数の増加による負荷増加によって問題が発生するようになりました。 記事では、 ・ユーザ数が増える中でRedisにどのような問題が発生したか ・ソースコードを読みながら問題の

  • 『redis、それは危険なほどのスピード』

    どうも、プラットフォームDivでエンジニアをやっている Wataru です。 最近3人目の子供が産まれて、産後自宅勤務をさせてくれた弊社はとてもいい会社だと思います。出産予定のあるエンジニアのかたは是非弊社に転職を。 さて、今回はRedisの紹介をさせて頂きたいと思います。 Redisってすごくマイナーなわけではないのですが、めちゃくちゃ便利なのにあまり注目されていないなーという印象があるので、これを機会に是非使ってみてもらえると嬉しいです。 Redisって何?Redisとは「remote dictionary server」から名前が付けられたオープンソースのkey-valueデータストアです。 MemcacheDB等のKVSとの最大の違いは、格納するバリューがデータ構造というところです。 つまり、リスト・セット・ハッシュなどのデータ構造で格納できるのでバリューに対してアトミックな操作が

    『redis、それは危険なほどのスピード』
  • Redisを使ったランキング機能の実装

    2013/05/29 DevLOVEさんイベント

    Redisを使ったランキング機能の実装
  • neue cc - Http, SQL, Redisのロギングと分析・可視化について

    改善は計測から。何がどれだけの回数通信されているか、どれだけ時間がかかっているのか、というのは言うまでもなく重要な情報です。障害対策でも大事ですしね。が、じゃあどうやって取るの、というとパッとでてくるでしょうか?そして、それ、実際に取っていますか?存外、困った話なのですねー。TraceをONにすると内部情報が沢山出てきますが、それはそれで情報過多すぎるし、欲しいのはそれじゃないんだよ、みたいな。 Grani←「謎社」で検索一位取ったので、ちょっと英語表記の検索ランキングをあげようとしている――では自前で中間を乗っ取ってやる形で統一していて、使用している通信周り、Http, RDBMS, Redisは全てログ取りして分析可能な状態にしています。 HTTP HttpClient(HttpClientについてはHttpClient詳解を読んでね)には、DelegatingHandlerが用意され

  • Redisのサイズの測り方 - ゆっくり備忘録

  • 『Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム』

    Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム | サイバーエージェント 公式エンジニアブログ

    『Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム』
  • Redis勉強会資料(2015/06 update)

    Redis勉強会の資料です。2013年に初版をアップしました。2015年6月にRedis-Clusterの内容を追記して再アップを行っています。

    Redis勉強会資料(2015/06 update)
  • Redis コマンド一覧

    Redisのコマンドについて調べた記事のまとめです。 全ての項目に共通の操作 EXISTS キー値の存在チェック DEL 指定したキーを削除 TYPE 指定したキーのデータタイプ取得 KEYS パターンにマッチするキー取得 RANDOMKEY ランダムなキー取得 RENAME キー名の変更 RENAMENX キー名の変更:重複チェックあり DBSIZE 登録されているキー数を取得 EXPIRE 指定したキーの有効期間を指定 TTL 指定したキーの有効期間を確認 SELECT データベースの切り替え MOVE 指定したキーのデータベースを変更 FLUSHDB 選択したデータベースのデータを削除 FLUSHALL 全てのデータベースのデータを削除 文字列データに対する操作 SET データの登録 GET データの取得 GETSET 更新前のデータを取得しながらデータ更新 MGET 複数キーを指定

    Redis コマンド一覧
  • KVS redis phpから利用してみる(phpredis) | QK

    「KVS redis php クライアントモジュールのインストール」にてphpから利用できるようになりました。簡単なソースですが、phpからこれを使うソースについて説明したいと思います。下記のサンプルは、単純に、値をセットしたものを呼び出すサンプルです。redisの利用用途がまだぼやっとして浮かんでいないので、あまり参考にならないかもしれません。 【検証環境について】 すんません・・こんだけです。何を説明したかったかというと、単に出回っているサンプルが、ローカルホストを前提に書かれているものが多かったため、あえてそうしました。もちろんローカルに、redisがあろうが、リモートにredisがあろうが、なんも変わらないのですが。 あ、一点だけ違いがありました。redisをデフォルトでインストールした場合、ローカルからのみしか接続を許可していないので、この部分のみ変更が必要です。当方は、yumで

  • PHPでRedisを試す - BTT's blog

    危険なほどのスピードを持つというKVS『Redis』。 redisドキュメント日語訳を見て頂くと、Redisの持っている機能の概要が書いてあります。 インストール 自分の環境(CentOS 6.2)では、yumでインストールが可能でした。 # yum install redis # cp /etc/redis.conf /etc/redis.conf.bak ソースからインストールする場合の手順と起動方法について、以下のページに記載があります。 http://redis.io/download $ wget http://redis.googlecode.com/files/redis-2.4.15.tar.gz $ tar xzf redis-2.4.15.tar.gz $ cd redis-2.4.15 $ make 設定ファイル yumでインストールを行った場合、設定ファイルは『/

    PHPでRedisを試す - BTT's blog
  • 1