目录

  1. replace 命令简介
  2. replace 命令的语法
  3. replace 命令的参数说明
  4. 使用 Telnet 进行 replace 操作
  5. 不同编程语言的 replace 示例
  6. 参考资料

1. replace 命令简介

replace 命令用于更新已存在的键值对。如果指定的键(key)存在,则更新其值;如果键不存在,则 replace 命令不会执行存储操作,并返回错误。

setadd 命令的区别:

  • set:无论键是否存在,都会存储数据(覆盖旧值)。
  • add仅当键不存在 时存储数据(如果键已存在,则失败)。
  • replace仅当键已存在 时存储数据(如果键不存在,则失败)。

2. replace 命令的语法

replace <key> <flags> <exptime> <bytes> [noreply]
<data>

  • <key>:要更新的键(必须已存在)。
  • <flags>:用户自定义标志(通常设为 0)。
  • <exptime>:过期时间(秒),0 代表永不过期。
  • <bytes>:存储的数据大小(字节数)。
  • [noreply](可选):如果指定,则服务器不会返回响应。
  • <data>:实际存储的新值(必须与 <bytes> 指定的大小匹配)。

3. replace 命令的参数说明

参数说明示例
<key>需要更新的键(必须已存在)user:123
<flags>自定义标志(通常为 0)0
<exptime>过期时间(秒),0 代表永不过期300(5 分钟)
<bytes>数据的字节大小12(”New Message” 的长度)
<data>具体存储的新数据"New Message"
[noreply]可选,不返回响应noreply

4. 使用 Telnet 进行 replace 操作

4.1 连接 Memcached

telnet 127.0.0.1 11211

4.2 存储初始数据(使用 set

set user:123 0 300 11
Hello World

4.3 使用 replace 更新数据

replace user:123 0 300 12
New Message

4.4 获取数据

get user:123

返回结果:

VALUE user:123 0 12
New Message
END

4.5 使用 replace 但键不存在(失败示例)

replace user:456 0 300 12
Another Value

返回结果:

NOT_STORED


5. 不同编程语言的 replace 示例

5.1 PHP replace 示例

<?php
$memcached = new Memcached();
$memcached->addServer("127.0.0.1", 11211);

// 先存储一个键
$memcached->set("user:123", "Hello World", 300);

// 使用 replace 更新值
if ($memcached->replace("user:123", "New Message", 300)) {
    echo "Value replaced successfully";
} else {
    echo "Key does not exist";
}

// 获取数据
echo $memcached->get("user:123");
?>


5.2 Python replace 示例

from pymemcache.client import base

client = base.Client(('127.0.0.1', 11211))

# 先存储一个键
client.set('user:123', 'Hello World', expire=300)

# 替换已存在的键
result = client.replace('user:123', 'New Message', expire=300)

if result:
    print("Value replaced successfully")
else:
    print("Key does not exist")

# 获取数据
print(client.get('user:123').decode('utf-8'))


5.3 Java replace 示例

import net.spy.memcached.MemcachedClient;
import java.io.IOException;
import java.net.InetSocketAddress;

public class MemcachedTest {
    public static void main(String[] args) throws IOException {
        MemcachedClient client = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));

        // 先存储一个键
        client.set("user:123", 300, "Hello World");

        // 替换已存在的键
        boolean success = client.replace("user:123", 300, "New Message").get();

        if (success) {
            System.out.println("Value replaced successfully");
        } else {
            System.out.println("Key does not exist");
        }

        // 获取数据
        System.out.println(client.get("user:123"));

        client.shutdown();
    }
}


5.4 Node.js replace 示例

const Memcached = require('memcached');
const memcached = new Memcached("127.0.0.1:11211");

// 先存储一个键
memcached.set("user:123", "Hello World", 300, function(err) {
    if (err) console.error(err);

    // 替换已存在的键
    memcached.replace("user:123", "New Message", 300, function(err, result) {
        if (err) {
            console.error(err);
        } else {
            console.log(result ? "Value replaced successfully" : "Key does not exist");
        }
    });

    // 获取数据
    memcached.get("user:123", function(err, data) {
        if (err) console.error(err);
        console.log(data);
    });
});


6. 参考资料