CentOS Stream 8
Sponsored Link

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

[root@dlp ~]#
telnet localhost 11211

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

# Memcached サーバーの利用状況を表示する
stats
STAT pid 4496
STAT uptime 73
STAT time 1624247980
STAT version 1.5.22
STAT libevent 2.1.8-stable
STAT pointer_size 64
.....
.....
STAT moves_to_cold 0
STAT moves_to_warm 0
STAT moves_within_lru 0
STAT direct_reclaims 0
STAT lru_bumps_dropped 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

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

# 以下の例では 9 が CAS ID

gets test_key
VALUE test_key 0 10 9
test_value
END

# cas コマンドでデータを更新する
# cas [キー] [圧縮フラグ] [有効期間(秒)] [データサイズ(byte)] [CAS ID]
cas test_key 0 0 11 9
test2_value
STORED
gets test_key
VALUE test_key 0 11 10
test2_value
END
関連コンテンツ