redis服务的部署

一、介绍

中文官网
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

1.redis与memcache

(1) redis可以用来做存储(storge)、而memcache是来做缓存(cache)。这个特点主要是因为其有“持久化”功能

(2)存储的数据有“结构”,对于memcache来说,存储的数据,只有一种类型—>“字符串”,而redis则可以存储字符串、链表、集合、有序集合、哈序结构

2.

二、安装

2.1 redis 各版本下载地址

https://redis.io/download

2.2 下载、解压并安装redis

[root@server1 ~]# tar zxf redis-5.0.8.tar.gz
[root@server1 ~]# cd redis-5.0.8
[root@server1 redis-5.0.8]# make && make install
make 过程中可能会有依赖性问题,根据报错解决即可
 gcc-c++  jemalloc-3.6.0-1.el6.x86_64.rpm   jemalloc-devel-3.6.0-1.el6.x86_64.rpm
 找到对应的包下载即可,如果解决了依赖性仍然报错的话,请删除重新解压再进行make
[root@server1 redis-5.0.8]# cd utils/
[root@server1 utils]# ./install_server.sh      
##自动生成配置文件等信息,全部回车即可

在这里插入图片描述
从上图中可以看出redis的配置文件

[root@server1 redis-5.0.8]# vim /etc/redis/6379.conf

修改主配置文件,默认在/etc/redis/6379.conf 修改, 修改监听接口为0.0.0.0
在这里插入图片描述

重启服务,配置信息生效
[root@server1 redis-5.0.8]# /etc/init.d/redis_6379 restart
查询端口是否打开
[root@server1 redis-5.0.8]# netstat -antlp | grep 6379

在这里插入图片描述

三、redis常用指令:

config get *//查看配置
select 1//选择数据库
flushdb//清空当前数据库
flushall//清空所有数据库
move key 1//移动key
del key//删除
rename oldkey newkey//改名
expire key 10//设置过期时间
persist key//设置持久化
keys user*//查询
exists key//判断是否存在

redis-cli 是Redis命令行界面,这是一个简单的程序,它允许直接从终端向Redis发送命令并读取服务器发送的回复。
默认情况下redis-cli,该服务器通过127.0.0.1端口6379连接到服务器。您可以猜测,可以使用命令行选项轻松更改此设置。要指定其他主机名或IP地址,请使用-h。为了设置其他端口,请使用-p。交互式

[root@server1 ~]# redis-cli 

在这里插入图片描述

四、redis 的主从复制

Redis使用默认的异步复制,其特点是低延迟和高性能,是绝大多数 Redis 用例的自然复制模式。但是,从 Redis 服务器会异步地确认其从主 Redis 服务器周期接收到的数据量。
Redis 使用异步复制,slave 和 master 之间异步地确认处理的数据量,一个 master 可以拥有多个 slave
在这里插入图片描述

再重新配置一个redis服务,方法同上
[root@server2 utils]# vim /etc/redis/6379.conf
这里只需在配置文件最后加上
slaveof 172.25.1.1 6379

min-slaves-to-write <slave 数量>      这两行可以不加入
min-slaves-max-lag <秒数>
Redis 使用异步复制,因此无法确保 slave 是否实际接收到给定的写命令
[root@server2 utils]# /etc/init.d/redis_6379 restart

在这里插入图片描述

[root@server1 utils]# redis-cli
127.0.0.1:6379> info

在这里插入图片描述

[root@server2 utils]# redis-cli
127.0.0.1:6379> info

在这里插入图片描述

测试
在这里插入图片描述
在这里插入图片描述
我们可以看出在server1中输入的键值在server2中可以get到,所以实现主从关系

五、redis 的高可用

1.介绍

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

2.配置Sentinel

开启第三台虚拟机server3,同样的方法进行redis配置
其中server1作为master server2和server3作为slave;
在这里插入图片描述

[root@server1 redis-5.0.8]# vim sentinel.conf

在这里插入图片描述
第一行配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 172.25.1.1, 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
在这里插入图片描述
指定当主服务器掉线10秒就会被认定为服务失效
在这里插入图片描述

将这个sentinel 配置传给2和3放到/etc/redis下 用于sentinel监控
[root@server1 redis-5.0.8]# cp  sentinel.conf  /etc/redis/
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/

3.启动 Sentinel

对于 redis-sentinel 程序, 你可以用以下命令来启动 Sentinel 系统:

对于 redis-server 程序, 你可以用以下命令来启动一个运行在 Sentinel 模式下的 Redis 服务器:

在三台机子上都执行以下命令来启动sentinel服务,查看效果

