第一章 简介
1.1 历史与发展
曾听到过的一句经典名言:“世界上有一个伟大的东西叫百度,百度能教会你许多,学会百度是一种能力与技巧”
1.2 Redis特性
1.2.1 存储结构
Redis是REmote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。到目前为止Redis支持的键值数据类型如下:
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
字典结构: 字典,在其他语言中也称
map
,使用键-值对(key-value)
存储,查找速度快。
字典是无序的对象集合,元素是通过键来存取的,而不是通过索引值存取。
字典是可变数据类型通俗易懂的讲就是:你们使用微信小程序访问接口时,传输数据给后台给data,那个data就是字典结构
1.2.2 内存存储与持久化
Redis数据库中的所有数据都存储在内存中。由于内存读写速度远快于硬盘,因此Redis在性能上对比其他硬盘存储的数据库有非常明显的优势。在一台普通的笔记本电脑上,Redis可以再一秒内读写超过10W个键值
那么有一个问题,程序退出后,内存的数据会丢失,那这样如何使得Redis持久化呢?
Redis可以在内存中的数据异步写入到硬盘中,同时不影响继续提高服务
1.2.3 功能丰富
Redis虽然是基于数据库开发的,但是由于提高了丰富的功能,越来越多的人将其用做缓存、队列系统等。
- Redis可以设置生存时间(Time To Live, TTL), 生存时间到期后键会自动被删除,这一功能配合出色的性能让Redis可以作为缓存系统使用
- 作为缓存系统,Redis可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定的规则自动淘汰不需要的键
- Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易地实现一个高性能的优先级队列
1.2.4 简单稳定
Redis直观的存储结构使得通过程序与Redis交互十分简单。在Redis中使用命令来读写数据,命令语句之于Redis就相当于SQL语言之于关系数据库
eg: 在关系数据库中要获取posts表内id为1的记录的title字段的值
SQL: SELECT title FROM posts WHERE id = 1 LIMIT 1
Redis: HGET post:1 title
此外,Redis提供了十几种不同编程语言的客户端库,这些库很好的封装了Redis的命令,使得在程序中与Redis进行交互变得容易
第二章 准备
2.1 安装Redis
2.1.1 在POSIX系统中安装
曾听到过的一句经典名言:“世界上有一个伟大的东西叫百度,百度能教会你许多,学会百度是一种能力与技巧”
2.1.2 在OS X系统中安装
曾听到过的一句经典名言:“世界上有一个伟大的东西叫百度,百度能教会你许多,学会百度是一种能力与技巧”
2.1.3 在Windows安装
安装包和安装教程即可完成,操作很简单
然后
曾听到过的一句经典名言:“世界上有一个伟大的东西叫百度,百度能教会你许多,学会百度是一种能力与技巧”
2.2 启动和停止Redis
命 令 | 说 明 |
---|---|
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试工具 |
redis-check-aof | AOF文件修复工具 |
redis-check-dump | RDB文件检查工具 |
redis-sentinel | Sentinel服务器(2.8版以后) |
注: redis-cli是Redis自带的Redis命令行客户端,一般都用它进行学习和测试
2.2.1 启动Redis
启动Redis有直接启动和通过初始化脚本启动两种方式,分别使用与开发环境和生产环境
-
直接启动
直接运行redis-server即可启动Redis
-
通过初始化脚本启动Redis
曾听到过的一句经典名言:“世界上有一个伟大的东西叫百度,百度能教会你许多,学会百度是一种能力与技巧”
2.2.2 停止Redis
考虑到一个问题:Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失。正确停止Redis的方式是使用命令
redis-cli SHUTDOWN
执行命令,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出
2.3 Redis命令行客户端
嘿嘿~ 这在我们学习和测试中非常重要
2.3.1 发送命令
打开cmd输入命令,见图所示
2.3.2 命令返回值
执行一条命令后,我们往往都会关心命令的返回值
-
状态回复
是最简单的一种回复, 即状态回复直接显示状态信息
-
错误回复
当出现命令不存在或命令格式有错误等情况时,Redis会返回错误回复(error reply)。错误回复以(error)开头,并在后面跟上错误信息
-
整数回复
Redis,没有整数类型,但是提供了一些用于整数操作的命令,如递增键值的INCR命令会以整数形式返回递增后的键值。除此外,一些其他命令也很返回整数,例如获取当前数据库中键的数量时
-
字符串回复
-
多行字符串回复
下面一张图,涵盖了上面五种回复
2.4 配置
设置端口号、是否开启持久化、日志级别等
曾听到过的一句经典名言:“世界上有一个伟大的东西叫百度,百度能教会你许多,学会百度是一种能力与技巧”
2.5 多数据库
通过前面的学习Redis是一个字典结构的存储服务器,而实际上Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。
Redis默认支持16个数据库,每个数据库对外都是一个从0开始的递增数字命名。可以通过修改配置来修改这一数字。客户端与Redis建立连接后自动选择0号数据库
需要注意的几点:
- 每个数据库都是以编号制命名的,开发者必须自己纪录哪些数据库存储了哪些数据
- 多个数据库之间并不是完全隔离的,比如FlUSHALL命令可以情况一个Redis实例中所有数据库中的数据,FLUSHDB情况当前数据库中的数据
- Redis非常轻量级,一个空的Redis实例占用的内存只有1MB左右,所有不用担心多个Redis实例会额外占用很多内存