一、数据类型

如果学过数据结构就会知道,操作往往是在特定的数据结构上的,不同的数据结构就会有不同的操作,Redis支持以下的数据类型:

字符串(Strings),列表(Lists),集合(Sets),哈希表(Hashes),有序集合(Sorted Sets),Bitmaps和HyperLogLogs,Bitmaps和HyperLogLogs其实也是基于字符串的类型,只不过定义了自己的语义。

二、常用操作

因为篇幅有限,这里无法介绍所有命令,只能介绍一些常用的操作,先说明Redis的命令是不区分大小写的,但是键值是区分大小写的,比如命令set和命令SET是一样的,但是set foo bar和set Foo bar是不一样的。

  • select

我们启动了redis之后,默认的端口号是6379,这被称为一个实例,在一个实例中会有不同的库,默认是16个(0——15),这可以在redis.conf(如果设置了开机启动配置文件可能变成了6379.conf,具体需要看使用了哪个配置文件)中通过改变databases的值来修改

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

当我们连接了Redis之后,默认使用的数据库是0,可以通过select命令来切换成其他的库

127.0.0.1:6379> select 1
OK
  • set和get操作

用过Java的都知道HashMap这种数据结构,就是键值对,存值和取值都非常方便,而且效率又高(时间复杂度都是O(1))。Redis提供的set和get方法也是如此,下面是存值和取值

127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
  • lpush、lrem、lset、lindex

这4个命令对应的是列表的增删改查4中操作:

127.0.0.1:6379> lpush mylist 1 2 3 4
(integer) 4
127.0.0.1:6379> lrem mylist 1 1
(integer) 1
127.0.0.1:6379> lset mylist 0 6
OK
127.0.0.1:6379> lindex mylist 1
"3"

关于数组操作的命令有不少是批量操作

需要注意的是,数组相关的操作是有方向的,比如上面的4个操作是从左边开始操作,比如lpush是从数组的左边添加元素,还有一个相对应的rpush命令是从数组的右边添加元素

  • sadd、scard、smembers、sinter

这些是集合的操作,分别是添加元素到集合中,返回集合的元素个数,输出集合所有元素和计算交集

127.0.0.1:6379> sadd myset1 one two three one two
(integer) 3
127.0.0.1:6379> scard myset1
(integer) 3
127.0.0.1:6379> smembers myset1
1) "two"
2) "one"
3) "three"
127.0.0.1:6379> sadd myset2 one two four
(integer) 3
127.0.0.1:6379> sinter myset1 myset2
1) "two"
2) "one"
  • zadd、zcard、zcount、zrange

这些是有序集合的操作,它有着Sets集合的性质——元素不能重复,但是增加了元素的分数。换一句话说就是每个元素都会有一个分数,这个分数的作用就是在查找的时候,分数可以作为一个查找的条件。另外,有序集合保留了元素添加的顺序。

127.0.0.1:6379> zadd mysortedset 1 one 2 two 3 three 2 two
(integer) 3
127.0.0.1:6379> zcard mysortedset
(integer) 3
127.0.0.1:6379> zcount mysortedset 2 3
(integer) 2
127.0.0.1:6379> zrange mysortedset 0 3 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"

zcount命令需要制定分数的最小值和最大值,比如上面的例子就是查出分数在[2, 3]这个区间内的元素个数

  • hset、hget、hdel、hexists

这些是哈希表的操作,相当于Java中Map的put、get、remove和containsKey方法

127.0.0.1:6379> hset myhash foo bar
(integer) 1
127.0.0.1:6379> hset myhash Foo Bar
(integer) 1
127.0.0.1:6379> hget myhash Foo
"Bar"
127.0.0.1:6379> hdel myhash foo
(integer) 1
127.0.0.1:6379> hexists myhash foo
(integer) 0

三、总结

本篇主要介绍了Redis的数据类型和几种操作,由于篇幅的原因就不一一介绍,有兴趣可以到官网查看文档,官方文档地址,英语不好的同学可以看中文文档。还有Bitmaps和HyperLogLog这两种相对特殊的数据类型下一篇介绍。