1. Redis概述
1.1 Redis历史
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便开始对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。
不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天
Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体
1.2 什么是Redis
sql
Redis(==RE==mote ==D== ==I==ctionary ==S==erver 远程字典服务器),是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的键值对(Key-Value)数据库分布式数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一, 也被人们称为数据结构服务器。
Redis(==RE==mote ==D== ==I==ctionary ==S==erver 远程字典服务器),是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的键值对 (Key-Value)数据库分布式数据库,基于内存运行,并支持持久化的NoSQL数据库 ,是当前最热门的NoSQL数据库之一, 也被人们称为数据结构服务器。
1.3 Redis能干什么
配合关系型数据库做高速缓存,存储高频次,热门访问的数据,降低数据库IO
-
内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
-
互联网应用功能:

1.4 Redis的特点
性能极高:Redis 读的速度是 110000 次 /s,写的速度是 81000 次 /s 。
丰富的数据类型:Redis 支持二进制案例的 String,List,Hash,Set及 ZSet 数据类型操作。
原子性:Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。
数据持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
其他特性:Redis 还支持 publish/subscribe 通知,key 过期等特性。
Redis 提供的API支持:C、C++、C#、Clojure、Java、JavaScript、Lua、PHP、Python、Ruby、Go、Scala、Perl等多种语言。
DB-Engines 数据库排名
2. Windows_msi版本安装
2.1 概述
-
注意:Redis官方没有提供Redis的window版本,只提供了linux版本,所以在企业中只能使用linux版本安装【参考后面部分】,但是在学习阶段,我们在window上使用确实方便。
-
2017年开始,程序员tporadowski,开始了window上Redis的维护,从4.0开始,目前已经到5.0版本,建议下载这个版本:
官方地址:
https://github.com/tporadowski/redis/releases
- 这种安装方式没有什么可说的,下一步,下一步,直至完成,完成后,Redis就会被注册成window的服务,在Redis主目录下,使用redis-cli,即可连接Redis服务器。
2.2 过程

2.3 使用
- 安装后redis已经自动注册为服务,并启动

- 打开redis客户端软件"C:\Program Files\Redis\redis-cli.exe" 测试

- 命令提示符中输入以下命令进行登录
sql
C:\Users\Administrator>redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
3. Redis的Linux源码安装
3.1 准备安装环境
- 由于 Redis 是基于 C 语言编写的,因此首先需要安装 Redis 所需要的依赖:
sql
[root@server ~]# yum install -y gcc tcl gcc-c++ make
[root@server ~]# cd /usr/local/src
- 下载:定位Downloads | Redis 网页,选择redis-stable.tar稳定版本(Redis 7.2.5)

3.2 解压安装文件
sql
[root@server ~]# cd /usr/local/src
[root@server src]# tar xvf redis-stable.tar.gz
[root@server src]# ls
redis-stable redis-stable.tar.gz
[root@server src]# cd redis-stable # 进入安装目录
3.3 运行编译安装命令
sql
[root@server redis-stable]# make && make install
3.4 安装之后
- 默认的安装路径
sql
[root@server redis-stable]# cd /usr/local/bin # 默认安装路径
[root@server bin]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
- 文件作用
bash
- redis-benchmark:性能测试工具,可以在自己电脑上运行来查看性能
- redis-check-aof:修复有问题的AOF文件
- redis-check-rdb:持久化RDB文件检测,当RDB文件存在问题时,可以使用该工具进行检测与恢复
- ==redis-cli:客户端启动脚本==
- redis-sentinel:哨兵启动脚本
- ==redis-server: 服务端启动脚本==
3.5 前台启动
- 命令
sql
[root@server redis-stable]# redis-server
- 查看进程
sql
# 需要在xshell中新建一个连接
[root@server ~]# ps -ef | grep redis
root 35897 1760 0 09:33 pts/0 00:00:00 redis-server *:6379
root 35948 35911 0 09:36 pts/1 00:00:00 grep --color=auto redis
- 关闭Redis服务
由于在前台执行,关闭当前窗口或ctrl+c就会结束
可以在另一个终端窗口执行
sql
[root@server ~]# redis-cli shutdown # 注意:在另一个终端窗口执行
# 或者
[root@server ~]# kill -9 redis的进程号 # 进程号可在执行终端窗口查看也可执行ps命令
- 注意1:可以在任意目录执行redis-server启动脚本,因为其存储目录也写入到PATH变量中,执行命令时会自动查询文件所在位置:/usr/local/bin
sql
[root@server ~]# c
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
- 注意2:这里直接执行
redis-server
启动的 Redis 服务,是在前台直接运行的(效果如上图),也就是说,执行完该命令后,如果关闭当前会话,则Redis服务也随即关闭,因此这种方式不推荐使用。正常情况下,启动 Redis 服务需要从后台启动。
3.6 后台启动
- 拷贝配置文件到 /etc/redis目录下
sql
[root@server ~]# mkdir /etc/redis
[root@server ~]# cp /usr/local/src/redis-stable/redis.conf /etc/redis
- 修改配置文件
sql
[root@server ~]# vim /etc/redis/redis.conf # 修改309行为yes

- 保存退出后,执行如下命令来启动服务。
sql
[root@server ~]# sysctl vm.overcommit_memory=1 # 启动内存超量使用,否则出警告
[root@server ~]# redis-server /etc/redis/redis.conf
[root@server ~]# ps -ef | grep redis
[root@server bin]# redis-server -v
Redis server v=7.2.5 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=67f5ef9d815a0c5c
3.7 验证服务
可以使用 redis-cli 脚本来连接 redis 服务。
sql
[root@server ~]# redis-cli -p 6379
127.0.0.1:6379> help
127.0.0.1:6379> ping # 测试ping
PONG # 表示连接成功
3.8 关闭服务
- 在redis终端执行
sql
127.0.0.1:6379> shutdown
not connected> exit
# 查看进程
[root@server ~]# ps -ef | grep redis
root 36025 1760 0 09:58 pts/0 00:00:00 grep --color=auto redis
- 在命令终端执行
sql
# 先启动服务
[root@server ~]# redis-server /etc/redis/redis.conf
[root@server ~]# redis-cli shutdown # 命令行中关闭服务
[root@server ~]# ps -ef | grep redis # 查看进程是否存在
root 36037 1760 0 10:00 pts/0 00:00:00 grep --color=auto redis
- 注意:如出现下列报错,说明没有启动服务
sql
[root@server ~]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
3.9 开机启动
-
redis 没有开机启动功能,需要编写脚本来实现这个功能
-
方法
sql
[root@server ~]# cd /etc/systemd/system
[root@server system]# vim redis.service # 添加如下内容:
[Unit]
# 服务描述
Description=Redis Server Manager
# 服务类别
After=network.target
[Service]
# 后台运行的形式
Type=forking
# 服务命令
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
# 给服务分配独立的临时空间
PrivateTmp=true
[Install]
# 设置为多用户、系统运行级别为3
WantedBy=multi-user.target
- 然后执行如下命令:
sql
[root@server ~]# systemctl start redis.service # 启动redis服务
[root@server ~]# systemctl enable redis.service # 设置开机自启动
[root@server ~]# systemctl status redis # 查看状态
# 注意:若修改了启动配置文件且服务已启动需要重启服务时必须先重载启动配置文件:
[root@server ~]# systemctl daemon-reload
4. 相关知识
redis 默认的端口号是 6379
,是由手机键盘字母MERZ的位置决定的。MERZ在Antirez的朋友圈语言中是"愚蠢和傻X"的代名词,它源于意大利广告女郎Alessia Merz在电视节目上说了一堆愚蠢的话,redis之父对她有"特殊"印象,就给她弄成端口号了

-
redis的Windows版本配置文件有2个:
-
redis.windows-service.conf
-
redis.windows.conf
-
区别:redis.windows-service.conf中开启了日志功能。
-
默认使用redis.windows-service.conf
-
-
redis 默认有 16 个数据库,类似数组下标从 0 开始,初始默认使用 0 号数据库。
sql
C:\Program Files\Redis\redis.windows-service.conf
databases 16
- 可以使用
select <dbid>
命令来切换数据库
sql
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 0
OK
-
使用**
dbsize
** 命令来查看当前数据库的 key 的数量 -
使用
flushdb
命令来清空当前数据库中所有数据 -
使用
flushall
命令来删除所有数据库中的数据(通杀全库),最好配置文件中禁用 -
Redis是单线程为什么效率高、速度快
-
redis是单线程:
-
redis将所有的数据全部放在内存中,使用单线程去操作,省去了很多CPU上下文切换线程的时间,效率最高
-
由于单线程无法发挥多核CPU性能,可以通过在单机开多个Redis实例来完善
-
-
redis采用多路IO复用技术
-
多路:指的是多个socket (网络) 连接
-
复用:指的是复用一个线程
-
Redis使用的是非阻塞IO,IO多路复用使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争
-
-
总结:复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存中的操作不会成为这里的性能瓶颈),主要以上两点造就了Redis具有很高的吞吐量
-