Spring整合Redis

1. Redis集群-创建Redis集群(对应124-125)

(1) 如何搭建Redis集群?
第一步 安装 ruby 环境 命令: yum install ruby
第二步 安装 ruby 的包管理器 命令:yum install rubygems
第三步 进入到 redis 的安装目录下的 src 目录下找到到 redis-trib.rb 这个文件 这是集群 时需要的脚本
第四步 这个脚本的执行需要依赖于一些其他的 ruby 包 所以我们还要下载一个 redis-3.0.0.gem 将这个文件上传到 linux 服务器中
第五步 安装这个 ruby 包 命令:gem install redis-3.0.0.gem
第六步 先启动 redis 的 6 个实例 先在 local 目录下创建一个目录名称为:redis-cluster 命令:mkdir redis-cluster
第七步 将安装好的 redis 下的 bin 目录拷贝到 redis-cluster 目录下 并起名为 redis01 命令:进入到 redis 目录下执行:cp -r bin …/redis-cluster/redis01
第九不 修改 redis.conf 配置文件 命令:vim redis.conf (1)修改端口:默认的为 6379 将六个 redis 实例的端口改成从 7001-7006 在配置文件 的 port 属性中。 (2)修改开启集群 在配置文件中搜索 cluster 找到后 将默认为注释的 cluster-enabled yes 去掉注释
第十步 将这个 redis01 拷贝 6 份到当前这个目录下 命令:cp -r redis01/ redis02 cp -r redis01/ redis03 cp -r redis01/ redis04 cp -r redis01/ redis05 cp -r redis01/ redis06
第十一步 修改拷贝的这些 redis 的端口 命令: [root@localhost redis-cluster]# vim redis02/redis.conf [root@localhost redis-cluster]# vim redis03/redis.conf [root@localhost redis-cluster]# vim redis04/redis.conf [root@localhost redis-cluster]# vim redis05/redis.conf
[root@localhost redis-cluster]# vim redis06/redis.conf
第十二步 把创建集群的 ruby 脚本复制到 redis-cluster 中 命令:[root@localhost src]# cp *.rb /usr/local/redis-cluster/
第十二步 创建一个能够批量启动的脚本程序 命令:vim startall.sh 第十三步 在脚本文件中添加命令 命令:
cd redis01 ./redis.server redis.conf
cd …
cd redis02 ./redis.server redis.conf
cd …
cd redis03 ./redis.server redis.conf
cd …
cd redis04 ./redis.server redis.conf
cd …
cd redis05 ./redis.server redis.conf
cd …
cd redis06 ./redis.server redis.conf
cd …
第十四步 将批量启动脚本设置为可执行权限 命令:chmod +x startall.sh
第十五步 执行这个批量启动的脚本 命令:[root@localhost redis-cluster]# ./startall.sh
第十六步 查看 redis 是否启动成功 命令:ps aux|grep redis
第十七步 创建集群 命令:
./redis-trib.rb create --replicas 1 192.168.70.145:8001 192.168.70.145:8002 192.168.70.145:8003 192.168.70.145:8004 192.168.70.145:8005 192.168.70.145:8006

2. Jedis操作Redis单机版

(1) 什么是Jedis?
Jedis 集成了redis的一些命令操作,封装了对redis命令的Java客户端
(2) 在代码中如何通过Jedis单机版操作Redis?

修改pom文件

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>
</dependencies>
public void testJedis(){
    Jedis jedis = new Jedis("192.168.56.130",6379);
    String set = jedis.set("key1", "hello");
    System.out.println(set);
    String key1 = jedis.get("key1");
    System.out.println(key1);
    System.out.println("-------------------------------");
    Long hset = jedis.hset("user", "username", "marry");
    System.out.println(hset);
    String hget = jedis.hget("user", "username");
    System.out.println(hget);
    jedis.close();
}

3. JedisPool的使用

(1) 在代码中如何通过Jedis连接池操作Redis?

/*使用连接池技术*/
public void testJedisPool(){
    JedisPool pool = new JedisPool("192.168.56.130",6379);
    Jedis jedis = pool.getResource();
    String hget = jedis.hget("user", "username");
    System.out.println(hget);
    jedis.close();
}

4. JedisCluster的使用

