redis(二):redis的五种数据类型及常见命令

版权声明:本文为博主原创文章,转载请注明文章链接 https://blog.csdn.net/zhanyu1/article/details/90707694

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

注:在redis中的命令语句中,命令是忽略大小写的,而key是不忽略大小写的。

1、String类型

1.1基本介绍

string 类型是二进制安全的,即redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。而且键的值有最大值限制,一个键最大能存储512MB。

1.2 常见命令

赋值:set key value
取值:get key

127.0.0.1:6379> set test zhangsan
OK
127.0.0.1:6379> get test
"zhangsan"

2、Hash类型

2.1 基本介绍

Hash类型也叫散列类型,它提供了字段和字段值的映射。hash 特别适合用于存储对象,字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。每个 hash 可以存储 232 -1 键值对(40多亿)。
结构如下图:
在这里插入图片描述

2.2 常见命令

赋值:
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

  • 一次只能设置一个字段值
    语法:HSET key field value
127.0.0.1:6379> hset user username zhangsan 
(integer) 1
  • 一次可以设置多个字段值
    语法:HMSET key field value [field value …]
127.0.0.1:6379> hmset user age 20 username lisi 
OK
  • 当字段不存在时赋值,类似HSET,区别在于如果字段存在,该命令不执行任何操作
    语法:HSETNX key field value
127.0.0.1:6379> hsetnx user age 30	如果user中没有age字段则设置age值为30,否则不做任何操作
(integer) 0

取值:

  • 一次只能获取一个字段值
    语法:HGET key field
127.0.0.1:6379> hget user username
"zhangsan“
  • 一次可以获取多个字段值
    语法:HMGET key field [field …]
127.0.0.1:6379> hmget user age username
1) "20"
2) "lisi"
  • 获取所有字段值
    语法:HGETALL key
127.0.0.1:6379> hgetall user
1) "age"
2) "20"
3) "username"
4) "lisi"

3、List类型

3.1 基本介绍

Redis的列表类型(list)是简单的字符串列表,可以存储一个有序的字符串列表。按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

3.2 常见命令

向列表两端增加元素:

  • 向列表左边增加元素
    语法:LPUSH key value [value …]
127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3
  • 向列表右边增加元素
    语法:RPUSH key value [value …]
127.0.0.1:6379> rpush list:1 4 5 6
(integer) 3

查看列表:

  • 语法:LRANGE key start stop

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

4、Set类型

4.1 基本介绍

Redis的Set是string类型的无序集合,其中的数据是不重复且没有顺序。集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

集合类型和列表类型的对比:
在这里插入图片描述
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的Redis内部是使用值为空的散列表实现,所有这些操作的时间复杂度都为0(1)。

Redis还提供了多个集合之间的交集、并集、差集的运算。

4.2 常见命令

增加/删除元素:

  • 语法:SADD key member [member …]
127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0

由于对键set添加了两次a,因为集合的唯一性,所以第二次添加a被忽略。

  • 语法:SREM key member [member …] (移除集合中一个或多个成员)
127.0.0.1:6379> srem set c d
(integer) 1

5、Zset类型

5.1 基本介绍

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

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

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

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

1、二者都是有序的。
2、二者都可以获得某一范围的元素。
但是,二者有着很大区别:
1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。
2、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。
3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)
4、有序集合要比列表类型更耗内存。

5.2 常见命令

增加元素:

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

  • 语法:ZADD key score member [score member …]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu 
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi 
(integer) 0

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

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

  • 语法:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2
1) "zhangsan"
2) "wangwu"
3) "lisi“

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

  • 语法:ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange scoreboard 0 2
1) " lisi "
2) "wangwu"
3) " zhangsan “

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

127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES
1) "zhangsan"
2) "80"
3) "wangwu"
4) "94"

猜你喜欢

转载自blog.csdn.net/zhanyu1/article/details/90707694