目录
incr
和decr
命令简介incr
和decr
命令的语法incr
和decr
命令的参数说明- 使用 Telnet 进行
incr
和decr
操作 - 不同编程语言的
incr
和decr
示例 - 参考资料
1. incr
和 decr
命令简介
Memcached 提供了两个用于原子递增和递减数值的命令,分别是 incr
和 decr
。这些命令允许你对存储在 Memcached 中的整数进行操作,而无需获取并更新数据。这些操作是原子性的,因此在并发场景中可以保证数据的一致性。
incr
命令:对指定的键所存储的整数值进行递增操作。decr
命令:对指定的键所存储的整数值进行递减操作。
如果指定的键不存在,incr
和 decr
都会创建该键并设置初值为 0
,然后执行相应的操作。
2. incr
和 decr
命令的语法
incr
命令
incr <key> <value> [initial] [expiry]
<key>
:要递增的键。<value>
:要递增的值,通常是一个正整数。[initial]
:可选参数,指定键不存在时的初始值,默认为 0。[expiry]
:可选参数,设置键的过期时间。
decr
命令
decr <key> <value> [initial] [expiry]
<key>
:要递减的键。<value>
:要递减的值,通常是一个正整数。[initial]
:可选参数,指定键不存在时的初始值,默认为 0。[expiry]
:可选参数,设置键的过期时间。
3. incr
和 decr
命令的参数说明
参数 | 说明 | 示例 |
---|---|---|
<key> | 要递增或递减的键名 | counter |
<value> | 递增或递减的数值 | 1 , 5 |
[initial] | 键不存在时的初始值(可选,默认为 0 ) | 0 |
[expiry] | 键的过期时间(单位:秒,默认为 0 ) | 60 |
4. 使用 Telnet 进行 incr
和 decr
操作
4.1 连接 Memcached
telnet 127.0.0.1 11211
4.2 存储一些键值(使用 set
)
set counter 0 0 3
5
4.3 使用 incr
增加键值
incr counter 1
返回结果:
6
表示 counter
键的值已经递增至 6
。
4.4 使用 decr
减少键值
decr counter 2
返回结果:
4
表示 counter
键的值已经递减至 4
。
4.5 键不存在时使用 incr
incr non_existent_key 5
返回结果:
5
non_existent_key
键没有提前存在,Memcached 会将其初始值设置为 0
,然后进行递增操作,最终结果为 5
。
4.6 键不存在时使用 decr
decr non_existent_key 3
返回结果:
0
non_existent_key
键没有提前存在,Memcached 会将其初始值设置为 0
,然后进行递减操作,最终结果为 0
。
5. 不同编程语言的 incr
和 decr
示例
5.1 PHP incr
和 decr
示例
<?php
$memcached = new Memcached();
$memcached->addServer("127.0.0.1", 11211);
// 存储数据
$memcached->set("counter", 5);
// 使用 incr 递增
$newValue = $memcached->increment("counter", 1);
echo "New Counter Value (after incr): " . $newValue . "\n"; // 输出: 6
// 使用 decr 递减
$newValue = $memcached->decrement("counter", 2);
echo "New Counter Value (after decr): " . $newValue . "\n"; // 输出: 4
// 键不存在时使用 incr
$newValue = $memcached->increment("non_existent_key", 5, 0);
echo "Non-existent Key Counter Value: " . $newValue . "\n"; // 输出: 5
// 键不存在时使用 decr
$newValue = $memcached->decrement("non_existent_key", 3, 0);
echo "Non-existent Key Counter Value (after decr): " . $newValue . "\n"; // 输出: 0
?>
5.2 Python incr
和 decr
示例
from pymemcache.client import base
client = base.Client(('127.0.0.1', 11211))
# 存储数据
client.set('counter', 5)
# 使用 incr 递增
new_value = client.incr('counter', 1)
print(f"New Counter Value (after incr): {new_value}") # 输出: 6
# 使用 decr 递减
new_value = client.decr('counter', 2)
print(f"New Counter Value (after decr): {new_value}") # 输出: 4
# 键不存在时使用 incr
new_value = client.incr('non_existent_key', 5, initial=0)
print(f"Non-existent Key Counter Value (after incr): {new_value}") # 输出: 5
# 键不存在时使用 decr
new_value = client.decr('non_existent_key', 3, initial=0)
print(f"Non-existent Key Counter Value (after decr): {new_value}") # 输出: 0
5.3 Java incr
和 decr
示例
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("counter", 0, 5);
// 使用 incr 递增
long newValue = client.incr("counter", 1);
System.out.println("New Counter Value (after incr): " + newValue); // 输出: 6
// 使用 decr 递减
newValue = client.decr("counter", 2);
System.out.println("New Counter Value (after decr): " + newValue); // 输出: 4
// 键不存在时使用 incr
newValue = client.incr("non_existent_key", 5);
System.out.println("Non-existent Key Counter Value (after incr): " + newValue); // 输出: 5
// 键不存在时使用 decr
newValue = client.decr("non_existent_key", 3);
System.out.println("Non-existent Key Counter Value (after decr): " + newValue); // 输出: 0
client.shutdown();
}
}
5.4 Node.js incr
和 decr
示例
const Memcached = require('memcached');
const memcached = new Memcached("127.0.0.1:11211");
// 存储数据
memcached.set("counter", 5, 0, function(err) {
if (err) console.error(err);
// 使用 incr 递增
memcached.incr("counter", 1, function(err, newValue) {
if (err) console.error(err);
console.log("New Counter Value (after incr): " + newValue); // 输出: 6
});
// 使用 decr 递减
memcached.decr("counter", 2, function(err, newValue) {
if (err) console.error(err);
console.log("New Counter Value (after decr): " + newValue); // 输出: 4
});
// 键不存在时使用 incr
memcached.incr("non_existent_key", 5, function(err, newValue) {
if (err) console.error(err);
console.log("Non-existent Key Counter Value (after incr): " + newValue); // 输出: 5
});
// 键不存在时使用 decr
memcached.decr("non_existent_key", 3, function(err, newValue) {
if (err) console.error(err);
console.log("Non-existent Key Counter Value (after decr): " + newValue); // 输出: 0
});
});
发表回复