
1.redis服务概述介绍1.1缓存服务概述介绍Redis是数百万开发人员使用的开源内存数据存储服务,经常被用于数据库、缓存、数据流引擎、以及消息中间件;简单理解:Redis 是完全开源的,遵守BSD协议,是一个高性能的 key-value 数据库;Redis服务属于NoSQL数据库产品系列,早期出现在网站架构中,主要是配合关系型数据库(RDBMS)完成某些工作任务的;对于关系型数据库主要负责核心业务数据的存储和查询;对于非关系性数据库主要作为配合数据库存储和查询的缓存业务;对于非关系性数据库也是存在很多种类的:Redis(缓存型)、MongoDB(文档型)、ES(日志型)...Redis与其他Key-value缓存产品相比具有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。单机MySQL数据库实例存储管理数据时代:高性能缓存+MySQL+读写分离:发展过程:优化数据结构和索引-- 文件缓存(IO)-- Memcached(当时最热门的技术)分库分表+水平拆分+MySQL集群:NoSQL数据库服务简介NoSQL(NoSQL=Not Only SQL),直译过来:“不仅仅是SQL”。泛指非关系型的数据库,并且不依赖业务逻辑方式存储,而以简单的key-values模式存储。因此大大的增加了数据库的扩展能力。不遵循SQL标准,不支持ACID,远超于SQL的性能。NoSQL数据库服务特点1)易于数据的管理扩展NoSQL数据库种类繁多,但是一个共同的特点是去掉关系数据库的关系型特性;数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。2)海量数据高并发读写由于数据结构简单,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下。cache:MySQL使用Query cache组粒度,nosql cache 记录级,细粒度。3)数据的存储模型灵活NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。说明:NoSQL数据库服务不适合于需要事务支持,基于SQL的结构化查询存储,处理复杂的关系,需要即时查询。RDBMS与NoSQL数据库特性对比RDBMS⾼度组织化结构化数据结构化查询语⾔(SQL)数据和关系都存储在单独的表中。数据操纵语⾔,数据定义语⾔严格的⼀致性 ACID基础事务NoSQL代表着不仅仅是SQL没有声明性查询语⾔没有预定义的模式键-值对存储,列存储,⽂档存储,图形数据库最终⼀致性,⽽⾮ACID【原⼦,⼀致,隔离,持久】属性⾮结构化和不可预知的数据CAP定理【⼀致性,可⽤性,容错性】⾼性能,⾼可⽤性和可伸缩性redis数据库服务:01 redis数据库服务安装部署02 redis数据库服务基础管理03 redis数据库服务架构管理(搭建 配置)主从架构 哨兵架构(高可用架构) 集群架构(分布式存储架构)redis数据库服务(非关系型数据库-缓存数据库服务-在内存中操作-快速调取数据/快速存储数据)利用redis数据库服务做临时数据存储和调取 session信息做临时存储利用redis数据库服务充当MySQL数据库缓存设备利用redis数据库服务充当消息队列服务缓存服务产品-RedisRedis具有丰富的数据类型可以进行应用,其中包括:key-value、list、set、zset、hash等数据结构类型;Redis具有持久化存储能力,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;Redis具有多种内存分配和回收的解决方案;Redis具有原有关系型数据库的事务处理能力(弱事务); A事务能力 ???Reids具有消息队列相关功能,支持消息订阅能力,但是不支持消息回溯和消息堆积;Redis具有原生态的高可用架构构建技术; 哨兵模式Redis具有数据的备份能力,即master-slave模式的数据备份;Redis具有原生态的分布式架构和分片集群; 单个redis数据库服务存储数据 --- 分散存储到不同的缓存服务器中缓存服务产品-MemcacheMemcache具有高性能读写能力;Memcache具有客户端式的分布式集群,以及一致性hash功能;Memcache具有多核结构,多线程读写能力;Memcache能力与Redis能力对比:比对项MemcacheRedis持久化存储不具有持久化存储能力具有持久化存储能力缓存穿透问题节点故障可能出现缓存穿透具有原生态高可用和主从复制能力分布式能力分布式需要客户端实现具有原生态分布式集群数据迁移能力跨机房数据同步困难具有跨机房数据迁移能力架构扩容能力架构扩容复杂度高具有架构扩容解决方案性能读写能力支持多线程读写能力,读写能力快支持单线程读写能力,读写能力较低数据类型支持单一数据类型支持多种数据类型 name=oldboy虚拟内存定义不支持自定义虚拟内存具有自定义虚拟内存能力总结:Memcahe和Redis读写性能对比memcache:比较适合多用户访问场景,每个用户少量的读写操作;Redis:比较适合少用户访问场景,每个用户大量的读写操作;缓存服务产品-TairTair具有高性能读写能力Tair具有多种存储引擎应用,支持三种引擎(ddb、rdb、ldb);Tair具有高可用架构构建能力Tair具有分布式架构和分片集群(支持了几乎所有淘宝业务的缓存)Tair在单机情况下,读写性能较其他两种产品较慢1.2缓存服务应用场景多种缓存服务产品的应用场景:缓存服务应用场景Memcached多核的缓存服务,更加适合于多用户并发访问次数较少的应用场景Redis单核的缓存服务,单节点情况下,更加适合于少量用户,多次访问的应用场景说明:Redis在500并发量的处理能力是比较强的,一般采用单机多实例架构,并且配合构建集群应用;2.Redis服务安装部署2.1缓存服务安装部署步骤一:下载redis缓存数据库程序#官⽅命令参考 https://redis.io/commands/ # 官⽅各版本的下载地址 https://redis.io/download/#redis-downloads https://download.redis.io/releases步骤二:安装redis缓存数据库服务缓存数据库服务安装环境准备:# 查询部署缓存服务系统版本 [root@db01 software]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) # 关闭系统默认的防火墙服务 [root@db01 software]# systemctl stop firewalld [root@db01 software]# systemctl disable firewalld # 服务程序安装依赖环境准备 [root@db01 software]# yum install -y gcc automake autoconf libtool make tcl缓存数据库服务下载解压安装:# 解压redis并指定解压目录 [root@db01 software]# tar xf redis-6.2.10.tar.gz -C /opt/module/ [root@db01 software]# cd .. [root@db01 module]# ll 总用量 2 drwxrwxr-x 7 root root 4096 1月 17 2023 redis-6.2.10 drwxr-xr-x. 2 root root 134 10月 9 15:21 software # 创建软连接 [root@db01 module]# ln -s redis-6.2.10/ redis # 进入解压redis目录编译安装redis程序 [root@db01 redis]# make make install # 查看是否安装成功 [root@db01 redis]# echo $? 0 # 设置redis环境变量 [root@db01 src]# vim /etc/profile [root@db01 src]# source /etc/profile步骤三:启动redis缓存数据库服务简单启动服务测试:#启动redis 后台运行 [root@db01 ~]# redis-server # 查看服务端口 [root@db01 ~]# netstat -lutup |grep redis tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 6451/redis-server * tcp6 0 0 [::]:6379 [::]:* LISTEN 6451/redis-server * # 缓存服务无密码登录操作 [root@db01 ~]# redis-cli # set 存储数据信息 key value 格式 127.0.0.1:6379 set name01 xiaoA OK # get 获取数据信息 127.0.0.1:6379 get name01 "xiaoA" 127.0.0.1:63793.Redis服务基础管理操作3.1缓存服务配置文件介绍编写基础配置文件信息:[root@db01 redis]# mkdir -p /data/6379 [root@db01 redis]# cat /data/6379/redis.confEOF daemonize yes -- 表示定义服务程序在后台以守护进程方式运行 port 6379 -- 表示定义服务的默认端口 logfile /data/6379/redis.log -- 表示服务运行日志存放路径 dir /data/6379 -- 表示定义数据目录路径,用于持久化应用时存储数据 dbfilename dump.rdb -- 表示持久化存储的数据文件名称 EOF停止redis服务:[root@db01 6379]# redis-cli shutdown 6451:M 09 Oct 2026 16:59:38.234 # User requested shutdown... 6451:M 09 Oct 2026 16:59:38.234 * Saving the final RDB snapshot before exiting. 6451:M 09 Oct 2026 16:59:38.235 * DB saved on disk 6451:M 09 Oct 2026 16:59:38.235 # Redis is now ready to exit, bye bye... [1]+ 完成 redis-server(工作目录:~) (当前工作目录:/data/6379) [root@db01 6379]# ps -ef |grep redis root 6479 6458 0 16:28 pts/1 00:00:00 redis-cli # 加载指定缓存服务配置文件,进行服务启动 [root@db01 6379]# redis-server /data/6379/redis.conf [root@db01 6379]# ps -ef |grep redis root 6630 1 0 17:01 ? 00:00:00 redis-server *:6379 root 6636 1721 0 17:01 pts/0 00:00:00 grep --color=auto redis # 进行简单缓存服务配置操作测试 [root@db01 redis]# redis-cli 127.0.0.1:6379 set name xiaoQ OK 127.0.0.1:6379 get name "xiaoQ"3.2缓存服务安全配置应用(远程管理)Redis默认开启了安全保护模式,只允许本地回环地址登录并访问缓存服务数据库,无法实现远程连接缓存服务数据库;需要禁用protected-mode模式,才能实现redis服务的远程连接;# Redis处于protected-mode默认开启的状态 [root@db01 redis]# redis-cli -h 10.0.0.53 -p 6379 10.0.0.53:6379 set a 1 (error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. -- 可以执行命令关闭protected-mode,执行的命令为CONFIG SET protected-mode no 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. -- 可以编写配置文件关闭保护模式,并设置protected mode option to 'no' 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. -- 可以在启动服务时,添加protected-mode no参数,实现关闭protected-mode 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside. -- 可以设置地址绑定或认证密码方式,在不关闭保护模式情况下,实现外网远程连接redis服务; -- 进行key-values设置失败,显示redis已经运行了protected-mode,并且处于启用状态 10.0.0.53:6379 get name Error: Connection reset by peer -- 查看key-values设置失败,由于redis已经运行了protected-mode,并且处于启用状态 # Redis处于protected-mode手动关闭的状态 [root@db-01 redis]# vim /data/6379/redis.conf .. 省略部分信息 .. bind 192.168.30.101 127.0.0.1 -- 设置监听本地远程连接地址和本地回环地址,实现地址bind绑定。默认情况bind=127.0.0.1 只能接受本机的访问请求 requirepass 123456 -- 密码鉴权认证 [root@db01 redis]# vim /data/6379/redis.conf daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dump.rdb bind 10.0.0.53 127.0.0.1 requirepass 123456 -- 设置远程连接认证密码信息 [root@db01 6379]# redis-cli shutdown [root@db01 6379]# ps -ef |grep redis root 7746 1721 0 09:57 pts/0 00:00:00 grep --color=auto redis [root@db01 6379]# redis-server /data/6379/redis.conf [root@db01 6379]# netstat -lntup |grep redis tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 7758/redis-server 1 tcp 0 0 10.0.0.53:6379 0.0.0.0:* LISTEN 7758/redis-server 1 -- 进行监听地址和密码信息设置后,需要重启redis服务程序 [root@db01 redis]# redis-cli 127.0.0.1:6379 set a 1 (error) NOAUTH Authentication required. -- 此时本地登录缓存服务也需要进行密码验证才可以 [root@db01 redis]# redis-cli -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6379 set a 1 OK 127.0.0.1:6379 get a "1" 或者 [root@db01 6379]# redis-cli -a 123456 -h 10.0.0.53 -p 6379 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.0.0.53:6379 set user xiaom OK 10.0.0.53:6379 get user "xiaom" 10.0.0.53:6379 get age "18" 10.0.0.53:6379 或者 (不暴漏密码:推荐) [root@db01 6379]# redis-cli -h 10.0.0.53 -p 6379 127.0.0.1:6379 auth 123456 OK 127.0.0.1:6379 get age "18" 127.0.0.1:6379 get user "xiaom" 127.0.0.1:6379 -- 此时本地登录缓存服务器输入密码信息后,既可以进行缓存服务管理操作3.3缓存服务查看修改配置对于Redis缓存服务可以进行在线的查看配置和修改配置信息,无需对缓存服务进行重启操作:# 在线查看缓存服务所有配置信息 [root@db01 6379]# redis-cli -h 10.0.0.53 -p 6379 10.0.0.53:6379 auth 123456 OK 10.0.0.53:6379 config get * 1) "rdbchecksum" 2) "yes" 3) "daemonize" 4) "yes" 5) "io-threads-do-reads" 6) "no" 7) "lua-replicate-commands" ... 省略部分信息 275) "auto-aof-rewrite-min-size" 276) "67108864" 277) "logfile" 278) "/data/6379/redis.log" 279) "watchdog-period" 280) "0" 281) "dir" 282) "/data/6379" 283) "save" 284) "3600 1 300 100 60 10000" 285) "client-output-buffer-limit" 286) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60" 287) "unixsocketperm" 288) "0" 289) "slaveof" 290) "" 291) "n