地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

Redis/memcached

【Redis】キャッシュスタンピード対策をPythonで実装してみる

背景 ryuichi1208.hateblo.jp この前描いてた記事のスピンオフ的な記事でキャッシュスタンピード対策をPythonで実装するとしたらどんな感じかなと思って調べてみた記事。内容としては以下の記事でやっていることの一部を掘り下げて考えてみたという感じです…

【memcached】スピンロックでatomic操作を実現するためには

概要 マルチプロセス環境配下における、同一レコードへの書き込みが大量に発生するwrite heabyな環境でmemcachedの更新をどうやってatomicに行うかを考えた時に出てきたスピンロック的なことやってみた記事。 memcachedとは書いたもののCAS操作を提供してい…

【Redis】計算量がO(N)以上のやつ

Redisの計算量でO(N)以上の値のやつを抜粋。データ量が多いみたいなケースでこれらの操作がある場合はレビュー観点として見ていく必要がある。 O(N) BITCOUNT BITOP BITPOS CLIENT KILL CLIENT LIST CLUSTER ADDSLOTS CLUSTER COUNT-FAILURE-REPORTS CLUSTER…

【Redis】Blockコマンドの中身

mogile.web.fc2.com BRPOPとかBLPOPとかその辺の中身がどんなことやってるのか気になったので見てみたメモ。 ちなみにクライアント側は空のリストへBRPOPなりを実行するとstraceの結果よりread(2)でブロックする。ローカルの検証だがコネクションはこんな感…

【memcached】スピンロックでatomic操作を実現するためには

概要 マルチプロセス環境配下における、同一レコードへの書き込みが大量に発生するwrite heabyな環境でmemcachedの更新をどうやってatomicに行うかを考えた時に出てきたスピンロック的なことやってみた記事。 memcachedとは書いたもののCAS操作を提供してい…

【Redis】memtier_benchmarkでredisのベンチマークを取る

github.com memtier_benchmarkを使うとredisやmemcachedのベンチマークを取得できるらしく使ってみました。 dockerを使ってさくっとやってみます。-tでスレッド数-cでコネクション数-nでそれぞれのコネクションでどの程度のリクエストを投げるかを調整できま…

【Redis】ラズパイにredisを構築する

k8sのCronJobでワークキューパターンをやりたかったので立てた。 インストール パッケージからインストールすると、Redisサーバーが自動的起動します。 sudo apt-get update sudo apt-get -yV upgrade sudo apt-get install redis-server configとか /etc/re…

【memcached】CASとスピンロックの話

概要 スピンロックとは ビジーウェイトとは CASとは memcahcedにはCAS命令という research.sakura.ad.jp ABA問題

【Redis】scanの話と計算量

Redisで有名なKEYSは、特定のパターンにマッチするKeyを検索する手法。このコマンド自体はO(N)の計算量でありデータ数が多いとその他リクエストが詰まる。パターンマッチなんかやりたくても気軽に打てないコマンド。その計算量は耐えられない場合に使えるsca…

【memcached】memcacehdのソケットバッファのサイズ

先日調べたソケットバッファに関する記事でmemcachedはどのくらいの値を設定してるのかと思って調べたのでメモ。 memcacehd.cでsetsockopt(2)を読んでいた static void maximize_sndbuf(const int sfd) { socklen_t intsize = sizeof(int); int last_good = …

【Redis】redis-py pipelineを使う

ある関数内で複数回Redisとのやり取りをしている場合はpipelineを用いることで処理を一括でRedisに投げることができる機能。何が嬉しいかというとプロセス間通信によるRTTを減らすことができる。 以下はサンプル。many_get()とmpipe_line()が計測対象。デー…

【Redis】redisの操作

String型 追加 set key value 削除 del key 取得 get key 複数追加 mset key value key value 複数取得 mget key key List型 末尾追加 rpush key value 先頭追加 lpush key value 末尾削除 rpop key 先頭削除 lpop key 全部取得 lrange key 0 -1 指定したint…

【Redis】redis setup

Redis 冗長化 & フェールオーバー環境を CentOS 6.x 上に構築する手順です 手順は3部構成となっており、本稿は Redis のインストール方法となります (その1):Redisのインストール (その2):Redisの冗長化 (その3):Redis-Sentinelによるフェール…