(1) 如何通过JedisCluster操作Redis集群?

/*使用redis集群*/
public void testJedisCluster() throws IOException {
    Set<HostAndPort> nodes = new HashSet<>();
    nodes.add(new HostAndPort("192.168.56.130",8001));
    nodes.add(new HostAndPort("192.168.56.130",8002));
    nodes.add(new HostAndPort("192.168.56.130",8003));
    nodes.add(new HostAndPort("192.168.56.130",8004));
    nodes.add(new HostAndPort("192.168.56.130",8005));
    nodes.add(new HostAndPort("192.168.56.130",8006));
    JedisCluster jedis = new JedisCluster(nodes);
    jedis.set("name","kevin");
    String name = jedis.get("name");
    System.out.println(name);
    jedis.close();
}

5. Spring整合Jedis单机版-配置整合

(1) 在Spring中如何整合Jedis单机版?
创建项目
修改pom文件
添加:

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.1.3.RELEASE</version>
    </dependency>
</dependencies>

编写接口

public interface JedisDao {
    public String set(String key,String value);
    public String get(String key);
    public Long hset(String hkey,String key,String value);
    public String hget(String hkey,String key);
}

编写单机版的实现类

public class JdeisDaoImplSingle implements JedisDao {
    @Autowired
    JedisPool pool;
    @Override
    public String set(String key, String value) {
        Jedis jedis = pool.getResource();
        return jedis.set(key, value);
    }

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

    @Override
    public Long hset(String hkey, String key, String value) {
        Jedis jedis = pool.getResource();
        return jedis.hset(hkey, key, value);
    }

    @Override
    public String hget(String hkey, String key) {
        Jedis jedis = pool.getResource();
        return jedis.hget(hkey, key);
    }
}

编写配置文件

<context:component-scan base-package="an.sz.jedis.dao"></context:component-scan>
 <!-- jedisPool的配置 -->
 <bean id="poolconfig" class="redis.clients.jedis.JedisPoolConfig">
     <!-- 最大连接数 -->
     <property name="maxTotal" value="30" />
     <!-- 最大空闲连接数 -->
     <property name="maxIdle" value="10" />
     <!-- 每次释放连接的最大数目 -->
     <property name="numTestsPerEvictionRun" value="1024" />
     <!-- 释放连接的扫描间隔(毫秒) -->
     <property name="timeBetweenEvictionRunsMillis" value="30000" />
     <!-- 连接最小空闲时间 -->
     <property name="minEvictableIdleTimeMillis" value="1800000" />
     <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
     <property name="softMinEvictableIdleTimeMillis" value="10000" />
     <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
     <property name="maxWaitMillis" value="1500" />
     <!-- 在获取连接的时候检查有效性, 默认false -->
     <property name="testOnBorrow" value="true" />
     <!-- 在空闲时检查有效性, 默认false -->
     <property name="testWhileIdle" value="true" />
     <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
     <property name="blockWhenExhausted" value="false" />
 </bean>
 <!-- 配置JedidesPool -->
 <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
     <constructor-arg name="poolConfig">
         <ref bean="poolconfig"/>
     </constructor-arg>
     <constructor-arg name="host">
         <value>192.168.56.130</value>
     </constructor-arg>
     <constructor-arg name="port">
         <value>6379</value>
     </constructor-arg>
 </bean>
 <bean id="jdeisDaoImplSingle"  class="an.sz.jedis.dao.impl.JdeisDaoImplSingle"></bean>
编写测试类
public class TestJedisSingle {
    public static void main(String[] args) {
        TestJedisSingle.testJedisSingle();
        //TestJedisSingle.testJedisCluster();
    }
    public static void testJedisSingle(){
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext-jedis.xml");
        JedisDao jedis = (JedisDao) app.getBean("jdeisDaoImplSingle");
        String set = jedis.set("name", "kevin");
        System.out.println(set);
        String name = jedis.get("name");
        System.out.println(name);
    }
}

6. Spring整合JedisCluster

(1) 在Spring中如何整合Jedis集群版?
在单机版redis的基础上编写集群版
编写接口的集群版的实现类

public class JdeisDaoImplCluster implements JedisDao {
    @Autowired
    JedisCluster cluster;

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

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

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

