Skip to content

第21讲:Redi高性能缓存数据存储 ​

本课时我们主要讲解数据存储 Redis 的知识,我们先来看下 Redis 到底是什么。

Redis 基础知识 ​


在 redis 官网上会有这样一句话,翻译过来就是 Redis 是开源的内存数据结构存储,也就是它是一种高效的存储数据结构的存储,可以用来作数据库,也可以用来作缓存。


和其他数据库相比,Redis 最大的特点就是 in-memory 所以性能会非常的高,它的数据都是在内存中进行处理,基于这一点很多公司都会用它做一些高性能的数据存储,Redis 通常情况下都是一个数据中转,数据存储到一定阶段就会从 Redis 中提取数据再存入到其他的关系型数据库进行长期保存,所以 Redis 是一个很好的用来存储中间数据的产品,了解了 Redis 的基本概念,我们接下来看 Redis 怎么去用。


首先,Redis 在官网上有一个演练环境叫 try.redis.io,通过这个网址可以利用它的在线环境进行演练,并了解如何使用 Redis 的一些基础指令,我们可以打开官网,里面有一个叫 Try it 的交互式教程,这个教程可以带你了解整个 Redis 的基础指令。


还有 Redis 支持很多的数据结构,比如字符串、列表、词典,也包括一些集合和排序等各种各样的数据结构。

部署 Redis ​

我们接下来看如何部署自己的 Redis,通常情况下部署 Redis 都是使用 Docker,现在基本上所有主流的产品都是使用 Docker 来进行部署的,用 Docker 部署 Redis 也非常简单。


docker run --name redis -p 6379:6379 -d redis

使用 docker run 命令就可轻松部署 Redis,其中 --name 是命名,-p 后面是开放的端口,它默认在 docker 内开放 6379 端口,然后就可以启动一个最简单的 Redis 服务了。


docker run -it --net=host --rm redis redis-cli

然后是客户端连接,我们可以使用 Docker 或是原生的 Redis 搭建客户端,除了使用 Docker 部署之外,Python、Shell 也有一些对应的客户端,你可以使用这些客户端工具去连接,接下来我们具体来看怎么去搭建 Redis。


docker pull redis

首先,我们使用 docker pull 命令拉取 Redis 的最新版本。


docker run --name redis -p 6379:6379 redis

然后,我们使用 run 命令来启动一个 Redis,-p 后面是默认开放的端口,最后加一个 Redis 的镜像。



这样它就会创建一个 Redis 服务了,通过这样的方式我们就创建了一个 Redis 服务,你可以看到前台已经开启了 6379 这个端口。这里我们没有把它放到后台而是放到了前台,你可以使用 docker的-d 参数实现后台启动。

连接 Redis ​

docker run -it --net=host --rm redis redis-cli

那么怎么去连接 Redis 呢,我们可以使用一行 Docker 命令,和前面一样需要使用 redis-cli 客户端程序进行连接,因为我们要连接 6379 端口,你可以使用 --net=host,或者说你可以使用本地原生的客户端,还可以使用一些其他的第三方的工具,或是使用 link 命令,Docker 支持 link 命令把另外一个容器进行连接。


docker exec -it redis bash

假如你已经连接了服务器,可以使用第一种方法连接到 Redis 的内部,这个时候使用 redis-cli 就可以连接 Redis。


set name seveniruby

比如说我们使用 set 为 name 进行赋值。


get name

然后使用 get 命令获取 name,还可以使用 type 或 del 对 name 进行操作。


除了这个方法之外,还有一个方法是我们的 Redis Python 客户端,在 Redis 官网上可以看到提供了很多的客户端连接工具,我们现在已经完成了部署,那么怎么去连接呢,你可以从官网的 Clients 里面查找各个语言的客户端,比如 Python语言,Python 语言下有很多的库,你可以自行查找自己想要使用的库,比如它推荐使用 redis-py,我们就可以直接使用 redis-py 来进行连接。


我们可以使用 pip 命名了来安装它,安装完成之后使用 import 导入就可以了,接下来我们使用一个简单的方法来快速的进行安装。


pip install redis

我们现在来简单的安装客户端,使用 pip install redis 命令来对其进行安装。


如果你想使用 Python 客户端可以直接使用 Python 的 API,为了更好地去使用它,我们打开我们的 PyCharm。


我们借助 PyCharm 里面的 Python Console 去连接它,这样写代码会更方便一些。



这里面有一个 Python 的客户端,然后我们使用 import 导入 Redis,它提示我们还没有安装,那么我们需要从当前的环境里面去安装它,还是使用 pip install redis 命令,再去 import 的时候就已经可以了。


r=redis.Redis

它的命令是这样的,我们以 r=redis.Redis 为例,然后在这里你可以填写 host 和 port 的两个默认值,因为它默认连接本地,所以什么都不加也是可以的,这样就创建出来一个 Redis 实例,接下来我们就可以使用 r 来完成所有的命令,举个例子:


r.get("name")

你可以使用 ge t命令获取内容。


r.set("name","seveniruby")

也可以使用 set 命令将 seveniruby 赋值给 name,然后我们再次 get 就可以获取到 seveniruby,之前因为没有赋值所以获取的 name 为空,这就是一个 Python 的客户端,你可以通过 Python 或是 Java 的客户端连接 Redis,实现编程上的一些数据存储。

Redis 数据结构 ​

了解了几个经典的连接 Redis 的方法之后,我们接下来看 Redis 的数据结构,它有 String、Sets、Sorted Sets、List、Hashs、Bitmap 这几种数据结构,这里给你介绍几个常用的类型,比如 String、List、Hashs。


和 Python 的数据结构整体上是一致的,比如 String,前面我们已经演示过了,通过 set 命令可以给名字一个赋值,也可以通过 get 命令获取这个值。


还有一个是列表,列表你可以使用 push 命令,push 命令又分为两种,一种是 rpush 从尾部进行追加,还有一种是 lpush 从头部进行追加,接下来给你演示下怎么使用它。


rpush name-list a

首先我们使用 Docker 的 redis-cli,我们 rpush 一个 name-list 并追加一个字符 a,然后再追加一个 b,这个时候其实名字就已经有了。


type name-list

然后,我们使用 type name-list,你可以发现列表的类型是 list。


lpush name-list 1

然后我们使用 lpush 从头部追加一个 1。



然后使用 LRANGE 命令,LRANGE 命令可以给出一个列表的范围,这样就可以看到 1 是第一个数据,因为我们使用 lpush 从头部进行的追加,剩下的两个是按照尾部追加的顺序,这就是列表的简单使用。


还有一个在 Python 中经常使用的是词典,在 Redis 中叫作 HashMap,HashMap 可以给定一个变量的名字,然后指定它的具体的值,以 key-valve 的形式进行存储,创建完 HashMap 后你可以使用 HGET 命令获取里面的数据内容,如果你想取出所有数据使用 HGETALL 命令,这个用法也非常简单,我们给你演示下。


HMSET name:age name seveniruby age 18

你可以输入这样的命令,前面是 key 和 valve 的名字,后面是具体的值。


HGET name:age age

然后你就可以使用 HGET 命令获取该值。


HGETALL name:age

还可以使用 HGETALL 命令获取所有的值,这就是简单的 HashMap 的使用。