タグ

redisとperlに関するy_uukiのブックマーク (11)

  • Redisのトランザクション・スクリプト・ランキングを扱うPerlモジュールを公開しました

    以前Redisでスコアを複数設定できるランキングを作ってみたけど、 Githubの肥やしになっていてもあれなので、CPANizeしました。 あわせて、この実装のために作ったユーティリティモジュールも別モジュールとして公開しました。 Redis::LeaderBoardMulti Redis::Script Redis::Transaction Redis::LeaderBoardMulti 最初の基準で順位を決められなかった場合の第二基準が欲しいというときに使うモジュールです。 インターフェースがRedis::LeaderBoard互換になるように調整したので、 前回とインターフェースがちょっと変わっています。 se Redis; use Redis::LeaderBoard; my $redis = Redis->new; my $lb = Redis::LeaderBoardMulti

  • Redis::Fastでつらかったことまとめ&Redis::Fastはなぜ遅いか - Qiita

    こんにちは、いっちーです。 一年とちょっと前にRedis::FastというモジュールをCPANizeしました。 PurePerlなRedisクライアントであるRedis.pmのXS版です。 Redis.pmとある程度互換性があり、Redisと書かれている部分をRedis::Fastに置換するだけで動きます。 はじめてのCPANizeでXSを使ったモジュールを公開するという暴挙にでたために、 公開後のバグ修正に頭を悩ませることになりました。 1年経って色々と溜まってきたので、この場を借りてまとめておきます。 minillaでXS&submodule Redis::FastはPurePerlなRedis.pmをフォークして、 バックエンドをhiredisに置き換えたものです。 CPANモジュールの作り方を調べてminillaを使うとよさそうというのがわかったので、 フォークするさいにminil

    Redis::Fastでつらかったことまとめ&Redis::Fastはなぜ遅いか - Qiita
  • PerlとRedis | おそらくはそれさえも平凡な日々

    この記事は Perl5 Advent Calendar 2015 の7日目の記事です。昨日は、 @karupanerura さんの XSことはじめ でした。 今回は、RedisをPerlで扱う上での便利CPANモジュールを紹介します。大体 @shogo82148 無双になります。 Redis::Fast RedisクライアントはRedis::Fast一択です。Redis.pmが公式推奨のモジュールですが、これはPure Perl実装なのでパフォーマンスがそれほど良くありません。 Redis::FastはRedis.pm互換のインターフェースを持ったXSモジュールであり、内部的にはRedis公式のCクライアントであるhiredisのバインディングになっているので、安定していて使いやすいといえるでしょう。 my $redis = Redis::Fast->new; $redis->incr('

    PerlとRedis | おそらくはそれさえも平凡な日々
  • Redisを使って排他制御するwrapperコマンド Redis-Setlock をPerlとGoで書いた - 酒日記 はてな支店

    しばらく前に作って書きそびれていましたが、Yokohama.pm #10 でLTしたのでエントリもあげます。 Perl版 https://metacpan.org/release/Redis-Setlock Go版 http://fujiwara.github.io/go-redis-setlock/ LTのスライドはこちら ⇒ Redis-Setlockを書いたはなし なにをするもの? 「setlockコマンドのロック処理をRedisサーバで行うもの」です。 setlockはflockを使ってロックを獲得したら引数に渡されたコマンドをexecする、daemontools付属のwrapperコマンドで、cronでコマンド実行するときなど多重実行を制御する場合に重宝します。 flockだとホストをまたいだロック処理が行えないため、その部分をRedisを使った排他制御に置き換えたものを書いてみ

    Redisを使って排他制御するwrapperコマンド Redis-Setlock をPerlとGoで書いた - 酒日記 はてな支店
  • Redis::Fast 0.06 released

    こんにちは、もうすぐ17才と100ヶ月を迎えるいっちーです。 今朝、Redis::Fast 0.06をリリースしました。 主な変更点はメモリーリークの修正と、エラー発生時にSegmentation Faltで落ちる問題の修正です。 メモリーリーク Redis::Fastをサブスクライバーモードで動作させると、メモリを無限にい続ける問題をついに!ついに!修正しました。 原因は、一言で言ってしまえば、Perlのリファレンスカウントの扱いの勉強不足です・・・。 XSの中でPerlのオブジェクトを作るとき、プログラマが手動でリファレンスカウントを制御する必要があります。 とはいうものの、全てのオブジェクトのリファレンスカウントを制御するのは大変なので、 XSには「揮発性」という考え方があります。 sv_2motralを使って変数を揮発性に設定しておけば、よしななタイミングでオブジェクトを解放して

  • Redis::Fastってモジュールを書いた

    hiredisをPerlから扱うためのライブラリとして Redis::hiredisってのがあるけど、 なんだか微妙だって聞いたので自分でPerlのhiredisバインディング書いてみたよ。 https://github.com/shogo82148/Redis-Fast (READMEからRedis.pmをそのまま持ってきたことがまるわかりですね。なんとかしよう。) 使い方 Redis.pmと全く同じインターフェースなので、 そのまま置換できる、はず。 use Redis::Fast; my $redis = Redis::Fast->new; ### synchronize mode $redis->set('hoge', 'piyo'); print $redis->get('hoge'); # piyo ### asynchronize mode $redis->get('hoge

  • Redisのメモリ設定とファイル設定のdiff取るスクリプト書いた - Perl勉強メモ アルパカDiary出張版

    ※2013/07/25 スクリプトと概要をUpdateしました 次期バージョンであるRedis 2.8ではこの問題を少しでも解決しようと、 CONFIG REWRITE というコマンドで、redis.confの書き換えを行えるらしい、 が、結局それを忘れたら同じことなのでこの問題の解決にはなるかは微妙なところだ。 メモリ上にしか反映されていない設定があるかどうかをなんらかの方法でチェックすることができれば監視するなどできると思うのだが…。 http://unknownplace.org/archives/twilio-redis-incident.html 書き捨てっぽいですが、差分をとるスクリプトをペロッと書いてみました。 概要 以下のようなことをしています。 値が空のキーはデフォルト値を設定 単位(K/M/G)を最小単位に戻す メモリ上のキーを正とします*1 メモリにのみキーが存在する

    Redisのメモリ設定とファイル設定のdiff取るスクリプト書いた - Perl勉強メモ アルパカDiary出張版
  • YAPC 2012 - 続・Mobage を支える技術

    続・Mobage を支える技術 YAPC::Asia 2012 - 09/28 at 東京大学 Yuji Shimada (xaicron) Me 嶋田 裕二 (Yuji Shimada) @xaicron ソフトウェアエンジニア Me CPAN Author Me デザインセンスがとてもよい Me New! 最近ぎっくり腰になりました Works DeNA Co., Ltd. Mobage オープンプラットフォーム Mobge API Gadget Server (Proxy Server) 宣伝 宣伝 春頃に「Mobage を支える技術」というを書きました。 ⇡これね 他にうちの部では @zigorou @nekokak の二人が書いています。 ちなみに ちなみに JPA 理事 JPA 理事 路傍の石 はい 紹介ブログの名言集 @kazeburo 35億PV/day の世界では1万回

  • Perlで学ぶRedis - YAPC::Asia Tokyo 2013

    Currently this talk is in PENDING state. If you would like to see this talk at the event, please consider using the social media buttons below to express your interest!

  • Resque で学ぶジョブキューイング - Articles Advent Calendar 2012 Casual

    こんにちは。hatak (@hisashi) です。 Perl でジョブキューというと TheSchwartz や Qudo などの名前が挙がるかと思いますが、今回はバックエンドに Redis を利用したジョブキュー "Resque" を紹介します。 Resque はバックグラウンドジョブを処理するためのライブラリで、Github を始め大規模なサイトでも利用されています。もともとは Rubyライブラリですが、Ruby 以外の様々な言語でも実装されています。今回紹介するのはその Perl 実装のモジュールです。 試してみる クライアントで入力した文字列をワーカーが表示するだけのシンプルなプログラムを作ってみます。 まずは Redis を利用できるようにしておく必要があります。今回はローカルの Redis を利用しますが、異なるホストで動作している場合は適宜ホスト名やポート番号を変更してくだ

    Resque で学ぶジョブキューイング - Articles Advent Calendar 2012 Casual
  • ネットワークサーバじゃないプロセスでもServer::Starter経由で起動するといいことがあるかもという話 - 酒日記 はてな支店

    具体的には Redis の subscriber なんですが、pub/sub の pub 側が publish し続けている状態で subscriber を再起動すると、落ちてから起動までの間に来たメッセージを取りこぼす可能性があります。 pub 側を一時停止すればいいのですが、fluent-plugin-redis_publish で fluentd から publish しているので、これを止めるのはあまりやりたくない。 複数の subscriber が同時起動して処理に問題が出ないように作られていることが前提ですが、新しい subscriber を起動したら古いのを殺すようにすればいいよね? → それ Server::Starter でできるよ、という流れ。 $ start_server -- perl -e '$SIG{TERM}=sub{ warn "[$$] SIGTERM";

    ネットワークサーバじゃないプロセスでもServer::Starter経由で起動するといいことがあるかもという話 - 酒日記 はてな支店
  • 1