简单说redis(下)

我之前写过一篇简单说redis(上),当初本来是要写下的,后来工作原因,忘了.现在重新补上.
在这过程中出现了yum报错问题

1.linux安装

1.下载
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
2.解压

tar -zxvf redis-3.2.8.tar.gz -C ../servers/
3.安装c++
yum -y install gcc-c++
4.安装tcl
yum  -y  install  tcl
5.编译
make
编译完后测试
make test
6.修改配置
//先创建两个目录
mkdir -p /export/servers/redis-3.2.8/logs
mkdir -p /export/servers/redis-3.2.8/redisdata
//修改
vim redis.conf
//修改内容
bind node-1
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/export/servers/redis-3.2.8/logs/redis.log"
dir /export/servers/redis-3.2.8/redisdata
7.执行启动
src/redis-server redis.conf
8.连接
src
redis-cli -h node-1

2.java示例代码

package jedisDemo.cn.test;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisDemo1 {

	private JedisPool jedisPool;
	private JedisPoolConfig config;

	@Before
	public void redisConnectionPool() {
		System.out.println("lianjie");

		config = new JedisPoolConfig();
		config.setMaxIdle(10);
		config.setMaxWaitMillis(3000);
		config.setMaxTotal(50);
		config.setMinIdle(5);
		jedisPool = new JedisPool(config, "node-1", 6379);

	}

	@After
	public void closePool() {
		jedisPool.close();
	}

	// string
	@Test
	public void addStr() {
		Jedis jedis = jedisPool.getResource();
		// 添加
		jedis.set("key2", "helloworld");
		// 查询
		String value = jedis.get("key2");
		System.out.println(value);
		// 删除
		jedis.del("key2");
		// 整数型增长
		jedis.set("inkey", "1");
		jedis.incr("inkey");
		System.out.println(jedis.get("inkey"));
		jedis.incrBy("inkey", 3);
		System.out.println(jedis.get("inkey"));

	}

	// hash
	@Test
	public void addHash() {
		Jedis jedis = jedisPool.getResource();
		// 添加
		jedis.hset("hashkey1", "field1", "jedisval1");
		jedis.hset("hashkey1", "field2", "jedisval2");
		// 获取
		Map<String, String> hgetAll = jedis.hgetAll("hashkey1");
		for (String field : hgetAll.keySet()) {
			System.out.println("field=" + field);
			System.out.println("val=" + hgetAll.get(field));
		}

		// 修改
		jedis.hset("hashkey1", "field2", "jedisval321");
		Map<String, String> hgetAll2 = jedis.hgetAll("hashkey1");
		for (String field : hgetAll2.keySet()) {
			System.out.println("field2=" + field);
			System.out.println("val2=" + hgetAll2.get(field));
		}

		// 删除
		jedis.del("hashkey1");
		Map<String, String> hgetAll3 = jedis.hgetAll("hashkey1");
		for (String field : hgetAll3.keySet()) {
			System.out.println("field3=" + field);
			System.out.println("val3=" + hgetAll3.get(field));
		}
	}

	// list
	@Test
	public void addList() {
		Jedis jedis = jedisPool.getResource();
		// 从左插入
		jedis.lpush("listKey1", "jedis1", "jedis2", "jedis3", "jedis2");
		// 获取
		List<String> listkey = jedis.lrange("listKey1", 0, -1);
		for (String s : listkey) {
			System.out.println(s);
		}
		// 从左边弹出
		String listkey2 = jedis.lpop("listKey1");
		System.out.println("lpop=" + listkey2);
	}

	@Test
	public void addSet() {
		Jedis jedis = jedisPool.getResource();
		jedis.sadd("setKey1", "jedis1", "jedis2", "jedis3", "jedis2");
		Set<String> set = jedis.smembers("setKey1");
		for (String s : set) {
			System.out.println("set=" + s);
		}
		// 移除掉一个数据
		jedis.srem("setKey1", "jedis3");

		Set<String> set2 = jedis.smembers("setKey1");
		for (String s : set2) {
			System.out.println("set2=" + s);
		}
	}

}

3.主从复制
安装

和前面一样
修改配置vim redis.conf,将node-1改成node-2,node-3
以及添加
slaveof node-1 6379


bind node-2
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/export/servers/redis-3.2.8/logs/redis.log"
dir /export/servers/redis-3.2.8/redisdata
slaveof node-1 6379  


Sentinel(哨兵)

1.修改哨兵配置文件
vim sentinel.conf
#修改bind配置,每台机器修改为自己对应的主机名
bind node-1  
#配置sentinel服务后台运行
daemonize yes
#修改三台机器监控的主节点,现在主节点是node服务器
sentinel monitor mymaster node-1 6379 2

#修改bind配置,每台机器修改为自己对应的主机名
bind node-2  
#配置sentinel服务后台运行
daemonize yes
#修改三台机器监控的主节点,现在主节点是node01服务器
sentinel monitor mymaster node-1 6379 2

#修改bind配置,每台机器修改为自己对应的主机名
bind node-3  
#配置sentinel服务后台运行
daemonize yes
#修改三台机器监控的主节点,现在主节点是node01服务器
sentinel monitor mymaster node-1 6379 2


启动
src/redis-sentinel sentinel.conf

哨兵模式java代码

package jedisDemo.cn.test;

import java.util.Arrays;
import java.util.HashSet;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

public class SentinelDemo1 {

