文章目录
- 1. Redis 数据类型
- 1.1 字符串
- 1.2 list
- 1.3 set
- 1.4 sorted set
- 1.5 hash
1. Redis 数据类型
Redis
是一种 key-value
数据库,其中 value
支持五种数据类型:
- 字符串(string)
- 字符串列表(list)
- 字符串集合(set)
- 有序字符串集合(sorted set)
- 哈希(hash)
下面我们简单介绍下 Redis
的每一种数据类型,以及常用的指令操作,可以使我们对 Redis
的数据类型及操作有一个初步的认识。
1.1 字符串
使用 set
设置键的值,使用 get
查看键对应的值。type
可以用来查看存储的值的类型。
> set num 1
"OK"
> get num
"1"
> type num
"string"
> incr num
(integer) 2
> get num
"2"
对字符串类型也可以执行 incr
、incrby
、decr
、decrby
等数值操作,在对字符串执行数值操作后,Redis 会将字符串转换成 Integer
类型。
1.2 list
Redis
的 list
中也存储的是字符串。
Redis
的 list
底层实现是链表,也就是说,无论列表中有多少个元素,在列表的头和尾插入元素的速度都是一样的,都很快。弊端就是,链表型的列表定位元素比较慢。
-
lpush
、rpush
命令在list
的左侧、右侧插入一个新元素(可插入多个值); -
lrange
获取指定范围的元素,lindex
获取指定位置的元素; -
lpop
、rpop
移除列表的第一个、最后一个元素; -
lrem
用来移除指定位置的元素。
> lpush num 1
(integer) 1
> lpush num 2 3
(integer) 3
> rpush num 4
(integer) 4
> lrange num 1 4
1) "2"
2) "1"
3) "4"
> lrange num 0 4
1) "3"
2) "2"
3) "1"
4) "4"
> lindex num 2
"1"
> lpop num
"3"
> lrange num 0 3
1) "2"
2) "1"
3) "4"
实际应用中,我们可以利用 list
的特性,实现消息队列,push
操作可以确保先后顺序。利用 lrange
可以实现分页功能。
1.3 set
Redis
集合是一种无序的集合。
-
sadd
添加集合元素,smembers
查看集合元素,srem
移除集合元素; -
sismember
判断元素是否在集合内;
> sadd num 1 2 3
(integer) 3
> smembers num
1) "1"
2) "2"
3) "3"
> srem num 2
(integer) 1
> smembers num
1) "1"
2) "3"
> sismember num 5
(integer) 0
> sismember num 1
(integer) 1
Redis
集合还支持取交集、并集、差集等操作。
-
sinter
、sunion
、sdiff
分别用来取集合之间的交集、并集、差集,但这几个命令只返回结果。 -
sinterstore
、sunionstore
、sdiffstore
也可以用来取集合之间的交集、并集、差集,并且将结果存储在指定的集合中,语法sinterstore destination key1 key2
——取集合key1
、key2
的交集并将结果存储在destination
中。
> smembers num
1) "1"
2) "3"
> smembers num2
1) "1"
2) "2"
> sunion num num2
1) "1"
2) "2"
3) "3"
> sinter num num2
1) "1"
> sdiff num num2
1) "3"
> sinterstore num3 num num2
(integer) 1
1.4 sorted set
Redis
提供的 sorted set
是一种有序集合。在有序集合中,每个元素会关联一个序号(score
),集合就是根据这个序号对元素进行排序的。
Redis
中有序集合的命令都以 z 开头,所以通常也把有序集合叫做zset
。
> zadd name 24 kobe
(integer) 1
> zadd name 3 pual
(integer) 1
> zadd name 30 curry
(integer) 1
> zrange name 0 2
1) "pual"
2) "kobe"
3) "curry"
> zrange name 0 2 withscores
1) "pual"
2) "3"
3) "kobe"
4) "24"
5) "curry"
6) "30"
zadd
用来向有序集合添加元素,从上面程序的结果看,我们得到了一个有序的集合。zrange
用来查看有序集合的元素,带上 withscores
参数可以查看元素及其分数。
1.5 hash
hash
存储了字符串和字符串值的映射,因此 hash
常用于存储对象。hash
表的命令都以 h
开头。
> hset players name kobe num 24
(integer) 2
> hgetall players
1) "name"
2) "kobe"
3) "num"
4) "24"
> hget players name
"kobe"