Redis介绍/安装/配置

1 Redis初识

1.1 Redis是什么

介绍:

Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。

Redis 遵守 BSD 协议,实现了免费开源,其最新版本是 6.20,常用版本包括 3.0 、4.0、5.0。自 Redis 诞生以来,它以其超高的性能、完美的文档和简洁易懂的源码广受好评,国内外很多大型互联网公司都在使用 Redis,比如腾讯、阿里、Twitter、Github 等等。

提示:Redis中文官网(http://redis.cn/)提供了完善的社区环境、文档说明,以及更新支持。

常见的内存型数据库,除 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 数据库没有“表”的概念,它通过不同的数据类型来实现存储数据的需求,不同的数据类型能够适应不同的应用场景,从而满足开发者的需求。


1.2 Redis特性

速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型

持久化:rdb和aof

多种数据结构

5大数据结构

BitMaps位图:布隆过滤器 本质是 字符串

HyperLogLog:超小内存唯一值计数,12kb HyperLogLog 本质是 字符串

GEO:地理信息定位 本质是有序集合

支持多种编程语言:基于tcp通信协议,各大编程语言都支持

功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)

简单:源代码几万行,不依赖外部库

主从复制:主服务器和从服务器,主服务器可以同步到从服务器中

高可用和分布式

​ 2.8版本以后使用redis-sentinel支持高可用

​ 3.0版本以后支持分布式


1.3 Redis单线程模型

单线程为什么这么快?

# 数据在内存中(最重要的)
# 用了io多路复用技术
# 没有进程、线程间的切换。线程间数据交互也要消耗资源-->因此有了协程--单线程下的数据并发

为什么Redis不支持windows?

# select、poll和epoll都是io多路复用技术的机制

select(服务器最多监听1024个系统调用),监听的调用放在列表里,轮询的方式,for循环一个一个去看状态有没有变化

poll,本质跟select一样,是select的加强版,监听更多

epoll(理论上监听无上限),主动回调的方式,性能更高

windows上不支持epoll,因此redis不支持windows。windows上装的redis的是第三方迁移过来的,用的还是select,所以性能比Linux上的要低

1.4 Redis架构

Redis体系架构主要分为两个部分:

  • Redis服务端
  • Redis客户端

客户端和服务端可以位于同一台计算机上,也可以位于不同的计算机上。服务端是整个架构的“大脑”,能够把数据存储到内存中,并起到管理数据的作用。


1.5 Redis与其他数据库对比

名称 类型 数据存储选项 附加功能
Redis 基于内存存储的键值非关系型数据库 字符串、列表、散列、有序集合、无序集合 发布与订阅、主从复制、持久化存储等
Memcached 基于内存存储的键值缓存型数据库 键值之间的映射、只支持字符串 为提升性能构建了多线程服务器
MySQL 基于磁盘的关系型数据库 每个数据库可以包含多个表,每个表可以包含多条记录;
支持第三方扩展。
支持 ACID 性质、主从复制和主主复制
MongoDB 基于磁盘存储的非关系文档型数据库 每个数据库可以包含多个集合,每个集合可以插入多个文档 支持聚合操作、主从复制、分片和空间索引

1.6 Redis应用场景

缓存系统:使用最广泛,用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis 中,可以让应用程序快速地读取它们。例如,网站的首页需要经常被访问,并且在创建首页的过程中会消耗的较多的资源,此时就可以使用 Redis 将整个首页缓存起来,从而降低网站的压力,减少页面访问的延迟时间。

计数器:网站访问量,转发量,评论数(文章转发,商品销量,单线程模型,不会出现并发问题),计数的东西都先放redis中,不要计一条数就往数据库里放

消息队列:发布订阅,阻塞队列实现(简单的分布式,blpop:阻塞队列,生产者消费者模型)

排行榜:有序集合(阅读排行,点赞排行,推荐排行(销量高的,推荐))

社交网络:很多特性跟社交网络匹配,粉丝数,关注数

实时系统:垃圾邮件处理系统,布隆过滤器

 

2 Redis单机安装

2.1 下载安装

Linux源码包安装

# 更新系统软件包
yum update -y
# 安装软件管理包和可能使用的依赖
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

# 下载redis源码包
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
# 解压
tar -xzf redis-5.0.7.tar.gz
# 建立软连接(下载新的redis版本解压后,只需要新建软连接不用更改配置和环境 ln -s redis-6.0.7 redis)
ln -s redis-5.0.7 redis
# 编译安装
cd redis
make&&make install
# 编译安装失败,重新安装前,需要清理上次编译失败残留的文件
make distclean && make

