Ubuntu 16.04
 

Memcached : 基本操作
2016/09/11
 
Telnet クライアントで接続した場合の Memcached の対話的な利用方法です。
[1] Telnet クライアントをインストールします。
root@dlp:~#
apt-get -y install telnet
[2] 基本的な Memcached の操作です。
# ローカルの Memcached に接続

root@dlp:~#
telnet localhost 11211

Trying ::1...
Connected to localhost.
Escape character is '^]'.

# Memcached サーバーの利用状況を表示する

stats

STAT pid 10856
STAT uptime 12222
STAT time 1468912383
.....
.....
STAT evictions 0
STAT reclaimed 0
END

# データを保存する

# set [キー] [圧縮フラグ] [有効期間(秒)] [データサイズ(byte)]

# 圧縮フラグ : 0=圧縮無し, 1=圧縮

# 有効期間=0 で無期限

# 上記コマンド入力後、改行して、キーの値をセット

set test_key 0 0 10
test_value
STORED

# データを参照する

get test_key
VALUE test_key 0 10
test_value
END

# データを置き換える

replace test_key 0 0 11
test_value2
STORED
get test_key
VALUE test_key 0 11
test_value2
END

# 既存データの後ろにデータを追加する

append test_key 0 0 5
,test
STORED
get test_key
VALUE test_key 0 16
test_value2,test
END

# 既存データの前にデータを追加する

prepend test_key 0 0 6
test1,
STORED
get test_key
VALUE test_key 0 22
test1,test_value2,test
END

# 既存データを削除する

delete test_key
DELETED

# 既存のデータを加算する(incr)

set mycounter 0 0 1
1
STORED
incr mycounter 1
2
get mycounter
VALUE mycounter 0 1
2
END

# 既存のデータを減算する(decr)

decr mycounter 1
1
get mycounter
VALUE mycounter 0 1
1
END

# 既存のキャッシュ済みデータを全て削除する

flush_all
OK
[3]
複数クライアント環境下で想定される問題として、get でキーの値を参照し、必要に応じて set/replace でデータを更新する場合、自身がある特定のキーの値を get して参照し、set/replace で必要な値に更新するまでのわずかな間に 他クライアントから該当データの値を更新された場合、自身が参照した値とは別の値を更新することになり、意図しない更新をすることになります。 このような状況を回避するために CAS ID が用意されています。(CAS = Check And Set)
CAS ID は「gets」コマンドで取得でき、「cas」コマンドで取得した CAS ID を指定してデータの値を更新します。
「cas」コマンドで CAS ID を指定した場合、目的のキーの値が異なる場合は、データの更新は行われず、更新の衝突を回避できます。
# CAS ID 付きでデータを参照する

# 以下の例では 15 が CAS ID

gets test_key
VALUE test_key 0 10 15
test_value
END

# cas コマンドでデータを更新する

# cas [キー] [圧縮フラグ] [有効期間(秒)] [データサイズ(byte)] [CAS ID]

cas test_key 0 0 11 15
test2_value
STORED
gets test_key
VALUE test_key 0 11 16
test2_value
END
 
Tweet