1、redis简介
redis是一个key-value存储系统。和memcache类似,它支持存储value类型相对更多,包括String,list,set,sortset,这些数据类型都支持push/pop,add/remove及取交际并集差集等更丰富的操作,并且这些操作都是原子性的。与memcache一样,为了保证效率,数据都缓存在内存中。但redis为了进行数据持久化操作,会周期性的把数据写入磁盘(RDB)、或吧修改操作写入追加的记录文件(AOF)。
redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcache这类keyvalue存储的不足,在部分场合对关系库起到了很好的补充作用。
2、redis3的安装
redis-3.2.5.tar.gz
- 安装依赖gcc,ruby,rubygems
- 安装redisgems
[root@CentOSA gem]gem install -l redis-3.2.1.gem
安装redis-3.0.5
[root@CentOSA ~]# tar -zxf redis-3.0.5.tar.gz -C /usr/
[root@CentOSA redis-3.2.5]# make访问redis
[root@CentOSA redis-3.2.5]# ./src/redis-cli -p 【6379】
3、redis3的集群搭建
开启AOF、Cluster
appendonly yes
cluster-enabled yes搭建集群
[root@CentOSA redis-3.2.5]# ./src/redis-trib.rb create –replicas 1 [ip(n):port(n)]
查看集群状况以及测试
[root@CentOSA redis-3.2.5]# ./src/redis-trib.rb check [ip:port]
[root@CentOSA redis-3.2.5]# ./src/redis-cli -p [port] -c -h [ip]集群配置
负载均衡
[root@CentOSA redis-3.2.5]# ./src/redis-trib.rb reshard 192.168.111.129:6379
扩展集群
[root@CentOSA redis-3.2.5]# ./src/redis-trib.rb add-node [(new)ip:port] [(old)ip:port]
附注:新机器将会被作为主机添加到集群。
[root@CentOSA redis-3.2.5]# ./src/redis-trib.rb add-node –slave [(new)ip:port] [(old)ip:port]
附注:随机给从机最少的主机添加从机
[root@CentOSA redis-3.2.5]#./src/redis-trib.rb add-node –slave –master-id [nodeid] [(new)ip:port] [(old)ip:port]
附注:给指定的主机添加从机
删除节点
[root@CentOSA redis-3.2.5]# ./src/redis-trib.rb del-node [(old)ip:port] [nodeid]
附注:默认只能删除从机 ,如果没有hash slots主机也可以删除。
将对应从机升级为主机
[root@CentOSA redis-3.2.5]# ./src/redis-cli -p 6382 -c -h 192.168.111.129
192.168.111.129:6382> CLUSTER FAILOVER
更改从机的所属主机
[root@CentOSA redis-3.2.5]# ./src/redis-cli -p 6379 -c -h 192.168.111.129
192.168.111.129:6379> CLUSTER REPLICATE [nodeid]
4、 通过jedis操作redis3集群
代码如下
public class RedisAndJavaTest5 {
public static void main(String[] args) {
//添加节点
Set<HostAndPort> nodes=new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.0.185", 6379));
nodes.add(new HostAndPort("192.168.0.185", 6380));
nodes.add(new HostAndPort("192.168.0.185", 6381));
nodes.add(new HostAndPort("192.168.0.185", 6382));
nodes.add(new HostAndPort("192.168.0.185", 6383));
nodes.add(new HostAndPort("192.168.0.185", 6384));
nodes.add(new HostAndPort("192.168.0.185", 6385));
//获得cluster
JedisCluster cluster=new JedisCluster(nodes);
//测试get方法
String string = cluster.get("user:1");
System.out.println(string);
cluster.close();
}
}
5、通过SpringData操作redis3集群
spring工厂配置文件
<!-- cluster配置 -->
<bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
<constructor-arg index="0">
<list>
<value>192.168.111.129:6379</value>
.
.
</list>
</constructor-arg>
</bean>
<!-- 创建jedis连接工厂 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg index="0" ref="redisClusterConfiguration"></constructor-arg>
</bean>
<!-- 构造RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
</bean>
代码如下
public class StringData {
public static void main(String[] args) {
//通过Spring获得redisTemplate对象
@SuppressWarnings("resource")
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
RedisTemplate redisTemplate = (RedisTemplate) ac.getBean("redisTemplate");
//测试redisTemplate对象获得opsValue对redis进行简单操作
ValueOperations opsForValue = redisTemplate.opsForValue();
opsForValue.set("spring:2", "spring2");
String name = (String) opsForValue.get("spring:1");
System.out.println(name);
//redisTemplate对象可以获得不同数据类型的操作对象
ListOperations opsForList = redisTemplate.opsForList();
SetOperations opsForSet = redisTemplate.opsForSet();
HashOperations opsForHash = redisTemplate.opsForHash();
ZSetOperations opsForZSet = redisTemplate.opsForZSet();
}
}
注:对cluster集群的支持是spring4较新版本的特性,以前的版本还不支持上述操作
173

被折叠的 条评论
为什么被折叠?



