Redis数据库之数据类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ip_JL/article/details/83245294

Redis有5种数据类型:

1)  字符串string语法/命令

① 赋值与取值:

SET key value

GET key

Jedis的实现:

@Test
	public void test() {
		Jedis jedis = new Jedis("192.168.100.132", 6379);
		//jedis.set("address", "beijing");
		String address = jedis.get("name");
		System.out.println(address);
		jedis.close();
		
	}

② 向尾部追加值

APPEND key value

APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。

③ 获取字符串长度

STRLEN key

STRLEN命令返回键值的长度,如果键不存在则返回0。

Jedis的实现:

@Test
	public void testappend() {
		Jedis jedis = new Jedis("192.168.100.132", 6379);
		//jedis.set("address", "beijing");
		//jedis.append("name", "world");
		Long len = jedis.strlen("name");
		System.out.println(len);
		jedis.close();
		
	}

④ 同时设置/获取多个键值

MSET key value [key value …]

MGET key [key …]

Jedis的实现:

@Test
	public void testMset() {
		Jedis jedis = new Jedis("192.168.100.132", 6379);
		jedis.mset(new String[]{"name","zhangsan","age","12"});
		jedis.close();
	}

2) 散列hash语法/命令

① 赋值与取值

HSET key field value 一次只能设置一个字段值

HGET key field                   一次只能获取一个字段值

HMSET key field value [field value ...]             一次可以设置多个字段值

HMGET key field [field ...]                                  一次可以获取多个字段值

HGETALL key

② 判断字段是否存在

HEXISTS key field

HSETNX key field value  当字段不存在时赋值,类似HSET,区别在于如果字段已经存在,该命令不执行任何操作。

③ 删除字段

可以删除一个或多个字段,返回值是被删除的字段个数

HDEL key field [field ...]

④ 只获取字段名或字段值

HKEYS key

HVALS key

⑤ 获取字段数量

HLEN key

@Test
    public void testhset() {
        Jedis jedis = new Jedis("192.168.100.132", 6379);
        jedis.hset("person", "name", "zhangsan");
        String name = jedis.hget("person", "name");
        jedis.flushAll();
        Map<String,String> map = new HashMap<String, String>();
        map.put("username", "wangwu");
        map.put("age", "10");
        map.put("address", "北京");
        jedis.hmset("user", map);
        
        List<String> list = jedis.hmget("user", new String[]{"username","age","address"});
        System.out.println(list);
        Set<String> keys = jedis.hkeys("user");
        List<String> hvals = jedis.hvals("user");
        System.out.println(keys);
        System.out.println(hvals);
        jedis.close();
    }

3) 列表list语法/命令

① 向列表两端增加元素

LPUSH key value [value ...]  从左向右

RPUSH key value [value ...]  从右向左

② 从列表两端弹出元素

LPOP key

RPOP key

LPOP命令从列表左边弹出一个元素,会分两步完成,第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。

③ 获取列表中元素的个数

LLEN key

④ 获取列表片段

LRANGE key start stop  

LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。

⑤ 删除列表中指定的值

LREM key count value

LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。

当count>0时, LREM会从列表左边开始删除。

当count<0时, LREM会从列表后边开始删除。

当count=0时, LREM删除所有值为value的元素。

@Test
    public void testlist() {
        Jedis jedis = new Jedis("192.168.100.132", 6379);
        jedis.flushAll();
        jedis.rpush("itemId", new String[]{"001","002","003","004"});
        String itemId = jedis.rpop("itemId");
        System.out.println(itemId);
        System.out.println(jedis.llen("itemId"));
        List<String> list = jedis.lrange("itemId", 0, -1);
        System.out.println(list);
        jedis.close();
    }

4) 无序集合set语法/命令

① 增加/删除元素

SADD key member [member ...]

SREM key member [member ...]

② 获得集合中的所有元素

SMEMBERS key

③  判断元素是否在集合中,无论集合中有多少元素都可以极速的返回结果

SISMEMBER key member

@Test
    public void testset() {
        Jedis jedis = new Jedis("192.168.100.132", 6379);
        jedis.flushAll();
        jedis.sadd("myset1", new String[]{"a","b","c"});
        jedis.sadd("myset1", new String[]{"a","b","c"});
        jedis.srem("myset1", new String[]{"c"});
        
        Set<String> set = jedis.smembers("myset1");
        System.out.println(set);
        Boolean boolean1 = jedis.sismember("myset1", "b");
        System.out.println(boolean1);
        jedis.close();
    }

5) 有序集合sortset语法/命令

在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。

在某些方面有序集合和列表类型有些相似。

1、二者都是有序的。

2、二者都可以获得某一范围的元素。

但是,二者有着很大区别:

1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。

2、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。

3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)

4、有序集合要比列表类型更耗内存。

① 增加元素

ZADD key score member [score member ...]

② 获取元素的分数

ZSCORE key member

③ 获得排名在某个范围的元素列表

ZRANGE key start stop [WITHSCORES]                     照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

④ ZREVRANGE key start stop [WITHSCORES]              照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

⑤  zrange scoreboard 0 1 WITHSCORES      如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数

⑥ 获得指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

⑦ 增加某个元素的分数,返回值是更改后的分数。

ZINCRBY  key increment member

⑧ 获得集合中元素的数量

ZCARD key

⑨ 获得指定分数范围内的元素个数

ZCOUNT key min max

⑩ 按照排名范围删除元素

ZREMRANGEBYRANK key start stop

按照分数范围删除元素   ZREMRANGEBYSCORE key min max

获取元素的排名   ZRANK key member    ZREVRANK key member

猜你喜欢

转载自blog.csdn.net/ip_JL/article/details/83245294