# 可执行文件
# 在src目录下可以看到,绿色的是可执行命令。安装完成后,可执行命令会自动拷贝到/use/local/bin 路径下,因此不用指定目录就能直接执行命令
redis-server--->redis服务器
redis-cli--->redis命令行客户端
redis-benchmark--->redis性能测试工具
redis-check-aof--->aof文件修复工具
redis-check-dump--->rdb文件检查工具
redis-sentinel--->sentinel服务器,哨兵

 2.2 卸载redis

# 1、查看redis进程;
ps aux|grep redis
# 2、kill掉进程;
kill 进程id
# 3、进入到redis目录
cd /usr/local/
# 4、删除redis对应的文件
rm -f /usr/local/redis/bin/redis*
rm -f /usr/local/bin/redis*
# 5、删除对应的文件
rm -rf redis

2.3 三种启动方式

2.3.1 最简启动

# 最简启动
./src/redis-server
ps -ef|grep redis              #查看进程
netstat -antpl|grep redis      #查看端口
redis-cli -h ip -p port ping   #命令查看

2.3.2 动态参数启动

# 指定一些配置启动
./src/redis-serve --port 6380 #启动,监听6380端口

 2.3.3 配置文件启动

# 配置文件启动

# /redis目录下有一个redis.conf文件,可以查看默认配置。
# 在/redis目录下创建/conf目录,cd到conf/ ,创建redis_6379.conf文件,写入常用参数配置(也可以cp redis.conf在它基础上修改):
daemonize yes                # 是否以守护进程启动,后台启动
pidfile /var/run/redis.pid   # 进程号的位置
port 6379                    # 端口号
dir "/opt/zl/redis/data"     # 工作目录,数据目录,手动创建/data
logfile “6379.log”         # 日志文件名字
#bind 127.0.0.1              # 不支持远程连接,只能本机连接
bind 0.0.0.0
protected-mode no            # 关闭保护模式
requirepass 123456           # 如果用docker启动redis,密码写在环境变量中,配置文件os.environ.get从环境变量中获取

# 以redis_6379.conf文件为启动配置文件,而不是默认的redis.conf
./src/redis-server conf/redis_6379.conf

# 查看是否启动
ps aux |grep redis

2.4 Redis 的日志级别有以下四种:

1. debug:会打印出很多信息,适用于开发和测试阶段。
2. verbose(冗长的):包含很多不太有用的信息,但比debug简化一些。
3. notice:适用于生产模式。
4. warning : 警告信息。

Redis 默认设置为 verbose,开发测试阶段可以用 debug,生产模式一般选用 notice。

2.5 端口安全

Redis 默认监听*:6379,如果当前的服务器主机有外网地址,那么 Redis 的服务将会直接暴露在公网上,别有用心的人使用适当的探测工具就可以对 IP 地址进行端口扫描,从而威胁您的系统安全。

如果 Redis 的服务地址一旦可以被外网直接访问,其内部数据就彻底丧失了安全性。黑客们可以通过 Redis 执行 Lua 脚本拿到服务器权限,然后清空您的 Redis 数据库。因此务必在 Redis 的配置文件中绑定要监听的 IP 地址,避免类似的情况发生。如下所示:

# bind 0.0.0.0 当前的服务器主机有外网地址,所有ip地址都能访问

bind 193.168.1.1 # 绑定你指定的外网ip地址,如运维的ip,只有他可以远程连接redis服务

 不仅如此,还可以增加 Redis 的密码访问限制,客户端必须使用 auth 命令传入正确的密码才可以访问 Redis。

requirepass yourspassword

这样即使地址暴露出去了,普通黑客也无法对 Redis 服务器进行任何指令操作。

密码配置也会影响到主从复制。要求从机必须配置与主服务相同的密码才可以进行主从复制。

masterauth yourspassword

2.6 客户端连接(命令)

本地cmd本地客户端 或 Redis可视化工具远程连接服务器 redis server,需要服务器关闭防火墙

操作 指令 备注
查看防火墙状态 systemctl status firewalld / firewall-cmd --state  
暂时关闭防火墙 systemctl stop firewalld  
永久关闭防火墙(禁用开机自启) systemctl disable firewalld 下次启动,才生效
暂时开启防火墙 systemctl start firewalld  
永久开启防火墙(启用开机自启) systemctl enable firewalld 下次启动,才生效
开放指定端口 firewall-cmd --zone=public --add-port=8080/tcp --permanent 需要重新加载生效
关闭指定端口 firewall-cmd --zone=public --remove-port=8080/tcp --permanent 需要重新加载生效
立即生效(重新加载) firewall-cmd --reload  
查看开放端口 firewall-cmd --zone=public --list-ports  
###客户端连接###
redis-cli -h 地址 -p 端口号 
redis-cli # 默认连接本地6379
ping #返回PONG