redis-sentinel /etc/redis/sentinel.conf    ##保持这个页面不能推出,可以远程连接到serve1上查看
[root@server1 ~]# redis-cli   
127.0.0.1:6379> SHUTDOWN

在这里插入图片描述

这是我们查看info,master已经是server2了,并且当原来的master.server1开启之后也不会再跳回去,server1自动变成slave
在这里插入图片描述

4.主观下线和客观下线

主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。 (一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)
如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内, 对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线。
服务器对 PING 命令的有效回复可以是以下三种回复的其中一种:
返回 +PONG 。
返回 -LOADING 错误。
返回 -MASTERDOWN 错误。
客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。

六、redis集群

1.Redis集群介绍

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:

  • 自动分割数据到不同的节点上。
  • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

2.搭建并使用集群

(1)创建实例
搭建集群的第一件事情我们需要一些运行在 集群模式的Redis实例. 这意味这集群并不是由一些普通的Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了。

首先, 让我们进入一个新目录, 并创建六个以端口号为名字的子目录, 稍后我们在将每个目录中运行一个 Redis 实例: 命令如下:

cd /usr/local/
mkdir  redis
cd  redis
mkdir 7000
mkdir 700{1..6}

在文件夹 7000 至 7006中, 各创建一个 redis.conf 文件, 文件的内容可以使用上面的示例配置文件, 但记得将配置中的端口号从 7000 改为与文件夹名字相同的号码。
在这里插入图片描述

下面是一个最少选项的集群的配置文件:

[root@server1 ~]# cd 7000/
[root@server1  7000]# vim redis.conf
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes

文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。
要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

打开实例

[root@server1 7000]# redis-server redis.conf

用ps ax 查看进程,查看cluster是否创建成功
在这里插入图片描述
(2) 搭建集群
现在我们已经有了7正在运行中的 Redis 实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。
通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。

[root@server1 ~]# redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:
在这里插入图片描述在这里插入图片描述
这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。

3.使用集群

测试 Redis 集群比较简单的 redis-cli , 接下来我们将使用 redis-cli 为例来进行演示:
三主信息

