Redis系列-Redis-String命令讲解(JAVA-lettuce客户端)
- Redis String
- SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
- GET key
- DEL key
- SETNX key value
- SETEX key seconds value
- GETSET key value
- MSET key value [key value …]
- MGET key [key …]
- INCR key
- INCRBY key increment
- DECR key
- DECRBY key decrement
- APPEND key value
- GETRANGE key start end
- SETRANGE key offset value
- STRLEN key
- 源码地址
Redis String
String 字符串,Redis 的 String 和其他语言的 String 非常相似。以下是 Redis 对 String 的操作命令:
SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
设置 key 的值。如果键 key 已经包含一个值,无论其类型它将被覆盖。此 key 之前的所有属性如过期时间也会被覆盖。
参数
EX key 的过期时间,单位秒
PX key 的过期时间,单位毫秒
NX 只有当 key 不存在时操作才会生效
XX 只有当 key 存在时操作才会生效
KEEPTTL 保留 key 当前的过期时间
@Test
public void set() {
//保存成功返回 ok
Assert.assertEquals("OK", stringCommands.set("key1", "value1"));
//当键不存在设置成功
Assert.assertNull(stringCommands.set("key1", "value1", SetArgs.Builder.nx()));
//当键存在设置成功
Assert.assertEquals("OK", stringCommands.set("key1", "value1", SetArgs.Builder.xx()));
//ex 单位 s
Assert.assertEquals("OK", stringCommands.set("k1", "v1", SetArgs.Builder.ex(2)));
sleep(3000);
Assert.assertNull(stringCommands.get("k1"));
//px 单位 ms
Assert.assertEquals("OK", stringCommands.set("k1", "v1", SetArgs.Builder.px(2000)));
sleep(3000);
Assert.assertNull(stringCommands.get("k1"));
}
GET key
获取 key 的值。命中返回 value,否则返回 null。如果 key 的类型不是 string 返回一个错误。
@Test
public void get() {
stringCommands.set("key1", "value1");
Assert.assertEquals("OK", stringCommands.set("key1", "value1"));
Assert.assertEquals("value1", stringCommands.get("key1"));
}
DEL key
删除 key。成功返回 1 ,失败或未命中返回 0 。
@Test
public void del() {
//删除不存在的键返回 0
Assert.assertEquals(0, keyCommands.del("notExist").longValue());
stringCommands.set("notExist", "ha");
//删除成功返回 1
Assert.assertEquals(1, keyCommands.del("notExist").longValue());
}
SETNX key value
设置 key 的值为 value ,如果 key 已经存在,则返回失败。成功返回 1 ,失败返回 0 。
@Test
public void setnx() {
//set if not exist ,
Assert.assertTrue(stringCommands.setnx("setnx", "nx"));
Assert.assertFalse(stringCommands.setnx("setnx", "nx"));
}
SETEX key seconds value
设置 key 的值,并设置有效期 seconds 单位秒。成功返回 OK
@Test
public void setex() throws InterruptedException {
Assert.assertEquals("OK", stringCommands.setex("setex", 2, "ha"));
sleep(3000);
Assert.assertNull(stringCommands.get("setex"));
}
GETSET key value
设置 key 的值并获取设置前 key 的旧值。成功返回旧值,否则返回 null 。
@Test
public void getset() {
stringCommands.set("getset", "value1");
Assert.assertEquals("value1", stringCommands.getset("getset", "value2"));
Assert.assertEquals("value2", stringCommands.getset("getset", "value1"));
}
MSET key value [key value …]
批量设置 key 的值。如果 key 已经存在,则覆盖其原有的值。返回 OK 。
@Test
public void mset() {
Map<String, String> map = new LinkedHashMap<>();
map.put("one", "1");
map.put("two", "2");
Assert.assertEquals("OK", stringCommands.mset(map));
}
MGET key [key …]
返回所有指定键的值。对于值不是字符串的键或不存在键,返回特殊值为空。正因为如此,此操作永远不会失败。
@Test
public void mget() {
mset();
List<KeyValue<String, String>> mget = stringCommands.mget("one", "two");
for (KeyValue<String, String> stringStringKeyValue : mget) {
String key = stringStringKeyValue.getKey();
String value = stringStringKeyValue.getValue();
if ((!key.equals("one") || !value.equals("1")) && (!key.equals("two") || !value.equals("2"))) {
Assert.fail("k " + key + " v " + value);
}
}
}
INCR key
对 key 的值做加一操作,如果 key 不存在则从 0 计算,如果 key 的值不能转为整数则返回错误。成功返回加后的值。
数值范围10进制32位或64位(基于系统位数)有符号整数
@Test
public void incr() {
Assert.assertEquals(1, stringCommands.incr("incr").longValue());
Assert.assertEquals(2, stringCommands.incr("incr").longValue());
}
INCRBY key increment
对 key 的值做加 increment 操作,如果 key 不存在则从 0 计算,如果 key 的值不能转为整数则返回错误。成功返回加后的值。
数值范围10进制32位或64位(基于系统位数)有符号整数
@Test
public void incrby() {
Assert.assertEquals(10, stringCommands.incrby("incrby", 10).longValue());
Assert.assertEquals(20, stringCommands.incrby("incrby", 10).longValue());
}
DECR key
对 key 的值做减一操作,如果 key 不存在则从 0 计算,如果 key 的值不能转为整数则返回错误。成功返回减后的值。
数值范围10进制32位或64位(基于系统位数)有符号整数
@Test
public void decr() {
Assert.assertEquals(-1, stringCommands.decr("decr").longValue());
Assert.assertEquals(-2, stringCommands.decr("decr").longValue());
}
DECRBY key decrement
对 key 的值做减一操作,如果 key 不存在则从 0 计算,如果 key 的值不能转为整数则返回错误。成功返回减后的值。
@Test
public void decrby() {
Assert.assertEquals(-10, stringCommands.decrby("decrby", 10).longValue());
Assert.assertEquals(-12, stringCommands.decrby("decrby", 2).longValue());
}
APPEND key value
在 key 的值后追加字符串 value ,如果 key 不存在则设置 key 的值为 value 。返回追加后的字符串长度。
@Test
public void append() {
Assert.assertEquals(1, stringCommands.append("append", "A").longValue());
Assert.assertEquals("A", stringCommands.get("append"));
Assert.assertEquals(2, stringCommands.append("append", "B").longValue());
Assert.assertEquals("AB", stringCommands.get("append"));
}
GETRANGE key start end
获取 key 的值中指定范围(包括 start end)的字符串,如果 end 超出范围则取字符串最大长度,索引均代表字节索引而非字符索引,成功返回得到的字符串。
索引值为负数时,代表从后向前取,如 -1 代表最后一个字节。
@Test
public void getrange() {
stringCommands.set("getrange", "ABCDEFG");
Assert.assertEquals("BCD", stringCommands.getrange("getrange", 1, 3));
Assert.assertEquals("EFG", stringCommands.getrange("getrange", -3, -1));
Assert.assertEquals("ABCDEFG", stringCommands.getrange("getrange", 0, -1));
}
SETRANGE key offset value
从 offset 位置开始包括 offset 覆盖 key 的值,索引均代表字节索引而非字符索引。成功返回新值的长度。
@Test
public void setrange() {
Assert.assertEquals(3, stringCommands.setrange("setrange", 0, "ABC").longValue());
Assert.assertEquals("ABC", stringCommands.get("setrange"));
Assert.assertEquals(4, stringCommands.setrange("setrange", 1, "DEF").longValue());
Assert.assertEquals("ADEF", stringCommands.get("setrange"));
}
STRLEN key
获取 key 的值的字节长度,成功返回值的字节长度。
@Test
public void strlen() {
Assert.assertEquals("OK", stringCommands.set("strlen", "value1"));
Assert.assertEquals(6, stringCommands.strlen("strlen").longValue());
}
源码地址
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rockeycui@163.com
文章标题:Redis系列-Redis-String命令讲解(JAVA-lettuce客户端)
文章字数:1.5k
本文作者:崔石磊(RockeyCui)
发布时间:2019-04-01, 20:00:00
原始链接:https://cuishilei.com/redis-string.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。