Redis单机版和伪集群的安装以及jedis的使用

一、安装

        下载安装

        下载:http://download.redis.io/releases/redis-3.0.0.tar.gz

        安装GCC(Ubuntu16.0.4环境下)

        sudo apt-get install gcc-4.8                                   

        参考地址:download.redis.io/releases/redis-3.0.0.tar.gz

        3、 安装
        我喜欢将软件安装在/opt目录下,而不是/usr/local/下。
        创建redis目录:
        cd /opt
        sudo mkdir redis
        复制redis安装包到这
        sudo cp  ~/下载/redis-3.0.0.tar.gz  /opt/redis
        解压:
        lxj@Lenovo:/opt/redis$ sudo tar -zxvf redis-3.0.0.tar.gz
  
        编译:

        安装到redis目录:

后端启动:

            将redis解压文件下的redis.conf 拷贝到bin目录下

        lxj@Lenovo:/opt/redis/redis-3.0.0$ sudo cp redis.conf /opt/redis/bin/

        修改redis.conf的权限
        lxj@Lenovo:/opt/redis/bin$ chmod 777 redis.conf
        编辑将daemonize yes置为yes支持后端启动
        后端启动:
        lxj@Lenovo:/opt/redis/bin$ ./redis-server redis.conf
        查看redis进程:ps  -aux|grep redis

关闭:./bin/redis-cli shutdown

        redis常用的命令:

        数据类型:
        String、Hash、List、set、treeset
        用的String最多!
        Set str 1234
        get  str
        incr  st 没有这个就默认的值为1,每使用一次就加一

        decr st 减一

设置key的有效期:
        expire str 100
        ttl 查看key的有效期   -1 永久保存   -2 不存在

        keys  * 查看redis中有多少个key。

二、Jedis客户端使用

        添加maven依赖

<!-- Redis客户端 -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<jedis.version>2.7.2</jedis.version>
		</dependency>
        
	@Test
	public void JedisTest() {
//		创建一个Jedis对象,指定服务的IP和端口号
		Jedis  jedis = new Jedis("127.0.0.1", 6379);
//		直接操作数据库
		jedis.set("lier", "boolean");
		System.out.println(jedis.get("lier"));
		jedis.close();
	}
	
	public void JedisPoolTest() {
//		jedis连接池:
		/*
		 * 1、创建一个数据库连接池
		 * 2、从连接池获取连接
		 * 3、获取数据
		 * 4、关闭连接
		 * 系统关闭钱关闭连接池。=
		 */
		JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
		Jedis jedis = jedisPool.getResource();
		System.out.println(jedis.get("lier"));
		jedis.close();
		jedisPool.close();
	}

  三、redis伪集群搭建

       搭建

     1、创建集群目录
    sudo mkdir  cluster
    看情况是否改变权限

    2、复制bin目录下的文件 

3、修改端口、设置集群模式
    端口从7001-7006
    cluster-enabled yes
    4、启动这六个redis实例
    vim start-all.sh
    cd redis_01
    ./redis-server redis.conf
    cd ..
    cd redis_02
    ./redis-server redis.conf
    cd ..
    cd redis_03
    ./redis-server redis.conf
    cd ..
    cd redis_04
    ./redis-server redis.conf
    cd ..
    cd redis_05
    ./redis-server redis.conf
    cd ..
    cd redis_06
    ./redis-server redis.conf
    
然后chmod +x start-all.sh 添加执行权限
    安装ruby运行环境
    sudo apt-get ruby 安装最新版的ruby
    安装Rubygems安装
    https://rubygems.org/pages/download
    解压,sudo  ruby setup.rb
    安装redis和ruby的借口
    Gem install redis --version 3.0.0
    注意:gem install redis --version 3.0.0 失败的话,需要修改一下gem的源
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
    不过我的没有换成功
    直接下载redis-3.0.0.gem
    sudo gem install redis-3.0.0.gem
    -rwxrwxr-x 1 root root   48141 4月   1  2015 redis-trib.rb*
    执行脚本命令
    ./redis-trib.rb create --replicas 1 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 127.0.0.1:7006
    1的意思是指每个节点有一个备份机
    Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: 738265181aa908d53c2ffc3bbd3d47a7c6e1f418 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: ba6818a1ff315336fb3d87b8cd9c13b0fbe9768b 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: 614cc5f5ba6eaef636f3e8a5bd2f507ef33487ba 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
S: 70cbd4ec3a02f744a1fa347e0e5ca4e2e65ca64b 127.0.0.1:7004
   replicates 738265181aa908d53c2ffc3bbd3d47a7c6e1f418
S: 94ab07591b4e9741e71252187cb352cfd7dc6c99 127.0.0.1:7005
   replicates ba6818a1ff315336fb3d87b8cd9c13b0fbe9768b
S: 02f4525afb8dd6bf821de59b8c44327d91a9238b 127.0.0.1:7006
   replicates 614cc5f5ba6eaef636f3e8a5bd2f507ef33487ba

从节点是否槽看到12了

    使用(单机、连接池、集群模式)

        

策略+实现类策略模式:针对不同的场景使用不同的实现类
	package com.taotao.content.jedis;

public interface JedisClient {

