相关文章:
在这里,我们来了解下 Redis 中常用的数据类型,它们分别是:String (字符串)、Hash (哈希)、List (列表)、Set (集合)、Sorted Set (有序集合)
一、String (字符串)
-
String 是 Redis 最基本的数据类型,一个 key 对应一个 value
-
String 类型是二进制安全的,也就是说 Redis 的 String 可以包含任何数据,其值最大能存储 512 MB
-
常用的命令有:set、get、incr、decr
-
举例说明
-
set、get
127.0.0.1:6379> set student xiaoming OK 127.0.0.1:6379> get student "xiaoming" 127.0.0.1:6379> set student xiaohong NX (nil) 127.0.0.1:6379> get student "xiaoming" 127.0.0.1:6379> set student xiaohong XX OK 127.0.0.1:6379> get student "xiaohong"
-
NX:仅当 key 不存在时,才进行设置
-
XX:仅当 key 存在时,才进行设置
-
-
incr、decr
127.0.0.1:6379> set counter 100 OK 127.0.0.1:6379> incr counter (integer) 101 127.0.0.1:6379> decr counter (integer) 100
-
二、Hash (哈希)
-
Hash 是一个 String 类型的 field 和 value 的映射表,特别适合于存储对象
-
常用的命令有:hset、hget、hmset、hgetall
-
举例说明
-
hset、hget
127.0.0.1:6379> hset xiaoming age 22 (integer) 1 127.0.0.1:6379> hgetall xiaoming 1) "age" 2) "22" 127.0.0.1:6379> hget xiaoming age "22"
-
hmset、hgetall
127.0.0.1:6379> hmset xiaohong age 23 sex female OK 127.0.0.1:6379> hgetall xiaohong 1) "age" 2) "23" 3) "sex" 4) "female"
-
三、List (列表)
-
List 是最简单的字符串列表,按照插入顺序排序,可以将一个元素添加到列表的头部 (左边) 或者尾部 (右边)
-
List 底层由双向链表实现,可以通过 push 或 pop 操作来从列表的头尾或尾部添加或删除元素,即 List 既可以作为栈 (LIFO,后进先出),也可以作为队列 (FIFI,先进先出)
-
常用的命令有:lpush、lpop、rpush、rpop、lrange
-
举例说明
-
lpush、lpop
127.0.0.1:6379> lpush mylist AAA (integer) 1 127.0.0.1:6379> lpop mylist "AAA"
-
rpush、rpop
127.0.0.1:6379> rpush mylist BBB (integer) 1 127.0.0.1:6379> rpop mylist "BBB"
-
lrange
127.0.0.1:6379> lpush mylist1 AAA BBB (integer) 2 127.0.0.1:6379> lrange mylist1 0 1 1) "BBB" 2) "AAA" 127.0.0.1:6379> rpush mylist2 AAA BBB (integer) 2 127.0.0.1:6379> lrange mylist2 0 1 1) "AAA" 2) "BBB"
-
四、Set (集合)
-
Set 是 String 类型的无序集合
-
Set 底层由 Hashtable 实现,不允许有重复元素,其添加、删除、查找的时间复杂度为 O(1)
-
常用的命令有:sadd、scard、smembers、sinter、sunion、sdiff
-
举例说明
-
sadd、scard、smembers
127.0.0.1:6379> sadd myset AAA (integer) 1 127.0.0.1:6379> sadd myset BBB (integer) 1 127.0.0.1:6379> scard myset (integer) 2 127.0.0.1:6379> smembers myset 1) "BBB" 2) "AAA"
-
sinter、sunion、sdiff
127.0.0.1:6379> sadd myset1 a (integer) 1 127.0.0.1:6379> sadd myset1 b (integer) 1 127.0.0.1:6379> sadd myset1 c (integer) 1 127.0.0.1:6379> sadd myset2 c (integer) 1 127.0.0.1:6379> sadd myset2 d (integer) 1 127.0.0.1:6379> sadd myset2 e (integer) 1 127.0.0.1:6379> sinter myset1 myset2 1) "c" 127.0.0.1:6379> sunion myset1 myset2 1) "a" 2) "d" 3) "c" 4) "e" 5) "b" 127.0.0.1:6379> sdiff myset1 myset2 1) "b" 2) "a" 127.0.0.1:6379> sdiff myset2 myset1 1) "d" 2) "e"
-
五、Sorted Set (有序集合)
-
Sorted Set 和 Set 一样也是 String 类型的集合,且不允许有重复元素
-
Sorted Set 的每个元素都会关联一个 double 类型的分数,Redis 通过分数来为集合中的成员进行从小到大的排序
-
Sorted Set 的元素是唯一的,但是分数是可以重复的,分数越小权重越大
-
Sorted Set 底层由 HashMap 和 SkipList (跳跃表) 实现,HashMap 存放的是元素到分数的映射,SkipList 存放的是所有元素,依据 HashMap 里存放的分数来进行排序,同时使用跳跃表可以获得较高的查询效率,并且实现较为简单
-
常用的命令有:zadd、zcard、zrangebyscore、zrank
-
举例说明
-
zadd、zcard
127.0.0.1:6379> zadd zset 1 AAA (integer) 1 127.0.0.1:6379> zadd zset 2 BBB (integer) 1 127.0.0.1:6379> zcard zset (integer) 2
-
zrangebyscore、zrank
127.0.0.1:6379> zadd myzset 2 BBB (integer) 1 127.0.0.1:6379> zadd myzset 1 AAA (integer) 1 127.0.0.1:6379> zadd myzset 3 CCC (integer) 1 127.0.0.1:6379> zadd myzset 5 EEE (integer) 1 127.0.0.1:6379> zadd myzset 4 DDD (integer) 1 127.0.0.1:6379> zadd myzset 5 FFF (integer) 1 127.0.0.1:6379> zrangebyscore myzset 0 6 1) "AAA" 2) "BBB" 3) "CCC" 4) "DDD" 5) "EEE" 6) "FFF" 127.0.0.1:6379> zrank myzset FFF (integer) 5
-