【3.0】Redis部署

发布时间 2023-09-10 13:45:16作者: Chimengmeng

【一】Redis是什么

【1】介绍

  • 开源:早起版本2w3千行
  • 基于键值对的存储系统:字典形式
  • 多种数据结构:字符串,hash,列表,集合,有序集合
  • 高性能,功能丰富
  • Redis(Remote Dictionary Server)是一个开源的,基于键值对的存储系统。
    • 它采用了字典形式进行数据存储,支持多种数据结构如字符串、哈希、列表、集合和有序集合,并具有高性能和丰富的功能。
  • Redis最早版本有约2万3千行代码,是一个轻量级的存储系统。
    • 由于其出色的性能和灵活的数据结构支持,在实际应用中得到了广泛的使用。

【2】那些公司在用

  • github,twitter,stackoverflow,阿里,百度,微博,美团,搜狐

【二】Redis特性(8个)

  • 速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型
  • 持久化:rdb和aof
  • 多种数据结构
    • 5大数据结构
    • BitMaps位图:布隆过滤器 本质是 字符串
    • HyperLogLog:超小内存唯一值计数,12kb HyperLogLog 本质是 字符串
    • GEO:地理信息定位 本质是有序集合
  • 支持多种编程语言:基于tcp通信协议,各大编程语言都支持
  • 功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)
  • 简单:源代码几万行,不依赖外部库
  • 主从复制:主服务器和从服务器,主服务器可以同步到从服务器中
  • 高可用和分布式
    • 2.8版本以后使用redis-sentinel支持高可用
    • 3.0版本以后支持分布式

【1】速度快

  • Redis以其高速的读写能力而闻名,每秒可以处理10万个操作(ops)。
  • 这主要得益于Redis将数据存储在内存中,并采用C语言实现的单线程模型。
  • 由于Redis采用非阻塞I/O模型,可以在内存访问和计算能力之间取得良好的平衡。

【2】持久化

  • Redis提供了两种持久化方式,分别是RDB(Redis Database)和AOF(Append-Only File)。
    • RDB可将内存中的数据周期性地保存到磁盘上,以便在重启时恢复数据。
      • 它是通过将数据转化为二进制形式进行持久化存储的,因此对于大规模的数据集来说,RDB方式比AOF方式更加高效。
    • AOF则记录所有对Redis服务器进行修改的命令,这样可以保证在服务器重启后,能够重新执行这些命令以达到数据恢复的目的。
      • 相比RDB,AOF提供了更好的数据安全性,但会增加一定的磁盘IO负担。

【3】多种数据结构

  • Redis不仅仅是一个键值存储系统,还提供了多种数据结构,可以满足不同场景下的需求。
  • 常见的5种数据结构包括
    • 字符串(String)
    • 哈希(Hash)
    • 列表(List)
    • 集合(Set)
    • 有序集合(Sorted Set)。
  • Redis还支持
    • BitMaps位图
    • HyperLogLog
    • GEO地理信息定位数据结构
    • 它们分别用于布隆过滤器、唯一值计数和地理位置存储等特定场景。

【4】支持多种编程语言

  • Redis基于TCP通信协议进行数据交互,几乎所有主流的编程语言都提供了Redis客户端库,因此可以方便地与Redis进行交互和操作。
  • 例如,Python中有redis-py库,Java中有Jedis库,Node.js中有ioredis库等。

【5】功能丰富

  • Redis提供了多个功能扩展,增加了其在实际应用中的灵活性和可扩展性。
    • 发布订阅功能允许客户端发布消息并订阅感兴趣的频道,这对于实现消息队列等发布-订阅模式非常有用。
    • Lua脚本允许通过执行自定义脚本来完成复杂的业务逻辑,可以减少网络延迟并提高性能。
    • 事务(Pipeline)允许一次性执行多个命令,并将它们视为一个原子操作。这在需要确保多个命令的原子性时非常有用。

【6】简单

  • Redis的源代码非常精简,代码行数大约只有几万行,并且不依赖于外部库。
  • 这使得Redis的安装和配置非常简单,并且具备较高的可移植性。

【7】主从复制

  • Redis支持主从复制架构,可以通过将一个Redis服务器配置为主服务器,将其他服务器配置为从服务器来实现数据的复制和同步。
    • 主服务器负责处理所有写操作,并将更新的数据异步传输给从服务器。
    • 从服务器接收并复制主服务器的数据,以实现数据的备份、读操作的负载均衡等目的。