	String set(String key, String value);
	String get(String key);
	Boolean exists(String key);
	Long expire(String key, int seconds);
	Long ttl(String key);
	Long incr(String key);
	Long hset(String key, String field, String value);
	String hget(String key, String field);
	Long hdel(String key, String... field);
}
package com.taotao.content.jedis;

import org.springframework.beans.factory.annotation.Autowired;

import redis.clients.jedis.JedisCluster;
//集群模式
public class JedisClientCluster implements JedisClient {
	
	@Autowired
	private JedisCluster jedisCluster;

	@Override
	public String set(String key, String value) {
		return jedisCluster.set(key, value);
	}

	@Override
	public String get(String key) {
		return jedisCluster.get(key);
	}

	@Override
	public Boolean exists(String key) {
		return jedisCluster.exists(key);
	}

	@Override
	public Long expire(String key, int seconds) {
		return jedisCluster.expire(key, seconds);
	}

	@Override
	public Long ttl(String key) {
		return jedisCluster.ttl(key);
	}

	@Override
	public Long incr(String key) {
		return jedisCluster.incr(key);
	}

	@Override
	public Long hset(String key, String field, String value) {
		return jedisCluster.hset(key, field, value);
	}

	@Override
	public String hget(String key, String field) {
		return jedisCluster.hget(key, field);
	}

	@Override
	public Long hdel(String key, String... field) {
		return jedisCluster.hdel(key, field);
	}

}
package com.taotao.content.jedis;

import org.springframework.beans.factory.annotation.Autowired;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
//连接池模式
public class JedisClientPool implements JedisClient {
	
	@Autowired
	private JedisPool jedisPool;

	@Override
	public String set(String key, String value) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.set(key, value);
		jedis.close();
		return result;
	}

	@Override
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.get(key);
		jedis.close();
		return result;
	}

	@Override
	public Boolean exists(String key) {
		Jedis jedis = jedisPool.getResource();
		Boolean result = jedis.exists(key);
		jedis.close();
		return result;
	}

	@Override
	public Long expire(String key, int seconds) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.expire(key, seconds);
		jedis.close();
		return result;
	}

	@Override
	public Long ttl(String key) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.ttl(key);
		jedis.close();
		return result;
	}

	@Override
	public Long incr(String key) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.incr(key);
		jedis.close();
		return result;
	}

	@Override
	public Long hset(String key, String field, String value) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.hset(key, field, value);
		jedis.close();
		return result;
	}

	@Override
	public String hget(String key, String field) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.hget(key, field);
		jedis.close();
		return result;
	}

	@Override
	public Long hdel(String key, String... field) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.hdel(key, field);
		jedis.close();
		return result;
	}
}

    Spring相关配置(两者开启一个就行)

<!-- 开启注解,一般开启报扫描会自动开启注解,但是不能代替注解驱动 -->
   <context:annotation-config></context:annotation-config>
	<!-- redis单机版 -->
	<!-- <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
		<constructor-arg name="host" value="127.0.0.1"></constructor-arg>
		<constructor-arg name="port" value="6379"></constructor-arg>
	</bean>
	<bean id="jedisClientPool" class="com.taotao.content.jedis.JedisClientPool"></bean> -->
	
	<!-- redis集群 -->
	<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg>
			<set>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="127.0.0.1"></constructor-arg>
					<constructor-arg name="port" value="7001"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="127.0.0.1"></constructor-arg>
					<constructor-arg name="port" value="7002"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="127.0.0.1"></constructor-arg>
					<constructor-arg name="port" value="7003"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="127.0.0.1"></constructor-arg>
					<constructor-arg name="port" value="7004"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="127.0.0.1"></constructor-arg>
					<constructor-arg name="port" value="7005"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="127.0.0.1"></constructor-arg>
					<constructor-arg name="port" value="7006"></constructor-arg>
				</bean>
			</set>
		</constructor-arg>
	</bean>
	<bean id="jedisClientCluster" class="com.taotao.content.jedis.JedisClientCluster"></bean>

        测试

测试:
	@Test
	public void JedisClientTest() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:Spring/ApplicationConfig-redis.xml");
		JedisClient clent=(JedisClient) ctx.getBean(JedisClient.class);
		System.out.println(clent.get("name"));
	}
        业务代码加入缓存
@Override
	public List<TbContent> getTbContentsByContentCategory(Long contentCategoryId) {
		// 先查询缓存中是否有数据,如果有就返回,没有查询数据,将数据放入缓存中然后在返回数据
		// 查询和添加缓存不能影响正常的业务逻辑
		List<TbContent> contents = null;
		String ad1 = null;
		try {
			ad1 = jedisClient.hget(INDEX_CONTENT, contentCategoryId + "");
			if (StringUtils.isNotEmpty(ad1)) {
				contents = JsonUtils.jsonToList(ad1, TbContent.class);
				return contents;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		TbContentExample contentExample = new TbContentExample();
		Criteria criteria = contentExample.createCriteria();
		criteria.andCategoryIdEqualTo(contentCategoryId);
		contents = contentMapper.selectByExample(contentExample);
		try {
			jedisClient.hset(INDEX_CONTENT, contentCategoryId + "", JsonUtils.objectToJson(contents));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return contents;
	}

缓存的同步处理,对于后台更新的数据,要及时同步所以在增删改需要清除缓存


            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值