    @Override
    public String hget(String hkey, String key) {
        return cluster.hget(hkey, key);
    }
}

修改配置文件

<context:component-scan base-package="an.sz.jedis.dao"></context:component-scan>
 <!-- jedisPool的配置 -->
 <bean id="poolconfig" class="redis.clients.jedis.JedisPoolConfig">
     <!-- 最大连接数 -->
     <property name="maxTotal" value="30" />
     <!-- 最大空闲连接数 -->
     <property name="maxIdle" value="10" />
     <!-- 每次释放连接的最大数目 -->
     <property name="numTestsPerEvictionRun" value="1024" />
     <!-- 释放连接的扫描间隔(毫秒) -->
     <property name="timeBetweenEvictionRunsMillis" value="30000" />
     <!-- 连接最小空闲时间 -->
     <property name="minEvictableIdleTimeMillis" value="1800000" />
     <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
     <property name="softMinEvictableIdleTimeMillis" value="10000" />
     <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
     <property name="maxWaitMillis" value="1500" />
     <!-- 在获取连接的时候检查有效性, 默认false -->
     <property name="testOnBorrow" value="true" />
     <!-- 在空闲时检查有效性, 默认false -->
     <property name="testWhileIdle" value="true" />
     <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
     <property name="blockWhenExhausted" value="false" />
 </bean>
 <!-- 配置JedidesPool -->
 <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
     <constructor-arg name="poolConfig">
         <ref bean="poolconfig"/>
     </constructor-arg>
     <constructor-arg name="host">
         <value>192.168.56.130</value>
     </constructor-arg>
     <constructor-arg name="port">
         <value>6379</value>
     </constructor-arg>
 </bean>
<!-- <bean id="jdeisDaoImplSingle" class="an.sz.jedis.dao.impl.JdeisDaoImplSingle"></bean>-->

 <!-- JedislCluster -->
 <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
     <constructor-arg name="nodes">
         <set>
             <bean class="redis.clients.jedis.HostAndPort">
                 <constructor-arg name="host">
                     <value>192.168.56.130</value>
                 </constructor-arg>
                 <constructor-arg name="port">
                     <value>8001</value>
                 </constructor-arg>
             </bean>
             <bean class="redis.clients.jedis.HostAndPort">
                 <constructor-arg name="host">
                     <value>192.168.56.130</value>
                 </constructor-arg>
                 <constructor-arg name="port">
                     <value>8002</value>
                 </constructor-arg>
             </bean>
             <bean class="redis.clients.jedis.HostAndPort">
                 <constructor-arg name="host">
                     <value>192.168.56.130</value>
                 </constructor-arg>
                 <constructor-arg name="port">
                     <value>8003</value>
                 </constructor-arg>
             </bean>
             <bean class="redis.clients.jedis.HostAndPort">
                 <constructor-arg name="host">
                     <value>192.168.56.130</value>
                 </constructor-arg>
                 <constructor-arg name="port">
                     <value>8004</value>
                 </constructor-arg>
             </bean>
             <bean class="redis.clients.jedis.HostAndPort">
                 <constructor-arg name="host">
                     <value>192.168.56.130</value>
                 </constructor-arg>
                 <constructor-arg name="port">
                     <value>8005</value>
                 </constructor-arg>
             </bean>
             <bean class="redis.clients.jedis.HostAndPort">
                 <constructor-arg name="host">
                     <value>192.168.56.130</value>
                 </constructor-arg>
                 <constructor-arg name="port">
                     <value>8006</value>
                 </constructor-arg>
             </bean>
         </set>
     </constructor-arg>
     <constructor-arg name="poolConfig">
         <ref bean="poolconfig"/>
     </constructor-arg>
 </bean>
 <bean id="jdeisDaoImplCluster" class="an.sz.jedis.dao.impl.JdeisDaoImplCluster"></bean>

7. RedisDesktopManager的使用

(1) 如何通过Redis Desktop Manager工具管理Redis?
安装Redis Desktop Manager工具
在这里插入图片描述
连接redis
在这里插入图片描述
查看以及操作数据
在这里插入图片描述
(2) Redis Desktop Manager在使用时需要注意什么?
在操作完数据之后要刷新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值