Redis 简介
(一) NoSQL 简介
1. 数据库应用的演变历程
- 单机数据库时代
一个应用,一个数据库实例 - Memcached 时代
- 读写分离时代
- 分表分库时代(集群)
- nosql 时代
2. NoSQL 数据库
NoSQL = Not Only SQL(不仅仅是SQL) ,泛指 non-relational (非关系型数据库)。今天随着互联网 web2.0 网站的兴起,比如谷歌或 Facebook 每天为他们的用户收集万亿比特的数据,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展,就是一个数据量超大。传统的 SQL 语句库不再适应这些应用了。NoSQL 数据库是为了解决大规模数据集合多重数据种类带来的挑战,特别是超大规模数据的存储。
NoSQL 数据库的一个显著特点就是去掉了关系数据库的关系型特性,数据之间一旦没有关系,使得扩展性、读写性能都大大提高。
3. SQL 和 NoSQL
(1) 关系型数据库
关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。
主要代表有:SQL Server、Oracle、PostgreSQL、MySQL、DB2、SQLite、...
(2) 非关系型数据库
非关系型数据库彻底改变底层存储机制。不再采用关系数据模型,而是采用聚合数据结构存储数据。
主要代表有:Redis、mongoDB、HBase、....
聚合模型---把一组相关联的数据作为一个整体进行存储和管理:K-V键值对、列簇、图表模型等。
Redis 采用的是 K-V 模型存储数据的。
存储示例:
{
"student": {
"id": 1001,
"name": "zhangsan",
"addresses": {"city":"haikou","street":"qiongshanqu"},
"courses":[
{
"id":01,
"name":"python"
},
{
"id":02,
"name":"flask"
},
]
}
}
(3) 两者间的关系
NoSQL
和 传统的关系型数据库
不是排斥和取代的关系,在一个分布式应用中往往是结合使用的。复杂的互联网应用通常都是多数据源、多数据类型,应该根据数据的使用情况和特点,存放在合适的数据库中。
(二) Redis
1. Redis 简介
Reids(Remote Dictionary Server 远程字典服务器),是一个用 C 语言编写的、开源的、基于内存运行并支持持久化的、高性能的 NoSQL 数据库。也是当前热门的 NoSQL 数据库之一。Redis 中的数据大部分时间都是存储内存中的,适合存储频繁访问、数据量比较小的数据。
Redis 是一种数据库。能够存储数据、管理数据的一种软件。
2. Redis 的特点
支持数据持久化
Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。支持多种数据结构
Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list、set、zset、hash 等数据结构的存储。支持数据备份
Redis 支持数据的备份,即 master-slave 模式的数据备份。
3. Redis 的安装
关于 Redis 在 windows 或 linux 上的安装,请参照:
Redis 安装
关于使用 Docker 安装并启动 Redis,请参照:
使用Docker安装并启动Redis
一般来说,安装完成后的 Redis 会有这么几个可执行文件:
redis-server
redis 的服务器端redis-cli
redis 的客户端redis-benchmark
测试 redis 服务的性能redis-check-aof -> redis-server
redis-check-rdb -> redis-server
redis-sentinel -> redis-server
4. 启动 Redis 服务
- 前台启动
在任何目录下执行redis-server
- 后台启动
在任何目录下执行redis-server &
- 启动redis服务时,指定配置文件:
redis-server redis.conf &
5. 关闭 Redis 服务
- 通过
kill
命令:
先使用ps -ef|grep redis
查看运行进程的 pid,然后使用kill pid
或kill -9 pid
命令关闭,这种不会考虑当前应用是否有数据正在执行操作,直接就关闭应用。 - 通过
redis-cli
命令关闭:
使用 redis 客户端关闭,向服务器发出关闭命令,任意目录下执行指令redis-cli shutdown
,推荐使用这种方式,redis 先完成数据操作,然后再关闭
6. redis 的客户端
Redis 客户端是一个程序,通过网络连接到 Redis 服务器,从而实现跟 Redis 服务器的交互。
Redis 客户端发送命令,同时显示 Redis 服务器的处理结果。
(1) 命令行客户端
redis-cli(Redis Command Line Interface)是 Redis 自带的基于命令行的 Redis 客户端,用于与服务端交互,我们可以使用该客户端来执行 redis 的各种命令。(类似于 MySQL 的客户端一样。)
启动 redis
客户端:
- 默认连接
执行redis-cli
命令,默认连接 127.0.0.1(本机) 的 6379 端口上的 redis 服务。 - 指定端口号
执行redis-cli -p 端口号
命令,连接 127.0.0.1(本机) 的指定端口上的 redis 服务。 - 指定主机和端口号
执行redis-cli -h ip地址 -p 端口
命令,连接指定 ip 主机上的指定端口的 redis 服务。
退出客户端:
- 在客户端执行命令:
exit
或者quit
(2) 可视化界面的客户端
使用的可视化工具 AnotherRedisDesktopManager
7. redis 的基本知识
redis 中数据库个数相关:
- Redis 默认使用
16
个库,从0
到15
,使用时通过编号来使用数据库;也可以通过配置文件,指定redis
自动创建的数据库个数,在redis.conf
文件中默认为databases 16
,理论上可以配置无限多个。 - Redis 的库和关系型数据库中的数据库实例类似,但又有一些不同,比如 redis 中各个库不能自定义命名,只能用序号表示;redis 中的数据库实例只能由 redis 服务来创建和维护,开发人员不能修改和自行创建数据库实例。
- redis 中各个库不是完全独立的,使用时最好一个应用使用一个 redis 实例,不建议一个 redis 实例中保存多个应用的数据。redis 的每一个数据库实例本身占用的存储空间是很少的,所以也不造成存储空间的太多浪费。
命令相关:
- 测试 redis 服务的性能
使用 redis 的可执行文件redis-benchmark
- 查看 redis 服务是否正常运行:
在redis-cli
客户端中,输入ping
,如果 redis 服务正常运行,则会返回PONG
- 查看 redis 服务器的统计信息:
使用命令info
可以查看 redis 服务的所有统计信息
使用命令info [信息段]
可以查看 redis 服务器的指定的统计信息,如:info server
- 查看当前数据库实例中所有 key 的数量
使用命令dbsize
,将返回当前数据库的 key 的数量。 - 查看当前数据库实例中所有的 key
使用命令keys *
- 清空数据库实例
使用命令flushdb
- 清空所有的数据库实例
使用命令flushall
- 查看 redis 中所有的配置信息
使用命令config get *
获取运行中Redis服务器的配置参数, 获取全部配置可以使用*
。参数信息来自redis.conf
文件的内容。 - 查看 redis 中的指定的配置信息
使用命令config get parameter
,例如:获取数据库个数config get databases
;获取端口号config get port
- 切换 Redis 库命令
默认情况下,redis 客户端连接的是编号是0
的数据库实例;可以使用select index
切换数据库实例。