	@Test
	public void testSentinel() {
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxIdle(10);
		config.setMaxWaitMillis(3000);
		config.setMaxTotal(30);
		config.setMinIdle(5);
		//哨兵信息
		HashSet<String> sentinels = new HashSet<String>(Arrays.asList("node-1:26379","node-2:26379","node-3:26379"));
		//创建连接池
		JedisSentinelPool jsPool=new JedisSentinelPool("mymaster", sentinels,config);
		//获取jedis
		Jedis jedis = jsPool.getResource();
		jedis.set("sentinelKey", "sentinelValue");
		jedis.close();
	}

}

4.集群
三主三从,需要六台虚拟机,不过资源有限,用一台模拟

1.解压
tar -zxf redis-3.2.8.tar.gz -C /export/

2.安装环境和编译
yum -y install gcc-c++ tcl

cd /export/redis-3.2.8
make && make install

3.创建redis不同实例的配置文件夹
cd /export/redis-3.2.8
mkdir -p /export/redis-3.2.8/clusters/7001
mkdir -p /export/redis-3.2.8/clusters/7002
mkdir -p /export/redis-3.2.8/clusters/7003
mkdir -p /export/redis-3.2.8/clusters/7004
mkdir -p /export/redis-3.2.8/clusters/7005
mkdir -p /export/redis-3.2.8/clusters/7006

4.修改配置文件
mkdir -p /export/redis-3.2.8/logs
mkdir -p /export/redis-3.2.8/redisdata/7001
mkdir -p /export/redis-3.2.8/redisdata/7002
mkdir -p /export/redis-3.2.8/redisdata/7003
mkdir -p /export/redis-3.2.8/redisdata/7004
mkdir -p /export/redis-3.2.8/redisdata/7005
mkdir -p /export/redis-3.2.8/redisdata/7006

第一个文件
vim  /export/redis-3.2.8/redis.conf
bind node-1
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /var/run/redis_7001.pid
logfile "/export/redis-3.2.8/logs/7001.log"
dir /export/redis-3.2.8/redisdata/7001
第二个到第六个,将第一个复制到7002-7006中,将7001改成7002-7006,这里推荐可以使用notepad工具进行修改
cp /export/redis-3.2.8/redis.conf /export/redis-3.2.8/clusters/7002
vim  /export/redis-3.2.8/clusters/7002/redis.conf

5.启动
cd /export/redis-3.2.8
src/redis-server clusters/7001/redis.conf
src/redis-server clusters/7002/redis.conf
src/redis-server clusters/7003/redis.conf
src/redis-server clusters/7004/redis.conf
src/redis-server clusters/7005/redis.conf
src/redis-server clusters/7006/redis.conf

6.安装ruby运行环境
yum install ruby
yum install rubygems
gem install redis
在执行gem install redis可能报ruby版本低问题,进行升级
cd /export/redis-3.2.8

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

curl -sSL https://get.rvm.io | bash -s stable
执行这条命令时,可能会报curl: (7) couldn't connect to host
需要
sudo vim /etc/hosts
#绑定host
199.232.28.133 raw.githubusercontent.com


source /etc/profile.d/rvm.sh 

rvm list known//查看可用版本
rvm install 2.4.1 //安装想要的版本

7.创建集群
cd /export/redis-3.2.8
gem install redis
src/redis-trib.rb create --replicas 1 node-1:7001 node-1:7002 node-1:7003 node-1:7004 node-1:7005 node-1:7006

如果出错,将 node-1换成p地址
之后再执行,如果报already busy的话,
src/redis-cli  -h node01 -c -p 7001
输入cluster reset
  flushall
7001-70066依次执行

8.连接
cd /export/redis-3.2.8
src/redis-cli  -h node-1 -c -p 7001

java操作

package jedisDemo.cn.test;

import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

public class SentinelDemo1 {

	@Test
	public void testSentinel() {
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxIdle(10);
		config.setMaxWaitMillis(3000);
		config.setMaxTotal(30);
		config.setMinIdle(5);
		//哨兵信息
		HashSet<String> sentinels = new HashSet<String>(Arrays.asList("node-1:26379","node-2:26379","node-3:26379"));
		//创建连接池
		JedisSentinelPool jsPool=new JedisSentinelPool("mymaster", sentinels,config);
		//获取jedis
		Jedis jedis = jsPool.getResource();
		jedis.set("sentinelKey", "sentinelValue");
		jedis.close();
	}

	
	@Test
	public void jedisClusterTest() throws IOException {
	    Set<HostAndPort> portSet = new HashSet<HostAndPort>();
	  
	    portSet.add(new HostAndPort("node-1",7001));
	    portSet.add(new HostAndPort("node-1",7002));
	    portSet.add(new HostAndPort("node-1",7003));
	    portSet.add(new HostAndPort("node-1",7004));
	    portSet.add(new HostAndPort("node-1",7005));
	    portSet.add(new HostAndPort("node-1",7006));
	    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
	    jedisPoolConfig.setMaxIdle(10);
	    jedisPoolConfig.setMaxWaitMillis(3000);
	    jedisPoolConfig.setMaxTotal(30);
	    jedisPoolConfig.setMinIdle(5);

	    JedisCluster jedisCluster = new JedisCluster(portSet, jedisPoolConfig);

	    jedisCluster.set("clusterTest","clustervalue");//这个值不一定在7001中,可能在7002或7003中
	    
	    String string = jedisCluster.get("clusterTest");
	    System.out.println(string);
	    jedisCluster.close();

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值