# 关闭redis-server
kill -9 进程id号    
redis-cli shutdown

## 有密码的情况可以两种登陆方式
# 方式一
redis-cli -h 127.0.0.1 -p 6379 -a 123456
# 方式二 先登陆,再通过auth输入密码
redis-cli -h 127.0.0.1 -p 6379
auth 123456

## redis-cli进入,查看和更改redis的配置信息(直接在交互式命令行下修改)
## 正因为可以修改配置信息,redis入侵,就是把公钥写入配置文件,入侵者机器上配置私钥就能远程连入你的redis
CONFIG GET *                        # 查看所有配置信息
CONFIG GET 配置名称                 # 查看某项配置信息
CONFIG SET 配置项名称 配置项参数值  # 更改配置项信息
CONFIG SET maxmemory 128M           # 设置最大使用的内存,0表示无限制,生产环境不会让redis占用所有内存,一般会进行配置
CONFIG set requirepass 123456       # 设置密码
CONFIG REWRITE                      # 把修改保存到配置文件

2.7 redis返回值

####redis返回值
状态回复:ping---》PONG
错误回复:hget hello field ---》(error)WRONGTYPE Operation against
整数回复:incr hello---》(integer) 1
字符串回复:get hello---》"world"
多行字符串回复:mget hello foo---》"world" "bar"

2.8 配置项说明

配置项 参数 说明
daemonize no/yes 默认为 no,表示 Redis 不是以守护进程的方式运行,通过修改为 yes 启用守护进程。
pidfile 文件路径 当 Redis 以守护进程方式运行时,会把进程 pid 写入自定义的文件中。
port 6379 指定 Redis 监听端口,默认端口为 6379。
bind 127.0.0.1 绑定的主机地址。
timeout 0  客户端闲置多长秒后关闭连接,若指定为 0 ,表示不启用该功能。
loglevel notice  指定日志记录级别,支持四个级别:debug、verbose、notice、warning,默认为 notice。
logfile stdout 日志记录方式,默认为标准输出。
databases 16 设置数据库的数量(0-15个)共16个,Redis 默认选择的是 0 库,可以使用 SELECT 命令来选择使用哪个数据库储存数据。
save[seconds]
[changes]
可以同时配置三种模式:
save 900 1
save 300 10
save 60 10000
表示在规定的时间内,执行了规定次数的写入或修改操作,Redis 就会将数据同步到指定的磁盘文件中。比如 900s 内做了一次更改,Redis 就会自动执行数据同步。
rdbcompression yes/no 当数据存储至本地数据库时是否要压缩数据,默认为 yes。
dbfilename dump.rdb 指定本地存储数据库的文件名,默认为 dump.rdb。
dir ./ 指定本地数据库存放目录。
 
slaveof <masterip>
<masterport>
主从复制配置选项 当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动与 master 主机进行数据同步。
requirepass  foobared 默认关闭 密码配置项,默认关闭,用于设置 Redis 连接密码。如果配置了连接密码,客户端连接 Redis 时需要通过<password> 密码认证。
maxmemory
<bytes>
最大内存限制配置项 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会尝试清除已到期或即将到期的 Key,当此方法处理 后,若仍然到达最大内存设置,将无法再进行写入操作,但可以进行读取操作。
appendfilename appendonly.aof 指定 AOF 持久化时保存数据的文件名,默认为 appendonly.aof。
glueoutputbuf yes 设置向客户端应答时,是否把较小的包合并为一个包发送,默认开启状态。

 

3 Redis可视化工具

Redis 存在许多第三方可视化工具,可以让您更加直观形象地的操作 Redis 数据库,常见的 Redis GUI 工具有 Redis Desktop Manager(又称 RDM)、Another Redis DeskTop Manager 及 FastoRedis。

Redis Desktop Manager(简称 RDM)是一个跨平台 Redis 桌面管理软件(客户端软件),支持 Windows、Liunx 和 Mac。该工具为用户提供了易于使用的 Redis 可视化操作,同时支持 SSL/TLS加密,以及 SSH 隧道技术。它托管在 GitHub 上,下载地址:点击前往

posted @ 2022-10-23 22:01  不会钓鱼的猫  阅读(92)  评论(0编辑  收藏  举报