linux 部署 Redis单机 Redis集群(主从模式) java开发redis

本文介绍如何在Linux环境下部署Redis单机及主从集群,并提供了一个Java操作Redis的工具类示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.linux 部署 redis单机
1.1 上传 tar 并解压安装包,本次部署的版本是 redis-4.0.11
tar -zxvf redis-4.0.11.tar.gz
1.2 编译安装

yum -y install gcc gcc-c++
make
make PREFIX=/usr/local/redis-4.0.11 install
mkdir /usr/local/redis-4.0.11/etc/
cp /opt/soft/redis.conf  /usr/local/redis-4.0.11/etc/
## 将 启动脚本放到配置环境
cp /usr/local/redis-4.0.11/bin/redis-benchmark redis-cli redis-server  /usr/bin/
## 使其生效
source /etc/profile

1.3修改配置文件
vim /usr/local/redis-4.0.11/etc/redis.conf

# 修改一下配置
# redis以守护进程的方式运行
# no表示不以守护进程的方式运行(会占用一个终端)
daemonize yes
# 客户端闲置多长时间后断开连接,默认为0关闭此功能 timeout 300
# 设置redis日志级别,默认级别:notice
loglevel verbose
# 设置日志文件的输出方式,如果以守护进程的方式运行redis 默认:""
# 并且日志输出设置为stdout,那么日志信息就输出到/dev/null里面去了
logfile stdout
# 设置密码授权
requirepass root
# 监听ip
bind 192.168.174.206 

1.4设计个启动脚本

#!/bin/bash
#chkconfig: 2345 80 90
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis-4.0.11/bin/redis-server
REDIS_CLI=/usr/local/redis-4.0.11/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis-4.0.11/etc/redis.conf"
case "$1" in
        start)
                if [ -f $PIDFILE ]
                then
                                echo "$PIDFILE exists, process is already running or crashed"
                else
                                echo "Starting Redis server..."
                                $EXEC $CONF
                fi
                if [ "$?"="0" ]
                then
                                echo "Redis is running..."
                fi
                ;;
        stop)
                if [ ! -f $PIDFILE ]
                then
                                echo "$PIDFILE does not exist, process is not running"
                else
                                PID=$(cat $PIDFILE)
                                echo "Stopping ..."
                                $REDIS_CLI -p $REDISPORT SHUTDOWN
                                while [ -x ${PIDFILE} ]
                                do
                                        echo "Waiting for Redis to shutdown ..."
                                        sleep 1
                                done
                                echo "Redis stopped"
                fi
                ;;
        restart|force-reload)
                ${0} stop
                ${0} start
                ;;
*)
 echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac

1.5 整合脚本

# 复制脚本文件到init.d目录下
cp redis /etc/init.d/
## 赋予脚本可执行的权限
chmod +x /etc/init.d/redis
##查看并添加服务
chkconfig –list
chkconfig --add redis
chkconfig --level 2345 redis on
##启动服务
/etc/init.d/redis start 
/etc/init.d/redis stop
##查看是否启动
ps -el|grep redis
netstat -an|grep 6379

1.6 客户端测试

redis-cli -h hdp2
auth root
keys *
set k1 v1

1.7 在windows 上使用redis-desktop-manager
在这里插入图片描述
在这里插入图片描述

2.redis 主从集群部署
这里做下服务器规划
192.168.174.206 hdp2 master
192.168.174.205 hdp1 salve
已经在 hdp2 上部署单机模式,在hdp2 上部署redis 不需要更改,现在将hdp2 上的redis 远程拷贝到hdp1 上.接下来,在hdp1操作.
2.1 修改配置文件中的参数
vim /usr/local/redis-4.0.11/etc/redis.conf

bind 192.168.174.205

slaveof 192.168.174.206 6379

masterauth root

2.2 将启动的脚本拷贝到 /usr/bin/

cp redis-benchmark redis-cli redis-server /usr/bin/

2.3 启动脚本 进行配置

## 单机版的注解一样
cp redis /etc/init.d/
chmod +x /etc/init.d/redis
chkconfig –list
chkconfig --add redis
chkconfig --level 2345 redis on

保证启动从服务器的时候master安装目录下的dump.rdb文件被删除。
 rm -rf /usr/bin/dump.rdb
systemctl start redis

2.4 启动脚本,查看主从关系
两台服务器分别执行
2.4.1主节点的结果

./redis start
hdp2:6379> auth root
OK
hdp2:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.174.205,port=6379,state=online,offset=98,lag=1
master_replid:65015ede6d093bd101bb53dce0334c1559d44c04
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98
hdp2:6379> set "test11" "kkk"
OK

2.4.2 从节点

hdp1:6379> auth root
OK
hdp1:6379> keys *
1) "test11"
2) "111"
3) "java_redis"
4) "keys_1"
hdp1:6379> set "test22" "test"
(error) READONLY You can't write against a read only slave.

从上面,可以发现主节点可以写,但是从节点是不能写入的.
3. java 操作redis 工具类

/**
 * @author daqu
 * @version 1.0
 * @date 2022/1/18 9:35
 * @describle : redis 连接工具
 */
public class RedisCache {

    /**
     * 定义pool 和单独的jedis
     */
    private static JedisPool pool =null;
    private static Jedis jedis = null;

    //连接池初始化参数

    private static final int port=6379;
    private static final int timeout=10*1000;
    private static final int maxIdle=10;
    private static final int minIdle =2;
    private static final int maxTotal =20;

    /**
     * 将初始化参数放到配置对象中
     * @return
     */
    private GenericObjectPoolConfig createConfig(){
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        config.setMaxIdle(maxIdle);
        config.setMaxTotal(maxTotal);
        config.setMinIdle(minIdle);
        return  config;
    }

    /**
     * 获取jedis 的连接池
     * @param ip
     * @return
     */
    public JedisPool connectRedisPool(String ip){
        if (pool == null){
            GenericObjectPoolConfig config = createConfig();
            pool = new JedisPool(config, ip, port, timeout);
        }
     return  pool;
    }


    /**
     * 获取jedis的连接
     * @param ip
     * @param port
     * @param auth
     * @return
     */
    public Jedis connectJedis(String ip,int port,String auth){
        if (jedis == null){
             jedis = new Jedis(ip, port);
             jedis.auth(auth);
        }
        return  jedis;
    }

    /**
     * 测试连接和连接池
     * @param args
     */
    public static void main(String[] args) {
        RedisCache redisCache = new RedisCache();
        Jedis jedis = redisCache.connectJedis("hdp2", port, "root");

        //测试连接
        System.out.println(jedis.ping());

        JedisPool pool = redisCache.connectRedisPool("hdp2");
        Jedis jedis1 = pool.getResource();
        jedis1.auth("root");
        System.out.println(jedis1.ping());

        //存数据
        jedis.set("java_redis","nice flink ");

        System.out.println(jedis.get("java_redis"));


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值