文章目录

  • 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"

对字符串类型也可以执行 incrincrbydecrdecrby 等数值操作,在对字符串执行数值操作后,Redis 会将字符串转换成 Integer 类型。

1.2 list

Redislist 中也存储的是字符串。

Redislist 底层实现是链表,也就是说,无论列表中有多少个元素,在列表的头和尾插入元素的速度都是一样的,都很快。弊端就是,链表型的列表定位元素比较慢。

  • lpushrpush 命令在 list 的左侧、右侧插入一个新元素(可插入多个值);
  • lrange 获取指定范围的元素,lindex 获取指定位置的元素;
  • lpoprpop 移除列表的第一个、最后一个元素;
  • 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 集合还支持取交集、并集、差集等操作。

  • sintersunionsdiff 分别用来取集合之间的交集、并集、差集,但这几个命令只返回结果。
  • sinterstoresunionstoresdiffstore 也可以用来取集合之间的交集、并集、差集,并且将结果存储在指定的集合中,语法 sinterstore destination key1 key2——取集合 key1key2 的交集并将结果存储在 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"