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在使用时需要注意什么?
在操作完数据之后要刷新