Redis的5种数据结构

作者: Seven_DQ | 来源:发表于2018-09-13 22:22 被阅读149次

Redis中有5种数据结构,分别是string(字符串)、list(链表)、set(无序集合)、hash(健值对)和zset(有序集合)

1. string字符串

跟其他语言中的字符串一样,形如key value,如hello world, hello是key, world是值。

操作命令
命令 行为
set 设置在给定键的值
get 获取指定键的值
del 删除给定键的所有值(通用命令,适合任何数据结构)
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)

2. list链表

一个列表结构可以有序的存储多个值,就跟数据结构中的链表一样


image.png

值可以重复

操作命令
命令 行为
rpush/lpush 将给定的值从右边/左边推入到链表中
rpop/rpush 将给定的值从链表的右边/左边推出
lrange 获取链表中给定范围的值
lindex 获取链表中给定位置的单个值
127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.0.0.1:6379> lrange list 0 -1
(empty list or set)
127.0.0.1:6379> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
127.0.0.1:6379> lindex list-key 0
"item"
127.0.0.1:6379> lindex list-key 1
"item2"
127.0.0.1:6379> lpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -2
1) "item2"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"
127.0.0.1:6379> rpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"

3. set集合(无序不重复)

跟Java中的set集合一样无序不重复

image.png
操作命令
操作 命令
sadd 将值插入到给定的集合中
smembers 获取集合中所有的值
sismember 检查值是否在集合中
srem 移除集合中的这个值
127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item3
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item2"
3) "item"
127.0.0.1:6379> sismember set-key item4
(integer) 0
127.0.0.1:6379> sismember set-key item
(integer) 1
127.0.0.1:6379> srem set-key item4
(integer) 0
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item"

4. hash 散列

Redis的散列可以存储多个健值对,跟字符串一样,散列的值可以存储字符串和数字。


image.png

hash-key是一个存储了俩个健值对的散列

操作命令
命令 行为
hset 给指定散列填充健值对
hget 获取指定散列的指定健值对
hdel 删除指定散列中指定的健值对
hgetall 获取指定散列的所有健值对
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 0
127.0.0.1:6379> hset hash-key sub-key1 value2
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value2"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hget hash-key sub-key2
"value2"
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hget hash-key sub-key2
(nil)
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value2"

hset时散列中的键对应的值会覆盖

5. 有序集合

有序集合和散列一样都是存储的健值对,不一样的是,有序集合的值只能是浮点数,有序集合的键称之为成员,值称之为分值

image.png
zset-key是一个有两个健值对的集合
操作命令
命令 行为
zadd 给指定集合添加已知分值的成员
zrange 根据顺序范围获取成员(0 -1)是全部
zrangebyscore 根据分值范围获取成员
zrem 移除集合中指定成员
127.0.0.1:6379> zadd zset-key 728 member
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1
1) "member"
2) "member0"
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member"
2) "728"
3) "member0"
4) "982"
127.0.0.1:6379> zrange zset-key 0 800 withscore
(error) ERR syntax error
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member"
2) "728"
127.0.0.1:6379> zrem zset-key member
(integer) 1
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"

zadd时在同一个有序集合中相同的成员分值会被覆盖

相关文章

网友评论

    本文标题:Redis的5种数据结构

    本文链接:https://www.haomeiwen.com/subject/fnmggftx.html