高性能缓存数据库 Redis 入门篇

Posted by 暮夏有五 on 2021-01-24
Estimated Reading Time 6 Minutes
Words 1.6k In Total
Viewed Times

什么是 Redis


Redis 是一个使用 ANSI C 编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。从 2015 年 6 月开始,Redis 的开发由 Redis Labs 赞助,而 2013 年 5 月至 2015 年 6 月期间,其开发由 Pivotal 赞助。在 2013 年 5 月之前,其开发由 VMware 赞助。根据月度排行网站 DB-Engines.com 的数据显示,Redis是 最流行的键值对存储数据库。

特点

  1. Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,不会造成数据丢失
  2. Redis 支持五种不同的数据结构类型之间的映射,包括简单的 key/value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储
  3. Redis 支持 master-slave 模式的数据备份

功能

  1. 内存存储和持久化:redis 支持异步将内存中的数据写到硬盘上,在持久化的同时不影响继续服务
  2. 取最新N个数据的操作,如:可以将最新的 10 条评论的 ID 放在 Redis 的 List 集合里面
  3. 数据可以设置过期时间
  4. 自带发布、订阅消息系统
  5. 定时器、计数器

Redis 安装


Windows 版 Redis 的安装,整体来说还是非常简单的,网上也有很多教程,考虑到 Redis 的大部分使用场景都是在 Linux 上,因此这里我对 Windows 上的安装不做介绍,小伙伴们有兴趣可以自行搜索,下面我们主要来看下 Linux 上怎么安装 Redis 。

  1. 首先下载 Redis,下载地址 https://redis.io/,下载后获得 redis-4.0.8.tar.gz 后将它放入我们的 Linux 目录 /opt

  2. 在 /opt 目录下对文件进行解压,解压命令: tar -zxvf redis-4.0.8.tar.gz

  3. 解压完成后出现文件夹 redis-4.0.8,进入到该目录中

  4. redis-4.0.8 目录下执行 make 命令进行编译

  5. 如果 make 完成后继续执行 make install 进行安装,至此,我们的 redis 就算安装成功了

  6. 我们启动之前,需要先做一个简单的配置:修改 redis.conf 文件,将里面的 daemonize no 改成 yes,让服务在后台启动

  7. 启动,通过 redis-server redis.conf 命令启动 redis

然后我们可以通过 redis-cli 命令进入到控制台,然后通过 ping 命令进行连通性测试,如果看到 pong ,表示连接成功了。通过 shutdown 命令我们可以关闭实例。

Redis 的五种数据类型简介


redis 中的数据都是以 key/value 的形式存储的,五大数据类型主要是指 value 的数据类型,包含如下五种:

STRING

STRING 是 redis 中最基本的数据类型,redis 中的 STRING 类型是二进制安全的,即它可以包含任何数据,比如一个序列化的对象甚至一个 jpg 图片,要注意的是 redis 中的字符串大小上限是 512M 。

LIST

LIST 是一个简单的字符串列表,按照插入顺序进行排序,我们可以从 LIST 的头部 (LEFT) 或者尾部 (RIGHT) 插入一个元素,也可以从 LIST 的头部(LEFT)或者尾部 (RIGHT) 弹出一个元素。

HASH

HASH 类似于 Java 中的 Map ,是一个键值对集合,在 redis 中可以用来存储对象。

SET

SET 是 STRING 类型的无序集合,不同于 LIST ,SET 中的元素不可以重复。

ZSET

ZSET 和 SET 一样,也是 STRING 类型的元素的集合,不同的是 ZSET 中的每个元素都会关联一个 double 类型的分数,ZSET 中的成员都是唯一的,但是所关联的分数可以重复。

接下来我们就来看看这五种数据类型要怎么操作。

key 相关的命令


由于五大数据类型的数据结构本身有差异,因此对应的命令也会不同,但是有一些命令不管对于哪种数据类型都是存在的,我们今天就先来看看这样一些特殊的命令。

首先通过 redis-server redis.conf 命令启动 redi s,再通过 redis-cli 命令进入到控制台中。可以通过 set 命令插入一条记录:

1
2
127.0.0.1:6379> set k1 v1
OK

DEL 命令

看到 OK 表示插入成功。通过 DEL 命令我们可以删除一个已经存在的 key,如下:

1
2
127.0.0.1:6379> DEL k1
(integer) 1

看到 (integer) 1 表示数据已经删除成功。

DUMP 命令

DUMP 命令可以序列化给定的 key,并返回序列化之后的值:

1
2
127.0.0.1:6379> DUMP k1
"\x00\x02v1\b\x00\xe6\xc8\\\xe1bI\xf3c"

EXISTS 命令

EXISTS 命令用来检测一个给定的 key 是否存在,如下:

1
2
3
4
5
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379> EXISTS k2
(integer) 0
127.0.0.1:6379>

上面的运行结果表示 k1 存在而 k2 不存在。

TTL 命令

TTL 命令可以查看一个给定 key 的有效时间:

1
2
3
4
127.0.0.1:6379> TTL k1
(integer) -1
127.0.0.1:6379> TTL k2
(integer) -2

-2 表示 key 不存在或者已过期;-1 表示 key 存在并且没有设置过期时间(永久有效)。当然,我们可以通过下面的命令给 key 设置一个过期时间:

EXPIRE 命令

EXPIRE 命令可以给 key 设置有效期,在有效期过后,key 会被销毁。

1
2
3
4
5
127.0.0.1:6379> EXPIRE k1 30
(integer) 1
127.0.0.1:6379> TTL k1
(integer) 25
127.0.0.1:6379>

30 表示 30 秒,TTL k1 返回 25 表示这个 key 的有效期还剩 25 秒。

PERSIST 命令

PERSIST 命令表示移除一个 key 的过期时间,这样该 key 就永远不会过期:

1
2
3
4
5
6
7
8
127.0.0.1:6379> EXPIRE k1 60
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 57
127.0.0.1:6379> PERSIST k1
(integer) 1
127.0.0.1:6379> ttl k1
(integer) -1

PEXPIRE 命令

PEXPIRE 命令的功能和 EXPIRE 命令的功能基本一致,只不过这里设置的参数是毫秒:

1
2
127.0.0.1:6379> PEXPIRE k1 60000
(integer) 1

PTTL 命令

PTTL 命令和 TTL 命令基本一致,只不过 PTTL 返回的是毫秒数:

1
2
127.0.0.1:6379> PTTL k1
(integer) 25421

KEYS 命令

KEYS 命令可以获取满足给定模式的所有 key,比如:

1
2
3
4
127.0.0.1:6379> KEYS *
1) "k3"
2) "k2"
3) "k1"

KEYS * 表示获取所有的 KEY, * 也可以是一个正则表达式。

更多干货请移步:https://antoniopeng.com


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !