Redis概述
一、Redis是什么
Redis 全称Remote Dictionary Server(远程字典服务),是完全开源的,使用ANSI C语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案,作者是安特雷兹。
常见的内存型数据库,除 Redis 之外,还有 Oracle Berkeley DB(甲骨文旗下的一款产品)、SQlite(轻量级内存数据库)、Memcache(键值型分布式缓存数据库)、Altibase(基于内存的高性能数据库)。与其他内存型数据库相比,Redis 具有以下特点:
- Redis 可以将数据完全保存在内存中,也能通过磁盘实现数据的持久存储;
- Redis 支持丰富的数据类型,包括 string、list、set、zset、hash 等多种数据类型,因此它也被称为“数据结构服务器”;
- Redis 支持主从同步,即 master-slave 主从复制模式。数据可以从主服务器向任意数量的从服务器上同步,有效地保证数据的安全性;
- Redis 支持多种编程语言,包括 C、C++、Python、Java、PHP、Ruby、Lua 等语言。
与 SQL 型数据库截然不同,Redis 没有提供新建数据库的操作,因为它自带了 16 (0—15)个数据库(默认使用 0 库)。在同一个库中,key 是唯一存在的、不允许重复的,它就像一把“密钥”,只能打开一把“锁”。键值存储的本质就是使用 key 来标识 value,当想要检索 value 时,必须使用与 value 相对应的 key 进行查找。
Redis 数据库没有“表”的概念,它通过不同的数据类型来实现存储数据的需求,不同的数据类型能够适应不同的应用场景,从而满足开发者的需求
redis官网:http://redis.io/
redis官方文档:http://redis.io/documentation
安特雷兹GitHub:https://github.com/antirez
安特雷兹个人博客:http://antirez.com/latest/0
二、Redis的能做什么
Redis 的能实现的功能:
- 分布式缓存,挡在mysql数据库的一种保护机制
- 内存存储和持久化(RDB+AOF):redis支持异步将内存中的数据写到硬盘上,同时不影响其继续服务
- 高可用架构搭配:单机、主从、哨兵、集群
- 实现缓存穿透、击穿、雪崩
- 分布式锁的实现
- 队列功能,Reids提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。通过Reids的队列功能做购买限制。比如到节假日或者推广期间,进行一些活动,对用户购买行为进行限制,限制今天只能购买几次商品或者一段时间内只能购买一次。也比较适合适用。
- 实现排行榜和点赞功能,可实现如电商网站的月度销量排行榜、社交APP的礼物排行榜、小程序的投票排行榜等等。Redis提供的zset数据类型能够快速实现这些复杂的排行榜。
Redis 的优如下:
- 性能高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;
- 多用途: Redis 有很多的用途,比如可以用作缓存、消息队列、搭建 Redis 集群等;
- 命令输入提示:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;
- 可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。
三、Redis架构
Redis体系架构主要分为两个部分:
- Redis服务端
- Redis客户端
这个就类似于MySQL,客户端和服务端可以位于同一台计算机上,也可以位于不同的计算机上。服务端是整个架构的“大脑”,能够把数据存储到内存中,并且起到管理数据的作用。
三、Redis版本说明

Redis从发布至今,已经有十余年的时光了,一直遵循着自己的命名规则,历史版本下载地址:https://download.redis.io/releases/

截止2023年2月24日,目前Redis最新的版本是7.0.8,下面是对Redis7的一部分新特性说明:
- RedisFunctions:一种新的方式用于Redis server端脚本,它不同于以前版本支持的Lua脚本, Redis Functions可支持持久化,可复制,并且在节点重启之后可以直接从server端读取。
- 集群支持显示hostname,而不仅仅显示ip地址。
- 使用多个AOF文件降低了AOF重写期间的内存使用。
- 在Lua脚本中支持了Function的标志。
- 在AOF文件中增加了数据更新时间点的标识,使得用户可以恢复某一时间点的数据。
- Lua脚本支持RESP3 版本的并且可以通过redis.REDIS_VERSION, redis.REDIS_VERSION_NUM得到Redis的版本。
- 增加了对stream consumer组滞后的追踪和报告 。
- 增加了API以便于可以在functions和Lua脚本中明确地查看ACL。
四、Redis下载安装
下面的搭建基于centos7来完成,下载地址,https://download.redis.io/releases/ 以最新版本的redis7.0.8为例进行安装,这里要保证centos是64位,通过如下命令即可查询
getconf LONG_BIT
查询后结果如下:

4.1.安装gcc依赖
yum -y install gcc-c++
注意:gcc是linux下的一个编译程序,是C程序的编译工具。GCC(GNU Compiler Collection) 是 GNU(GNU's Not Unix) 计划提供的编译器家族,它能够支持 C, C++, Objective-C, Fortran, Java 和 Ada 等等程序设计语言前端,同时能够运行在 x86, x86-64, IA-64, PowerPC, SPARC和Alpha 等等几乎目前所有的硬件平台上。鉴于这些特征,以及 GCC 编译代码的高效性,使得 GCC 成为绝大多数自由软件开发编译的首选工具。虽然对于程序员们来说,编译器只是一个工具,除了开发和维护人员,很少有人关注编译器的发展,但是 GCC 的影响力是如此之大,它的性能提升甚至有望改善所有的自由软件的运行效率,同时它的内部结构的变化也体现出现代编译器发展的新特征。
4.2.下载获得redis-7.0.8.tar.gz后将它放入我们的Linux目录/opt

4.3.在/opt目录下解压redis

4.4.进入到redis-7.0.8目录下执行make命令
make && make install
执行后如下图所示表示成功:

4.5.查看默认安装目录:usr/local/bin
需要注意的是Linux下的/usr/local类似我们windows系统的C:\Program ,查看如下:

上图内容说明如下:
- redis-benchmark:性能测试工具,服务启动后运行该命令,看看自己本子性能如何
- redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
- redis-check-dump:修复有问题的dump.rdb文件
- redis-cli:客户端,操作入口
- redis-sentinel:redis集群使用
- redis-server:Redis服务器启动命令
4.6.将默认的redis.conf拷贝到自己定义好的一个路径下
这里复制到根目录的/myredis中,如下:
[root@bogon /]# cd /opt/redis-7.0.8 [root@bogon redis-7.0.8]# ls 00-RELEASENOTES CODE_OF_CONDUCT.md COPYING INSTALL MANIFESTO redis.conf runtest-cluster runtest-sentinel sentinel.conf tests utils BUGS CONTRIBUTING.md deps Makefile README.md runtest runtest-moduleapi SECURITY.md src TLS.md [root@bogon redis-7.0.8]# mkdir /myredis [root@bogon redis-7.0.8]# cp redis.conf /myredis/ [root@bogon redis-7.0.8]# ls
如下图所示:

4.7.修改/myredis目录下redis.conf配置文件做初始化设置
redis.conf配置文件,改完后重启后确保生效,一定需要重启,修改配置如下:
- 默认daemonize no 改为 daemonize yes ,设置允许后台启动
- 默认protected-mode yes 改为 protected-mode no,允许其他主机的客户端连接到Redis
- 默认bind 127.0.0.1 改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接
- 添加redis密码 改为 requirepass 你自己设置的密码
4.8.启动服务
在/usr/local/bin目录下运行redis-server,指定启用/myredis目录下的redis.conf文件:
redis-server /myredis/redis.conf
4.9.连接服务
这里指的是通过redis客户端连接服务端,需要注意redis的默认端口是6379,如果是默认端口,连接的时候不需要指定端口,-a指定密码,方式如下:
redis-cli -a 123456
如果不是默认端口,则需要通过-p参数指定端口:
redis-cli -a 123456 -p 6378
4.10.关闭连接
单实例关闭:
redis-cli -a 123456 shutdown
多实例关闭、指定端口关闭:
redis-cli -p 6379 shutdown
4.11.卸载
如果后期需要卸载,则只需要停止redis-server 服务,然后删除/usr/local/lib目录下与redis相关的文件
五.docker安装Redis
5.1.docker执行命令如下:
docker run \ --restart=always \ --log-opt max-size=100m \ --log-opt max-file=2 \ -p 6379:6379 \ --name myredis \ -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf \ -v /home/redis/myredis/data:/data \ -d redis redis-server /etc/redis/redis.conf \ --appendonly yes \ --requirepass 123456
- --restart=always 总是开机启动
- --log是日志方面的
- -p 6379:6379 将6379端口挂载出去
- --name 给这个容器取一个名字
- -v 数据卷挂载
- - /home/redis/myredis/myredis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。
- - /home/redis/myredis/data:/data 这个同上
- -d redis 表示后台启动redis
- redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf
- –appendonly yes 开启redis 持久化
- –requirepass 123456 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置,我被搞过,可以看这篇文章“阿里云服务器中毒‘Kirito666’经历”)
5.2.通过docker ps指令查看启动状态

5.3.通过docker ps指令查看启动状态

5.4.查看容器运行日志
命令:docker logs --since 30m <容器名>
此处 --since 30m 是查看此容器30分钟之内的日志情况
docker logs --since 30m myredis
如下图所示:

5.5.容器内部连接进行测试
此处跟着的 redis-cli 是直接将命令输在上面了。进入容器然后通过客户端连接Redis服务器,执行如下命令:
docker exec -it 95e329c6ecf7 redis-cli -a 123456 -p 6379
如下图所示:


浙公网安备 33010602011771号