多维度深入分析Redis的5种基本数据结构
Redis是一种高性能、内存数据存储系统,它支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合。其中,每种数据结构都具有不同的特性和用途,本文将对这五种基本数据结构进行深入分析。
1. 字符串(string)
字符串是最基本的数据结构,一个字符串可以存储任意二进制数据,例如一个jpg图片或者一个序列化的对象。在Redis中,字符串类型是最常用的数据类型之一。字符串型键key有着很多操作指令,比如set、get、mset、mget、incr等,下面我们具体介绍几个操作指令的用法。
set key value [EX seconds] [PX milliseconds] [NX|XX]
:设置键key的值为字符串value,如果键key已经存在,用这个指令会覆盖原有的值。如果设置了EX或者PX选项,那么键key的生存时间将会设置为seconds秒或者milliseconds毫秒。如果设置了NX选项,那么只有当键key不存在时才会设置成功。如果设置了XX选项,那么只有当键key已经存在时才会设置成功。
$ redis-cli
127.0.0.1:6379> set name Alice
OK
127.0.0.1:6379> get name
"Alice"
get key
:获取键key的值。
$ redis-cli
127.0.0.1:6379> get name
"Alice"
mset key1 value1 [key2 value2 ...]
:同时设置多个键值对,其中key和value为成对出现的参数。
$ redis-cli
127.0.0.1:6379> mset name Alice age 25
OK
127.0.0.1:6379> mget name age
1) "Alice"
2) "25"
2. 哈希表(hash)
哈希表即HashMap,在Redis中,哈希表被实现为一个键值对集合,其中键是字符串类型,值是字符串、列表或者哈希表类型的数据。哈希表的一个常见应用场景是存储对象或者结构的属性值。
hset key field value
:设置哈希表key中field的值为value。
$ redis-cli
127.0.0.1:6379> hset user name Alice
(integer) 1
hget key field
:获取哈希表key中field的值。
$ redis-cli
127.0.0.1:6379> hget user name
"Alice"
hmset key field1 value1 [field2 value2 ...]
:设置多个哈希表key的值。
$ redis-cli
127.0.0.1:6379> hmset user name Alice age 25
OK
127.0.0.1:6379> hgetall user
1) "name"
2) "Alice"
3) "age"
4) "25"
3. 列表(list)
列表即是一个链表结构,链表中的每个节点都包含了一个字符串值,Redis的列表类型,可以支持分值,并在列表两端插入或删除元素。列表类型常用于消息队列和最新消息排行榜等场景。
lpush/rpush key value1 [value2 ...]
:向列表左边或右边插入一个或多个元素。
$ redis-cli
127.0.0.1:6379> lpush news "news1" "news2" "news3"
(integer) 3
lrange key start end
:获取列表key中从start到end的所有元素。
$ redis-cli
127.0.0.1:6379> lrange news 0 -1
1) "news3"
2) "news2"
3) "news1"
4. 集合(set)
集合即是一组无序的字符串数据,且每个元素都是唯一的,Redis的集合类型支持基本的集合运算,例如并集、交集、差集等。
sadd key member1 [member2 ...]
:向集合key中添加一个或多个元素。
$ redis-cli
127.0.0.1:6379> sadd cities "Beijing" "Shanghai" "Guangzhou"
(integer) 3
smembers key
:返回集合key中的所有成员。
$ redis-cli
127.0.0.1:6379> smembers cities
1) "Beijing"
2) "Shanghai"
3) "Guangzhou"
sinter key1 key2 [key3 ...]
:返回key1、key2、key3等集合的交集。
$ redis-cli
127.0.0.1:6379> sadd colors1 "red" "yellow" "blue"
(integer) 3
127.0.0.1:6379> sadd colors2 "white" "blue" "black"
(integer) 3
127.0.0.1:6379> sinter colors1 colors2
1) "blue"
5. 有序集合(sorted set)
有序集合可以看做是集合的增强版,每个成员都与一个分值相关联,Redis的有序集合类型常用于排序和排行榜等场景。
zadd key score1 member1 [score2 member2 ...]
:向有序集合key中添加一个或多个成员。
$ redis-cli
127.0.0.1:6379> zadd grades 89 Tom 92 Jack 76 Alice
(integer) 3
zrange key start end [WITHSCORES]
:返回有序集合key中分值在start和end之间的元素,当指定了WITHSCORES参数时,还会返回元素的分值。
$ redis-cli
127.0.0.1:6379> zrange grades 0 -1 WITHSCORES
1) "Alice"
2) "76"
3) "Tom"
4) "89"
5) "Jack"
6) "92"
以上,就是Redis的5种基本数据结构的详细讲解,这几种数据结构在Redis中非常常用,掌握它们可以让我们更好的应用Redis。
附加:以下是示例代码中的操作指令的详细解释:
set key value [EX seconds] [PX milliseconds] [NX|XX]
:设置键key的值为字符串value,当NX选项被设置时表示只有key不存在的情况下才能设置成功,当XX选项被设置时表示只有key已经存在的情况下才能设置成功。get key
:获取键key的值。mset key1 value1 [key2 value2 ...]
:同时设置多个键值对,其中key和value为成对出现的参数。hset key field value
:设置哈希表key中field的值为value。hget key field
:获取哈希表key中field的值。hmset key field1 value1 [field2 value2 ...]
:设置多个哈希表key的值。lpush key value1 [value2 ...]
:向列表左边插入一个或多个元素。rpush key value1 [value2 ...]
:向列表右边插入一个或多个元素。lrange key start end
:获取列表key中从start到end的所有元素。sadd key member1 [member2 ...]
:向集合key中添加一个或多个元素。smembers key
:返回集合key中的所有成员。sinter key1 key2 [key3 ...]
:返回key1、key2、key3等集合的交集。zadd key score1 member1 [score2 member2 ...]
:向有序集合key中添加一个或多个成员。zrange key start end [WITHSCORES]
:返回有序集合key中分值在start和end之间的元素,当指定了WITHSCORES参数时,还会返回元素的分值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:多维度深入分析Redis的5种基本数据结构 - Python技术站