【8】高可用和分布式

  • Redis提供了多种机制来实现高可用和分布式部署。
    • Redis Sentinel是一个用于监控Redis服务器的组件,可以实现自动故障转移和故障恢复,提高系统的可用性。
    • 从Redis 3.0版本开始,Redis Cluster提供了一种分布式解决方案,可以将数据分片存储在不同的节点上,实现数据的水平扩展和负载均衡。

【三】Docker部署Redis

【1】安装Redis

(1)下载Redis压缩包:

wget http://download.redis.io/releases/redis-6.2.9.tar.gz
  • 这里会从官方网站下载Redis的压缩包。

(2)解压Redis压缩包:

tar -xzf redis-6.2.9.tar.gz
  • 使用tar命令解压下载的压缩包。

(3)建立软连接:

ln -s redis-6.2.9 redis
  • 创建一个软连接,使得可以通过使用“redis”来访问Redis的文件。

(4)进入Redis目录:

cd redis
  • 进入到解压后的Redis目录。

(5)编译和安装Redis:

make && make install
  • 执行make命令编译Redis源码,并执行make install命令安装编译后的Redis。

(6)安装完成:

  • 在src目录下,可以找到以下文件:

    • redis-server:Redis服务器

    • redis-cli:Redis命令行客户端

    • redis-benchmark:Redis性能测试工具

    • redis-check-aof:AOF文件修复工具

    • redis-check-dump:RDB文件检查工具

    • redis-sentinel:Sentinel服务器,哨兵

  • 注意:Redis在Windows上的维护并不好,所以Windows系统建议使用官方提供的安装包进行安装。

【2】卸载Redis

(1)查看Redis进程:

ps aux | grep redis
  • 这里使用ps命令配合grep命令来查看正在运行的Redis进程。

(2)杀掉Redis进程:

kill 进程ID
  • 根据第一步中查到的Redis进程ID,使用kill命令杀掉对应的进程。

(3)进入Redis安装目录:

cd /usr/local/
  • 进入Redis的安装目录。

(4)删除Redis相关文件:

rm -f /usr/local/redis/bin/redis*
rm -f /usr/local/bin/redis*
  • 删除Redis相关可执行文件。

(5)删除Redis目录:

rm -rf redis
  • 删除安装时创建的Redis目录及其内容。

  • 以上操作会完全卸载Redis。

  • 请注意,在执行卸载操作前,请确保已备份重要的Redis数据。

【四】三种启动方式

【1】最简启动

#最简启动
redis-server
ps -ef|grep redis  #查看进程
netstat -antpl|grep redis #查看端口
redis-cli -h ip -p port ping #命令查看
  • Redis的最简启动方式是通过运行redis-serve命令来启动Redis服务器。这将在默认配置下启动Redis服务器,并监听默认的端口(6379)。

  • 以下是该启动方式的详细步骤和说明:

    • 输入redis-server命令来启动Redis服务器。

    • 使用ps -ef | grep redis命令来查看Redis服务器的进程是否已经启动。

    • 使用netstat -antpl | grep redis命令来查看监听的Redis服务器的端口号及其相关信息。

    • 使用redis-cli -h ip -p port ping命令来检查与Redis服务器的连接是否正常,其中ip是Redis服务器的IP地址,port是Redis服务器的端口号。

  • 请注意,这种最简启动方式使用的是Redis的默认配置文件,如果您需要进行更详细的配置,请考虑使用后面介绍的配置文件启动方式或动态参数启动方式。

【2】动态参数启动

#动态参数启动
redis-serve --port 6380 #启动,监听6380端口
  • 动态参数启动方式允许您在启动Redis服务器时通过命令行参数指定一些配置选项,而不是使用默认配置文件。

  • 以下是该启动方式的详细步骤和说明:

    • 使用redis-serve --port 6380命令启动Redis服务器,并指定新的端口号为6380。

    • 这将启动一个新的Redis服务器实例,监听在指定的端口号上。

  • 此启动方式适用于需要为特定场景而定制的临时Redis服务器实例。

【3】配置文件启动

  • 配置文件启动(6379对应手机按键MERZ,意大利女歌手Alessia Merz的名字)

  • 通过redis-cli连接,输入config get * 可以获得默认配置

  • 在redis目录下创建config目录,copy一个redis.conf文件

    • daemonize--》是否是守护进程启动(no|yes)
    • port---》端口号
    • logfile--》redis系统日志
    • dir--》redis工作目录
  • 配置文件

