学习主题:Redis
学习目标:
1 掌握Redis集群的搭建
2 掌握Jedis,JedisPool还有JedisCluster
3 掌握spring整合Jedis
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
1. Redis集群-创建Redis集群(对应124-125)
(1) 如何搭建Redis集群?
需求: 三对主从(最小)
在192.168.93.130下安装六个redis实例
需要删除以前的dump.rdb与apeendonly.aof
8001-8006端口分配
步骤
Redis集群需要使用一个ruby的脚本来完成集群
1. 安装ruby环境
Yum install ruby
2. 安装ruby的包管理器
Yum install rubygems
3. 进入到redis的安装目录下的src目录下找到redis-trib.rb这个文件
4. 该脚本执行需要依赖一些其他的ruby包(下载一个redis-3.0.0.gem)
5. 安装这个ruby包
Gem install redis-3.0.0.gem
6. 先启动redis的6个实例
先在local目录下创建一个目录名称为redis-cluster
Mkdir redis-cluster
7.将安装好的redis下的bin目录拷贝到redis-cluster目录下,起名为redis01
8.复制redis01六次修改他们各自的配置文件
Port 端口 8001-8006
将cluster-enabled yes 去掉注释
7. 把创建集群的ruby脚本复制到redis-cluster中
8. 创建一个批量启动的脚本和一个批量关闭的脚本
9. 执行启动脚本
10. 查看所有的redis是否启动成功
11. 创建集群
: ./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
12. 测试redis集群
链接集群的任意一个节点测试 链接注意一定要有-c参数否则能连上,但是无法操作集群
[root@localhost redis-cluster]# ./redis01/redis-cli -h 192.168.10.128 -p 7001 -c
13.关闭集群脚本关闭
2. Jedis操作Redis单机版
(1) 什么是Jedis?
可以通过java代码来操作redis的工具
(2) 在代码中如何通过Jedis单机版操作Redis?
//获得redis对象
Jedis jedis = new Jedis("192.168.93.130",6379);
//jedis中的方法对应redis中的命令
jedis.set("bjsxt", "com");
System.out.println(jedis.get("bjsxt"));
}
JedisPool的使用
(3) 在代码中如何通过Jedis连接池操作Redis?
//获取连接池
JedisPool jedisPool = new JedisPool("192.168.93.130", 6379);
//得到jedis对象
Jedis jedis = jedisPool.getResource();
jedis.set("wudi1", "历史性");
System.out.println(jedis.get("wudi1"));
jedis.close();
3. JedisCluster的使用
(1) 如何通过JedisCluster操作Redis集群?
Set<HostAndPort> set = new HashSet<>();
set.add(new HostAndPort("192.168.93.130", 8001));
set.add(new HostAndPort("192.168.93.130", 8002));
set.add(new HostAndPort("192.168.93.130", 8003));
set.add(new HostAndPort("192.168.93.130", 8004));
set.add(new HostAndPort("192.168.93.130", 8005));
set.add(new HostAndPort("192.168.93.130", 8006));
JedisCluster jsCluster = new JedisCluster(set);
jsCluster.set("儿子", "fd");
System.out.println(jsCluster.get("儿子"));
4. Spring整合Jedis单机版-配置整合
(1) 在Spring中如何整合Jedis单机版?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-m
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.bjsxt.jedisService" />
<!-- 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>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="poolConfig" ref="poolconfig"></constructor-arg>
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="6379"></constructor-arg>
</bean>
<bean id="jedisServiceImpl" class="com.bjsxt.jedisService.impl.jedisServiceImpl"></bean>
</beans>
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
第164次(Redis)
学习主题:Redis
学习目标:
1 掌握spring整合JedisCluster
2 掌握在dubbo+zookpeeker的环境中使用redis作为缓存技术
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
5. Spring整合JedisCluster
(1) 在Spring中如何整合Jedis集群版?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-m
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.bjsxt.jedisService" />
<!-- 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>
<!-- <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="poolConfig" ref="poolconfig"></constructor-arg>
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="6379"></constructor-arg>
</bean> -->
<!-- <bean id="jedisServiceImpl" class="com.bjsxt.jedisService.impl.jedisServiceImpl"></bean> -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="poolConfig" ref="poolconfig"></constructor-arg>
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="8001"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="8002"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="8003"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="8004"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="8005"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.93.130"></constructor-arg>
<constructor-arg name="port" value="8005"></constructor-arg>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="jedisServiceImplCluster" class="com.bjsxt.jedisService.impl.jedisServiceImplCluster"></bean>
</beans>
6. RedisDesktopManager的使用
(1) 如何通过Redis Desktop Manager工具管理Redis?
安装
(2) Redis Desktop Manager在使用时需要注意什么?
只能链接单机版radis ,集群版不支持
7. Redis实战案例(对应133-138)
(1) 在Dubbo中完成对用户表的CRUD操作的项目中,添加Redis缓存 (源码打包提交)
看源码