Redis 一个基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求。同时 Redis 还可以胜任消息队列、任务队列等不同的角色。接下来,我们就从 Redis 的安装开始,一步步学习 Redis。
1. 安装和启动
Redis下载地址:http://redis.cn/download.html
Redis 的安装非常简单,下载完成后解压即可。成功解压后,我们可以在 Redis 的目录里看到解压后的文件,其中最常使用的两个程序是 redis-server 和 redis-cli。redis-server是 Redis 的服务器,要想使用 Redis 就需要先运行 redis-server;而 redis-cli 是 Redis 命令行客户端,是学习 Redis 的重要工具。
启动 Redis 十分简单,直接运行 redis-server即可,运行之后出现如下图所示的界面,就表示启动成功。
另外,也可以在 Redis 解压目录下,使用命令行来启动 Redis,同时还能指定端口号,命令如下:
redis-server --port 6380
当然,启动完成后要怎么停止呢?直接强制终止 Redis 进程会有不妥,如果 Redis 正在进行数据同步的话,可能会导致数据丢失,所以停止 Redis 的正确姿势是向 Redis 发送 SHUTDOWN 命令,如下:
redis-cli SHUTDOWN
现在已经学会了启动 Redis,那么接下来就需要学习怎么使用 Redis 了。在 Redis 的解压目录里有自带的基于命令行的 Redis 客户端 —— redis-cli,它是我们学习和测试 Redis 的重要工具。我们可以直接运行它,它会帮我们启动一个默认实例(127.0.0.1:6379)。另外,我们也可以在命令行中,通过命令指定地址和端口来启动,如下:
redis-cli -h 127.0.0.1 -p 6380
2. 热身
2.1 字符串类型
Redis 中最长用的数据对象就是字符串类型了,我们可以通过 SET 命令来给一个键进行赋值,通过 GET 命令来获取一个键的值,如下:
当然,在为某个键赋值的时候,并不需要先定义声明这个键,直接使用即可。那么假如我想知道某个键是否存在的话,需要怎么办呢?这时,我们可以使用 EXISTS 命令,如下:
当键存在的话,EXISTS 命令会返回 1,不存在则返回 0。
现在,我不想要 age 这个键了,我想把它删除了,这时就可以使用 DEL 命令了,如下:
返回的 1 表示成功删除了一个键。
2.2 散列类型
字符串类型只能进行一对一映射,现在我想要创建一个对象,对象里面有多个属性,每个属性都有它的值,这时候就需要散列类型了,来看看下面的例子:
这里表示通过 HSET 命令创建一个名为 person 的键,键里面对应三个属性分别为 name、age、sex,值分别为 Bob、22、male,然后我们可以通过 HGET 命令来获取 person 键某个属性的值,同时还可以使用 HGETALL 来获取 person 这个键的所有属性和值。
2.3 列表类型
列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,例如:
上图通过 RPUSH 命令向列表 list 里插入了 1、2、1、3 这四个元素,并通过 LRANGE 命令显示了第1-4个元素,然后通过 LPOP 命令删除第一个元素,最后再通过 LRANGE 命令显示。
2.4 集合类型
集合类型就非常有趣了,它有一个特点,就是集合中的元素都是互不相同的,并且没有顺序,比如:
在这里,我们通过 SADD 命令向集合 phone 里插入了 4 个元素,其中 123465 插入了两次,结果通过 SMEMBERS 命令获取 phone 里面所有元素的时候,显示只有 3 个元素,这就是集合的特点。同时,在执行第二条 SADD phone 123456 命令的时候,它的返回值为 0,说明这个元素在集合中已经存在了,所以再次插入就会失败。
2.5 有序集合
最后一种数据对象是有序集合,它跟集合一样,不允许存在重复的元素,而且它还提供了一个 score 字段,使得它可以通过我们赋予它的 score 值来排序,比如我现在想创建一个关于长跑的实时排行榜,排行榜显示了各个选手距离终点的距离,如下:
在这里,我先通过 ZADD 命令向 scoreboard 里插入了三个选手的距离及名称,然后不断通过 ZADD 命令来更新各个选手的距离,最后通过 ZRANGE 命令打印出所有选手的名称及距离。在这里有一点需要注意的是,虽然在更新各个选手的距离时的 ZADD 返回的是 0,但是选手的距离还是会改变。