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"));
}
}