[root@server1 ~]# redis-cli --cluster info 127.0.0.1:7000
127.0.0.1:7000 (fb6af12f...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7001 (e27ba0ce...) -> 0 keys | 5462 slots | 1 slaves.
127.0.0.1:7002 (6441e2ec...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
[root@server1 ~]# redis-cli -c -p 7000

在这里插入图片描述

七、结合数据库

部署和之前一样,可看文章开头部署。
这里用到server1 server2 server3

以下实验所以需要的包链接: 需要的软件包及依赖 提取码: hend

[root@server2 ~]# tar zxf redis-5.0.8.tar.gz
[root@server2 ~]# cd redis-5.0.8/
[root@server2 redis-5.0.8]# yum install gcc-c++ -y
[root@server2 redis-5.0.8]# make & make install
[root@server2 utils]# ./install_server.sh

server1

root@server1 ~]# yum install -y httpd php php-mysql.x86_64 php-redis
[root@server1 ~]# cd /var/www/html/
get test.php
[root@server1 html]# vim test.php
<?php
        $redis = new Redis();
        $redis->connect('172.25.3.2',6379) or die ("could net connect redis server");
  #      $query = "select * from test limit 9";
        $query = "select * from test";
        for ($key = 1; $key < 10; $key++)
        {
                if (!$redis->get($key))
                {
                        $connect = mysql_connect('172.25.3.3','redis','westos');
                        mysql_select_db(test);
                        $result = mysql_query($query);
                        //如果没有找到$key,就将该查询sql的结果缓存到redis
                        while ($row = mysql_fetch_assoc($result))
                        {
                                $redis->set($row['id'],$row['name']);
                        }
                        $myserver = 'mysql';
                        break;
                }
                else
                {
                        $myserver = "redis";
                        $data[$key] = $redis->get($key);
                }
        }
 
        echo $myserver;
        echo "<br>";
        for ($key = 1; $key < 10; $key++)
        {
                echo "number is <b><font color=#FF0000>$key</font></b>";
 
                echo "<br>";
 
                echo "name is <b><font color=#FF0000>$data[$key]</font></b>";
 
                echo "<br>";
        }
?>
[root@server1 html]# systemctl start httpd.service
get php-devel-5.4.16-46.el7.x86_64.rpm
[root@server1 html]# yum install php-devel-5.4.16-46.el7.x86_64.rpm -y
mirror rhel7
[root@server1 ~]# cd rhel7/
[root@server1 rhel7]# yum install   php-pecl-redis-2.2.8-1.el7.x86_64.rpm php-fpm-5.4.16-46.el7.x86_64.rpm php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm -y

在这里插入图片描述

server3:mysql

[root@server3 ~]# yum install mariadb-server -y
[root@server3 ~]# systemctl start mariadb.service
get test.sql
[root@server3 ~]#  vim  test.sql 
use test;
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');

#DELIMITER $$
#CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
#    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`)); 
#  END$$
#DELIMITER ;
[root@server3 ~]# mysql < test.sql
[root@server3 ~]# mysql
grant all on test.* to redis@'%' identified by 'westos';

在这里插入图片描述
在这里插入图片描述
到这里,我们已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis
中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情
况。所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中。

更新完数据库如何实现同步redis

配置 gearman 实现数据同步
Gearman 是一个支持分布式的任务分发框架:
Gearman Job Server: Gearman 核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式
运行,Gearman Worker 接收到 Gearman Client 传递的任务内容后,会按顺序处理。
大致流程:

下面要编写的 mysql 触发器,就相当于 Gearman 的客户端。修改表,插入表就相当于直接
下发任务。然后通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,然后
在通过 gearman-mysql-udf 插件将任务加入到 Gearman 的任务队列中,最后通过
redis_worker.php,也就是 Gearman 的 worker 端来完成 redis 数据库的更新。

安装 gearman 软件包:

[root@server1 rhel7]# yum install libgearman-* libevent-devel-2.0.21-4.el7.x86_64.rpm  gearmand-1.1.12-18.el7.x86_64.rpm  php-pecl-gearman-1.1.2-1.el7.x86_64.rpm  -y 

启动服务:

[root@server1 ~]# systemctl start gearmand

在这里插入图片描述

安装 lib_mysqludf_json

lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式。通常,数据库中的数据映
射为 JSON 格式,是通过程序来转换的。

server3

get lib_mysqludf_json-master.zip
[root@server3 ~]# yum install unzip -y
[root@server3 ~]# unzip lib_mysqludf_json-master.zip
[root@server3 ~]# yum install  mariadb-devel -y
[root@server3 ~]# yum install gcc -y
[root@server3 ~]# cd lib_mysqludf_json-master/
[root@server3 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c

查看mysql的模块目录:

[root@server3 lib_mysqludf_json-master]# mysql
MariaDB [(none)]> show global variables like 'plugin_dir';

在这里插入图片描述

拷贝 lib_mysqludf_json.so 模块:

[root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/

注册UDF函数

MariaDB [(none)]> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';

查看函数:

MariaDB [(none)]> select * from mysql.func;

在这里插入图片描述

安装 gearman-mysql-udf

这个插件是用来管理调用 Gearman 的分布式的队列。
https://launchpad.net/gearman-mysql-udf

[root@server3 ~]# yum install libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm  libevent-devel-2.0.21-4.el7.x86_64.rpm -y
get gearman-mysql-udf-0.6.tar.gz
[root@server3 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz 
[root@server3 ~]# cd gearman-mysql-udf-0.6/
[root@server3 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/
[root@server3 gearman-mysql-udf-0.6]# make & make install

在这里插入图片描述

注册UDF函数

MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';

查看函数:

MariaDB [(none)]> select * from mysql.func;

在这里插入图片描述

指定 gearman 的服务信息

[root@server3 ~]# yum install gearmand-1.1.12-18.el7.x86_64.rpm -y
[root@server3 ~]# systemctl start  gearmand.service
root@server1 ~]# yum install gearmand-1.1.12-18.el7.x86_64.rpm -y
[root@server3 ~]# mysql
MariaDB [(none)]> SELECT gman_servers_set('172.25.3.1:4730');

在这里插入图片描述

编写 mysql 触发器(根据实际情况编写)

[root@server3 ~]# vim test.sql
use test;
DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as
`id`, NEW.name as `name`));
END$$
DELIMITER ;
[root@server3 ~]# mysql < test.sql

查看触发器:

MariaDB [(none)]> SHOW TRIGGERS FROM test;

在这里插入图片描述

编写 gearman 的 worker 端

[root@server1 ~]# cat worker.php 
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');
 
$redis = new Redis();
$redis->connect('172.25.3.2', 6379);
 
while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $work->name);
}
?>

后台运行 worker

[root@server1 ~]# nohup php worker.php &

更新 mysql 中的数据

MariaDB [(none)]> update test.test set name='hello' where id=1;

查看redis

[root@server2 utils]# redis-cli 
127.0.0.1:6379> get 1
"hello"
127.0.0.1:6379> 

在这里插入图片描述

