Redis系列-Redis-String命令讲解(JAVA-lettuce客户端)

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());
    }

源码地址

https://github.com/RockeyCui/learn-normal/tree/master/learn-redis/src/test/java/com/rock/learn/redis/lettuce


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