5分钟快速认识 Redis
本文内容主要通过阅读《Redis 入门指南》总结,感觉不错,适合新手阅读。
认识
Redis 是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求。
Redis,全称 Remote Dictionary Server,以字典结构存储数据,并允许其他应用通过 TCP 协议读写字典中的内容。
Redis 字典中的键值支持的数据类型如下:
- 字符串
- 散列
- 列表
- 集合
- 有序集合
优势
-
存储结构
Redis 字典结构的存储方式和对多种键值数据类型的支持使开发者可以将程序中的数据直接映射到 Redis 中,数据在 Redis 中的存储形式和在程序中的存储方式非常相近。
-
数据操作
对不同的数据类型提供了非常方便的操作方式。(如进行交集、并集等集合运算操作)
-
存储方式
Redis 数据库中的所有数据都存储在内存中,读写速度更快。
Redis 提供了对持久化的支持,可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务。
开始
安装(Mac OS)
$ brew install redis
启动
# 默认端口 6379
$ redis-server
# 自定义端口
$ redis-server --port 6380
注:另可通过初始化脚本启动 Redis,可以随系统自动运行,适合在生产环境使用这种方式。
打开命令行客户端
$ redis-cli
停止
由于 Redis 可能正在将内存的数据同步到硬盘,强行停止可能导致数据丢失。正确停止方式:
$ redis-cli SHUTDOWN
使用命令行客户端
使用 redis-cli
有两种方式:
- 将命令作为
redis-cli
的参数执行 - 不带参数运行
redis-cli
,进入交互模式
参数模式
-
自定义地址和端口进行连接
$ redis-cli -h 127.0.0.1 -p 6379
-
测试客户端与 Redis 的连接是否正常,正常回复 PONG
$ redis-cli PING PONG
-
停止 Redis
$ redis-cli SHUTDOWN
交互模式
直接无参输入 redis-cli
即可进入交互模式。
$ redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> ECHO hi
"hi"
执行命令的返回值
命令的返回值有 5 种类型:
-
状态回复(status reply)
最简单的一种回复。比如回复 OK,回复 PONG ...
-
错误回复(error reply)
当出现命令不存在或命令格式有错误等情况时,会返回错误回复。以
(error)
开头。(error) ...
-
整数回复(integer reply)
Redis 没有整数类型,但是提供了一些用于整数操作的命令,会返回整数。以
(integer)
开头。(integer) 1
-
字符串回复(bulk reply)
最常见。当请求一个字符串类型键的键值或一个其他类型键中的某个元素时就会得到一个字符串回复。
127.0.0.1:6379> GET foo "1"
当请求的键值不存在会得到一个空结果,显示
(nil)
。127.0.0.1:6379> GET bar (nil)
-
多行字符串回复(multi-bulk reply)
当请求一个非字符串类型键的元素列表时就会收到多行字符串回复。多行字符串回复中的每行字符串都以一个序号开头,如:
127.0.0.1:6379> KEYS * 1)"bar" 2)"foo"
配置 Redis
通过命令行传参可以简单设置一些配置,还可以通过配置文件来设置配置。
启用配置文件的方法:(将配置文件路径作为参数)
$ redis-server /path/to/redis.conf
多数据库(多字典)
一个 Redis 实例提供多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。
相当于其他数据库创建过个数据库的概念。可以将其中的每个字典理解成一个独立的数据库。
是否可以命名?
不可以。
-
命令规则:以一个从 0 开始的递增数字命名。
-
默认数量:16 个。
-
切换数据库:使用
SELECT
命令127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]>
注意。多个数据库之间并不是完全隔离,比如 FLUSHALL
命令可以清空一个 Redis 实例中所有数据库的数据。
总结。这些数据库更像是一种命名空间,不适宜存储不同应用程序的数据。比如可以使用 0 号数据库存储某个应用生产环境中的数据,使用 1 号数据库存储测试环境中的数据,但不适宜使用 0 号数据库存储 A 应用的数据而使用 1 号数据库存储 B 应用的数据,不同的应用应该使用不同的Redis实例存储数据。(由于Redis非常轻量级,一个空Redis实例占用的内存只有1MB左右,所以不用担心多个Redis实例会额外占用很多内存。)
参考
李子骅, 《Redis 入门指南》