redis-rb で自動的に圧縮して保存する
redis-rb を使って Redis に値を保存する際に自動的に圧縮して、取り出す時には自動的に展開してくれたら便利だな、と思って試しに作ってみました。
Redis::Client へのモンキーパッチで、コマンド判別して Zlib::Deflate と Zlib::Inflate 使って圧縮・展開するようにしています。
とりあえず対応している Redis のコマンドは書込みは set, setex, setnx, psetex、読み込みは get だけです。
使い方は以下のような感じ。
# -*- coding: utf-8 -*- require 'redis' require 'redis/distributed' require './auto_compression_redis' REDIS_MASTERS = [ {url: "redis://192.0.2.1:6379/1", id: "redis-node1"}, {url: "redis://192.0.2.2:6379/1", id: "redis-node2"}, {url: "redis://192.0.2.3:6379/1", id: "redis-node3"}, ] redis = Redis::Distributed.new(REDIS_MASTERS) key1 = "key:1001" key2 = "key:1002" p redis.set(key1, "test1") p redis.get(key1) p redis.setnx(key2, "test2") p redis.get(key2) p redis.setex(key1, 10000, "test3") p redis.get(key1) p redis.psetex(key1, 100000, "test4") p redis.get(key1) p redis.set(key1, "隣の客はよく柿食う客だ") p redis.get(key1)
実行すると以下のような感じ。
% ruby redis-gzip.rb "OK" "test1" false "test2" "OK" "test3" "OK" "test4" "OK" "隣の客はよく柿食う客だ"
圧縮するとコマンドラインクライアントから簡単に中身を確認したりはできなくなってしまいますが、メモリ使用量がかなり減ったので、キャッシュ用途とかなら結構おすすめです。
Redis in Action
posted with amazlet at 13.06.07
Josiah L. Carlson
Manning Pubns Co
売り上げランキング: 45,530
Manning Pubns Co
売り上げランキング: 45,530