#查看一下默认注释,把#和空格去掉
cat redis.conf|grep -v "#" |grep -v "^$"
# 重定向到另一个文件
cat redis.conf|grep -v "#" |grep -v "^$" >redis-6382.conf
[root@node1 redis]# mv redis.conf redis.conf.bak 
[root@node1 redis]# ls
00-RELEASENOTES  CONTRIBUTING  INSTALL    README.md       runtest-cluster    sentinel.conf  TLS.md
BUGS             COPYING       Makefile   redis.conf.bak  runtest-moduleapi  src            utils
CONDUCT          deps          MANIFESTO  runtest         runtest-sentinel   tests
[root@node1 redis]# vim redis.conf
daemonize yes #是否以守护进程启动
pidfile /var/run/redis.pid   #进程号的位置,删除
port 6379    #端口号
dir "/root/dream/redis/data"  #工作目录 
logfile 6379.log #日志文件
  • Redis配置文件通常位于redis.conf文件中,您可以通过以下命令查找配置文件的位置:
CONFIG GET dir
  • 响应示例:
1) "dir"
2) "/usr/local/redis-6.0.9"
  • 为了更好地保护您的Redis实例,可以设置访问密码。
    • 以下是在配置文件中设置密码和重启后仍然有效的方法:
CONFIG SET requirepass 123456
# 并没有写到配置文件中,重启即失效
  • 为了限制Redis使用的最大内存量,您可以在配置文件中设置maxmemory参数。
    • 例如,将最大内存限制为128MB:
# 在redis.conf中找到并修改以下行
maxmemory 128mb
# 或者直接在命令行中运行以下命令
CONFIG SET maxmemory 128M
  • 如果您希望将当前的Redis配置保存到配置文件中
    • 可以使用以下命令:
# 将临时配置生效成永久配置
CONFIG REWRITE
  • 该命令会将当前的Redis配置保存到对应的配置文件(redis.conf)中。

  • 综上所述,以下是完整的Redis配置文件示例(redis.conf):

# Redis配置文件

# 设置Redis实例的访问密码
requirepass 123456

# 限制Redis实例使用的最大内存为128MB
maxmemory 128mb

# 将Redis配置保存到配置文件中
config rewrite
  • 请注意,上述示例仅为演示目的,并非完整的配置文件。
  • 具体的配置参数和值可能会因您的需求而有所不同。您可以根据自己的实际需求进行调整。
  • 在redis目录下新建data目录,用来存放书籍
  • 启动redis
[root@node1 redis]# ./src/redis-server ./redis.conf
  • 查看进程
ps -ef |grep redis-server |grep 6379
ps -ef |grep  redis
[root@node1 redis]# ps -ef |grep  redis
root      52219      1  0 19:06 ?        00:00:00 ./src/redis-server *:6379
root      52506  44911  0 19:08 pts/1    00:00:00 grep --color=auto redis
  • 查看日志
cd data
cat 6379.log
  • 等待日志加载
tail -f 6379.log
  • 配置文件启动方式允许您使用自定义的配置文件来启动Redis服务器。

以下是该启动方式的详细步骤和说明:

  • 首先,您可以通过运行redis-cli命令连接到Redis服务器,并使用config get *命令获取Redis默认配置的详细信息。

  • 在Redis安装目录下创建一个名为config的文件夹,并复制一份redis.conf文件到该目录。

  • 打开

    redis.conf
    

    文件,并根据您的需求进行配置调整。

    您可以取消注释相关行,配置参数如下:

    • daemonize:设置是否以守护进程启动Redis服务器(可选值为noyes)。
    • port:设置Redis服务器监听的端口号。
    • logfile:设置Redis系统日志的位置。
    • dir:设置Redis工作目录,即Redis服务器存储数据等文件的位置。
  • 保存并关闭redis.conf文件。

  • 在完成上述配置后,您可以按照以下步骤来启动Redis服务器:

    • 在Redis安装目录下,使用命令redis-server config/redis.conf启动Redis服务器。这将使用您自定义的配置文件来启动Redis。

    • 使用ps -ef | grep redis-server | grep 6379命令来检查Redis服务器进程是否已经启动。请注意,这里的6379是您在配置文件中设置的端口号。

    • 通过访问工作目录中的日志文件来查看Redis服务器的日志信息。

【4】小结

(1)客户端链接

redis-cli -h 地址 -p 端口

(2)非交互式的

res=subprocess.getoutput('systemctl start mysqld')
res=subprocess.getoutput('systemctl stop mysqld')
res=subprocess.getoutput('redis-cli get name')

(3)交互式的

get name
keys *

【5】带密码链接

(1)方式一

redis-cli -h 127.0.0.1    -p 6370 -a 123456

(2)方式二

  • 先登陆,再通过auth输入密码