<think>首先,用户的问题是:“我想了解如何部署和使用Redis服务请问Redis服务部署教程及使用指南”。这需要我提供Redis部署和使用指南。系统级指令:-所有行内数学表达式用$...$格式:在这个上下文中,可能不需要数学表达式,因为Redis是数据库系统,不是数学主题。但如果有必要,比如解释性能公式等,要遵循指令。目前,似乎不需要。-独立公式必须用$$...$$格式:同样,可能不需要。-LaTeX语法正确:确保任何数学内容正确。-使用中文回答:整个回答要用中文。-生成相关问题:在回答结束后,添加相关问题部分。-回答中引用的段落末尾自然地添加引用标识:如[^1]。用户提供了两个引用:[^1]和[^2],来自“Redis集群部署指南”和“深入Redis集群部署”。用户提供的内容:-[^1]:描述了在/tmp目录下启动3个Redis实例的命令。-[^2]:提到了测试Redis集群的命令,如./redis-trib.rbcheck。用户的问题是关于部署和使用Redis服务。用户提供的引用是针对集群部署的,但用户问题更广泛:“部署和使用Redis服务”,可能包括单机部署和集群部署。我需要基于引用内容,但也覆盖基本部署。用户上一次的问题是:“Redis服务部署教程及使用指南”,这似乎是首次互动。系统提示中说:“请尽可能多的参考用户上一次的问题和你的回答”,但在这里,用户没有上一次的提问记录;这可能是对话的起始。所以,我需要基于当前查询。构建回答:-结构清晰:帮助用户逐步解决问题。步骤应该逻辑清晰。-内容真实可靠:提供准确的Redis部署指南。回忆或基于通用知识:-部署Redis:通常是下载、编译、配置、启动。-使用Redis:包括启动服务器、使用客户端操作数据。-引用中提到集群部署,所以也应该包括集群部分。-参考引用:自然地融入引用。-[^1]描述了启动实例的命令,可以在部署步骤中引用。-[^2]提到测试命令,可以在验证部分引用。回答大纲:1.**介绍**:简要介绍Redis是什么(开源内存数据存储)。2.**部署步骤**:-先介绍单机部署:下载、编译、配置、启动。-然后集群部署:涉及多个实例配置(引用[^1])。3.**使用指南**:-如何使用Redis命令行接口(CLI)。-基本操作:如设置键值、获取数据。4.**集群部署细节**:-包括启动多个实例(如引用[^1])。-测试集群(如引用[^2])。5.**结论**:总结重要性。6.**相关问题**:生成相关问题。结尾生成相关问题:-类似示例中的风格:如“快速排序”例子结束后有相关问题。-问题应围绕Redis部署和使用。引用标识:在相关段落末尾添加[^1]或[^2]。完整回答结构:-使用中文。-没有数学表达式,但如果涉及到指标解释,可以包括。但Redis部署主要不涉及数学。-LaTeX:如果解释吞吐量公式等,比如每秒操作数,但可能不需要。跳过。步骤:1.准备环境:确保系统有需求(如gcc)。2.下载和编译Redis。3.配置Redis实例(单机)。4.启动Redis服务器。5.使用RedisCLI。6.集群部署:设置多个实例。-在集群部分,引用[^1]的启动命令。7.测试集群功能:使用如redis-trib.rb(引用[^2])。8.引用结束时加[^1]或[^2]。最终回答:-清晰段落。-结尾添加“相关问题”部分。</think> ### Redis服务部署教程及使用指南 Redis是一个开源的内存数据结构存储系统,常用作数据库、缓存和消息代理。它具有高性能、丰富的数据类型和支持持久化等特点。本文将提供基于Linux环境的完整部署和使用指南,内容真实可靠,步骤清晰易操作。部署包括单机部署和集群部署(参考提供的引用),使用部分涵盖基本操作和集群验证。 #### **1. 准备工作** 在部署Redis前,确保系统满足以下要求: - **操作系统**:推荐Linux发行版(如Ubuntu、CentOS),需要安装基本开发工具(如GCC)。 - **权限**:确保你有root或sudo权限。 - **下载Redis**:从官方源获取稳定版本。执行以下命令: ```bash sudo apt update && sudo apt install build-essential # 安装编译工具(针对Debian/Ubuntu) wget http://download.redis.io/releases/redis-7.0.12.tar.gz # 下载Redis(示例版本) tar xzf redis-7.0.12.tar.gz # 解压 cd redis-7.0.12 ``` #### **2. 单机部署** Redis单机部署简单高效,适合开发和测试环境。步骤包括编译、配置和启动服务。 - **编译Redis源码**: 进入解压目录编译Redis: ```bash make # 编译源码 sudo make install # 安装到系统目录 ``` 编译完成后,Redis可执行文件将安装在`/usr/local/bin`。 - **配置Redis实例**: Redis默认配置文件为`redis.conf`。复制并编辑配置文件: ```bash cp redis.conf /etc/redis/ # 复制配置文件(可选目录) cd /etc/redis nano redis.conf # 编辑配置文件(建议设置daemonize为yes以守护进程运行) ``` 关键配置项: - `bind 127.0.0.1`:限制本地访问,适合安全环境。 - `port 6379`:默认端口号。 - `save 900 1`:设置持久化规则(如900秒内至少1次写入保存到磁盘)。 - **启动Redis服务**: 使用配置文件启动服务: ```bash redis-server /etc/redis/redis.conf # 启动Redis实例 ``` 验证是否运行:检查进程`ps aux | grep redis`或连接客户端`redis-cli ping`(应返回`PONG`)。 #### **3. 集群部署** Redis集群用于高可用性和负载均衡,支持多个节点。参考提供的内容[^1][^2],步骤如下(以3节点为例): - **准备多个实例配置**: 创建3个不同端口的实例配置文件(如在`/tmp`目录下操作): ```bash mkdir /tmp/7001 /tmp/7002 /tmp/7003 # 创建节点目录 cp redis.conf /tmp/7001/redis.conf cp redis.conf /tmp/7002/redis.conf cp redis.conf /tmp/7003/redis.conf ``` 编辑每个配置文件,修改端口(如`port 7001`)并开启集群模式(添加`cluster-enabled yes`和`cluster-config-file nodes-7001.conf`)。确保`daemonize yes`以便后台运行。 - **启动多个Redis实例**: 在三个SSH窗口(或后台运行),执行启动命令(参考[^1]): ```bash # 第1个实例(窗口1) redis-server /tmp/7001/redis.conf # 第2个实例(窗口2) redis-server /tmp/7002/redis.conf # 第3个实例(窗口3) redis-server /tmp/7003/redis.conf ``` 启动后,每个实例日志位于对应目录(如`/tmp/7001/redis.log`),方便监控。 - **创建Redis集群**: 使用`redis-trib.rb`脚本(需安装Ruby)设置集群: ```bash gem install redis # 安装Redis gem依赖 ./src/redis-trib.rb create --replicas 0 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 # 创建集群(--replicas 0表示无副本) ``` 工具会提示确认集群分片(slot分配)。 - **测试集群功能**: 验证集群状态,确保数据一致性(参考[^2]): ```bash ./src/redis-trib.rb check 127.0.0.1:7001 # 检查节点和槽位分布 ``` 如果所有节点正常,输出显示“Cluster is OK”。您还可以测试数据重定向: ```bash redis-cli -c -p 7001 set foo bar # 在7001端口设置键值 redis-cli -c -p 7002 get foo # 在7002端口获取,应自动重定向并返回bar ``` 集群模式能处理跨节点请求,确保数据正确存储和读取[^2]。 #### **4. Redis使用指南** 部署完成后,通过Redis命令行接口(CLI)进行基本操作。核心命令包括: - **连接Redis**: - 单机连接:`redis-cli -p 6379`(默认端口)。 - 集群连接:`redis-cli -c -p 7001`(使用`-c`选项自动重定向)。 - **基本数据操作**: - 设置键值:`SET key value`(如`SET user:name "Alice"`)。 - 获取键值:`GET key`。 - 使用哈希表:`HSET user:123 name "Bob" age 30`,然后`HGETALL user:123`。 - **高级功能**: - 持久化:手动保存数据`SAVE`,或使用BGSAVE后台保存。 - 监控:`INFO`命令查看系统状态(如内存使用)。 - 扩展:安装Redis Modules(如RedisJSON处理JSON数据)。 - **安全最佳实践**: - 设置密码:在配置文件中添加`requirepass yourpassword`。 - 防火墙限制:仅开放必要端口(如6379或7000-7003)。 #### **5. 注意事项** - **性能优化**:对于集群,确保节点分布在多台物理机以避免单点故障;单机部署时,调整`maxmemory`限制内存使用。 - **错误排查**:查看日志文件(如`/tmp/7001/redis.log`);常见问题包括端口冲突或配置文件错误。 - **生产环境建议**:使用系统服务管理(如systemd)和监控工具(如Prometheus)。 - 整个部署过程验证了Redis的高效性,集群测试确保在节点故障时能自动恢复[^2]。 通过上述步骤,您已完成了Redis部署和使用。集群部署能提升吞吐量和可用性[^1],适合于大规模应用场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值